]> source.dussan.org Git - aspectj.git/commitdiff
generics: improved type resolution, aware of raw/simple/parameterized/generic
authoraclement <aclement>
Mon, 11 Jul 2005 10:51:05 +0000 (10:51 +0000)
committeraclement <aclement>
Mon, 11 Jul 2005 10:51:05 +0000 (10:51 +0000)
weaver/src/org/aspectj/weaver/bcel/BcelWorld.java

index 71e8eb7cf8f86b22bac3536a49073ce6a40676a5..7133d824b6cbca0063167ab357200275e88b18ed 100644 (file)
@@ -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;
        }