diff options
author | aclement <aclement> | 2010-12-13 19:13:55 +0000 |
---|---|---|
committer | aclement <aclement> | 2010-12-13 19:13:55 +0000 |
commit | b1bc04f163ab7c1c0440df1b23842dcc6f4e3f52 (patch) | |
tree | a8acffeb3191eab94fde56665e0deca0af64015a | |
parent | 34730c68dad99f92d5c5b9d502caa2edfef93e8f (diff) | |
download | aspectj-b1bc04f163ab7c1c0440df1b23842dcc6f4e3f52.tar.gz aspectj-b1bc04f163ab7c1c0440df1b23842dcc6f4e3f52.zip |
332388: test and fix
-rw-r--r-- | org.aspectj.matcher/src/org/aspectj/weaver/TypeVariableReferenceType.java | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/TypeVariableReferenceType.java b/org.aspectj.matcher/src/org/aspectj/weaver/TypeVariableReferenceType.java index 5579dfa9f..e33468cf1 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/TypeVariableReferenceType.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/TypeVariableReferenceType.java @@ -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; } |