diff options
author | aclement <aclement> | 2005-06-01 16:10:59 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-06-01 16:10:59 +0000 |
commit | 607fc10e38492c46f489701fa68ae53cf473aedd (patch) | |
tree | 4158f4e18161a7b6bc0f5114fba7177a62c2dc67 | |
parent | 854c88668aa673a47405ee07bb32a51415ee25f9 (diff) | |
download | aspectj-607fc10e38492c46f489701fa68ae53cf473aedd.tar.gz aspectj-607fc10e38492c46f489701fa68ae53cf473aedd.zip |
GenericsWork: TypeX's know their rawTypeSignature in addition to their parameterized signature.
-rw-r--r-- | weaver/src/org/aspectj/weaver/TypeX.java | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/weaver/src/org/aspectj/weaver/TypeX.java b/weaver/src/org/aspectj/weaver/TypeX.java index 3f5c1f39e..aa9fcc37d 100644 --- a/weaver/src/org/aspectj/weaver/TypeX.java +++ b/weaver/src/org/aspectj/weaver/TypeX.java @@ -25,6 +25,12 @@ public class TypeX implements AnnotatedElement { protected String signature; /** + * For parameterized types, this is the signature of the raw type (e.g. Ljava/util/List; ) + * For non-parameterized types, it is null. + */ + protected String rawTypeSignature; + + /** * If this is a parameterized type, these are its parameters */ protected TypeX[] typeParameters; @@ -121,6 +127,7 @@ public class TypeX implements AnnotatedElement { for (int i = 0; i < paramTypeNames.length; i++) { ret.typeParameters[i] = TypeX.forName(paramTypeNames[i]); } + ret.rawTypeSignature = ret.signature; // sig for e.g. List<String> is Ljava/util/List<Ljava/lang/String;>; StringBuffer sigAddition = new StringBuffer(); sigAddition.append("<"); @@ -129,7 +136,7 @@ public class TypeX implements AnnotatedElement { } sigAddition.append(">"); sigAddition.append(";"); - ret.signature = ret.signature + sigAddition.toString(); + ret.signature = ret.signature.substring(0,ret.signature.length()-1) + sigAddition.toString(); return ret; } @@ -196,15 +203,12 @@ public class TypeX implements AnnotatedElement { case 'F': return ResolvedTypeX.FLOAT; case 'I': return ResolvedTypeX.INT; case 'J': return ResolvedTypeX.LONG; - case 'L': - return new TypeX(signature); + case 'L': return new TypeX(signature); case 'S': return ResolvedTypeX.SHORT; case 'V': return ResolvedTypeX.VOID; case 'Z': return ResolvedTypeX.BOOLEAN; - case '[': - return new TypeX(signature); - default: - throw new BCException("Bad type signature " + signature); + case '[': return new TypeX(signature); + default: throw new BCException("Bad type signature " + signature); } } @@ -288,8 +292,21 @@ public class TypeX implements AnnotatedElement { * @return the java JVM signature string for this type. */ public String getSignature() { - return signature; + if (!isParameterized() || rawTypeSignature==null) { return signature; } + return rawTypeSignature; } + + public String getParameterizedSignature() { + return signature; + } + + /** + * For parameterized types, return the signature for the raw type + */ + public String getRawTypeSignature() { + if (!isParameterized() || rawTypeSignature==null) { return signature; } + return rawTypeSignature; + } /** * Determins if this represents an array type. @@ -313,7 +330,9 @@ public class TypeX implements AnnotatedElement { return isParameterized && typeParameters==null; } - private final void setParameterized(boolean b) { isParameterized=b;} + private final void setParameterized(boolean b) { + isParameterized=b; + } /** |