]> source.dussan.org Git - aspectj.git/commitdiff
332388: test and fix
authoraclement <aclement>
Mon, 13 Dec 2010 19:13:55 +0000 (19:13 +0000)
committeraclement <aclement>
Mon, 13 Dec 2010 19:13:55 +0000 (19:13 +0000)
org.aspectj.matcher/src/org/aspectj/weaver/TypeVariableReferenceType.java

index 5579dfa9f810911ac16936ee9270029bc0959b9b..e33468cf181aba95fb283cc3443d77dd462b1456 100644 (file)
@@ -9,6 +9,7 @@
 package org.aspectj.weaver;
 
 import java.util.Map;
+import org.aspectj.bridge.Message;
 
 /**
  * ReferenceType representing a type variable. The delegate for this reference type is the upperbound on the type variable (so
@@ -41,7 +42,19 @@ public class TypeVariableReferenceType extends ReferenceType implements TypeVari
        @Override
        public ReferenceTypeDelegate getDelegate() {
                if (this.delegate == null) {
-                       setDelegate(new BoundedReferenceTypeDelegate((ReferenceType) typeVariable.getFirstBound().resolve(world)));
+                       ResolvedType resolvedFirstBound = typeVariable.getFirstBound().resolve(world);
+                       BoundedReferenceTypeDelegate brtd = null;
+                       if (resolvedFirstBound.isMissing()) {
+                               brtd = new BoundedReferenceTypeDelegate((ReferenceType) world.resolve(UnresolvedType.OBJECT));
+                               setDelegate(brtd); // set now because getSourceLocation() below will cause a recursive step to discover the delegate
+                               world.getMessageHandler().handleMessage(
+                                               new Message("Unable to find type for generic bound.  Missing type is " + resolvedFirstBound.getName(),
+                                                               getSourceLocation(), true));
+                       } else {
+                               brtd = new BoundedReferenceTypeDelegate((ReferenceType) resolvedFirstBound);
+                               setDelegate(brtd);
+                       }
+
                }
                return this.delegate;
        }