diff options
author | aclement <aclement> | 2005-07-11 10:51:05 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-07-11 10:51:05 +0000 |
commit | 962f6e7732d88d5590f5167f36f78b66984c136b (patch) | |
tree | 9eb524acfe261a22cc13c19c4f1e6f6c21ff0fd5 /weaver | |
parent | 52db900e0c3565c9e0692127f6e2c7774dfc1fdc (diff) | |
download | aspectj-962f6e7732d88d5590f5167f36f78b66984c136b.tar.gz aspectj-962f6e7732d88d5590f5167f36f78b66984c136b.zip |
generics: improved type resolution, aware of raw/simple/parameterized/generic
Diffstat (limited to 'weaver')
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelWorld.java | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java index 71e8eb7cf..7133d824b 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java @@ -268,14 +268,28 @@ public class BcelWorld extends World implements Repository { public BcelObjectType addSourceObjectType(JavaClass jc) { + BcelObjectType ret = null; String signature = TypeX.forName(jc.getClassName()).getSignature(); ReferenceType nameTypeX = (ReferenceType)typeMap.get(signature); - if (nameTypeX == null) { - nameTypeX = new ReferenceType(signature, this); + if (nameTypeX == null) { + if (jc.isGeneric()) { + nameTypeX = ReferenceType.fromTypeX(TypeX.forRawTypeNames(jc.getClassName()),this); + ret = makeBcelObjectType(nameTypeX, jc, true); + ReferenceType genericRefType = new ReferenceType( + TypeX.forGenericTypeSignature(signature,ret.getDeclaredGenericSignature()),this); + nameTypeX.setDelegate(ret); + genericRefType.setDelegate(ret); + nameTypeX.setGenericType(genericRefType); + typeMap.put(signature, nameTypeX); + } else { + nameTypeX = new ReferenceType(signature, this); + ret = makeBcelObjectType(nameTypeX, jc, true); + typeMap.put(signature, nameTypeX); + } + } else { + ret = makeBcelObjectType(nameTypeX, jc, true); } - BcelObjectType ret = makeBcelObjectType(nameTypeX, jc, true); - typeMap.put(signature, nameTypeX); return ret; } |