diff options
author | acolyer <acolyer> | 2005-11-24 14:28:27 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-11-24 14:28:27 +0000 |
commit | 6eb77c5a3b8328e67a047bc6410a858302a3c714 (patch) | |
tree | 2daa5515d86a31b9756c482a136623ad53b6c52a | |
parent | b3be9410fcd333a516e6a220d30f9705b7aa9748 (diff) | |
download | aspectj-6eb77c5a3b8328e67a047bc6410a858302a3c714.tar.gz aspectj-6eb77c5a3b8328e67a047bc6410a858302a3c714.zip |
fix for pr117614 + changes to make cantFindType a lint warning (default to error) so that it is user controllable in binary weave scenarios.
12 files changed, 100 insertions, 44 deletions
diff --git a/tests/src/org/aspectj/systemtest/ajc150/GenericsTests.java b/tests/src/org/aspectj/systemtest/ajc150/GenericsTests.java index 2af72359d..1c1a82d81 100644 --- a/tests/src/org/aspectj/systemtest/ajc150/GenericsTests.java +++ b/tests/src/org/aspectj/systemtest/ajc150/GenericsTests.java @@ -395,7 +395,7 @@ public class GenericsTests extends XMLBasedAjcTestCase { public void testSophisticatedAspectsV() {runTest("uberaspects - V");} // casts are gone public void testSophisticatedAspectsW() {runTest("uberaspects - W");} public void testSophisticatedAspectsX() {runTest("uberaspects - X");} // from the AJDK -// public void testSophisticatedAspectsY() {runTest("uberaspects - Y");} // pointcut matching + public void testSophisticatedAspectsY() {runTest("uberaspects - Y");} // pointcut matching // FIXME asc these two tests have peculiar error messages - generic aspect related // public void testItdUsingTypeParameter() {runTest("itd using type parameter");} diff --git a/weaver/src/org/aspectj/weaver/Lint.java b/weaver/src/org/aspectj/weaver/Lint.java index ff7cb5332..5380ecfdf 100644 --- a/weaver/src/org/aspectj/weaver/Lint.java +++ b/weaver/src/org/aspectj/weaver/Lint.java @@ -108,6 +108,13 @@ public class Lint { public final Kind aspectExcludedByConfiguration = new Kind("aspectExcludedByConfiguration","aspect {0} exluded for class loader {1}"); + // there are a lot of messages in the cant find type family - I'm defining an umbrella lint warning that + // allows a user to control their severity (for e.g. ltw or binary weaving) + public final Kind cantFindType = + new Kind("cantFindType","{0}"); + + public final Kind cantFindTypeAffectingJoinPointMatch = new Kind("cantFindTypeAffectingJPMatch","{0}"); + public Lint(World world) { this.world = world; } diff --git a/weaver/src/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.java b/weaver/src/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.java index 204aa144b..4832f0518 100644 --- a/weaver/src/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.java +++ b/weaver/src/org/aspectj/weaver/MissingResolvedTypeWithKnownSignature.java @@ -176,7 +176,8 @@ public class MissingResolvedTypeWithKnownSignature extends ResolvedType { if (issuedJoinPointWarning) return; String message = WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_JOINPOINT,getName(),signature); message += "\n" + CompilationAndWeavingContext.getCurrentContext(); - MessageUtil.warn(world.getMessageHandler(),message); + world.getLint().cantFindTypeAffectingJoinPointMatch.signal(message,null); +// MessageUtil.warn(world.getMessageHandler(),message); issuedJoinPointWarning = true; } @@ -184,7 +185,8 @@ public class MissingResolvedTypeWithKnownSignature extends ResolvedType { if (issuedMissingInterfaceWarning) return; String message = WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_INTERFACE_METHODS,getName(),signature); message += "\n" + CompilationAndWeavingContext.getCurrentContext(); - MessageUtil.warn(world.getMessageHandler(),message); + world.getLint().cantFindTypeAffectingJoinPointMatch.signal(message,null); + //MessageUtil.warn(world.getMessageHandler(),message); issuedMissingInterfaceWarning = true; } @@ -192,7 +194,8 @@ public class MissingResolvedTypeWithKnownSignature extends ResolvedType { if (issuedCantFindTypeError) return; String message = WeaverMessages.format(key,getName()); message += "\n" + CompilationAndWeavingContext.getCurrentContext(); - MessageUtil.error(world.getMessageHandler(),message); + world.getLint().cantFindType.signal(message,null); +// MessageUtil.error(world.getMessageHandler(),message); issuedCantFindTypeError = true; } @@ -200,7 +203,8 @@ public class MissingResolvedTypeWithKnownSignature extends ResolvedType { if (issuedCantFindTypeError) return; String message = WeaverMessages.format(key,getName(),insert); message += "\n" + CompilationAndWeavingContext.getCurrentContext(); - MessageUtil.error(world.getMessageHandler(),message); + world.getLint().cantFindType.signal(message,null); +// MessageUtil.error(world.getMessageHandler(),message); issuedCantFindTypeError = true; } diff --git a/weaver/src/org/aspectj/weaver/World.java b/weaver/src/org/aspectj/weaver/World.java index 29810f984..d5df39a19 100644 --- a/weaver/src/org/aspectj/weaver/World.java +++ b/weaver/src/org/aspectj/weaver/World.java @@ -142,13 +142,14 @@ public abstract class World implements Dump.INode { public ResolvedType resolve(UnresolvedType ty,ISourceLocation isl) { ResolvedType ret = resolve(ty,true); if (ty == ResolvedType.MISSING) { - IMessage msg = null; - if (isl!=null) { - msg = MessageUtil.error(WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE,ty.getName()),isl); - } else { - msg = MessageUtil.error(WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE,ty.getName())); - } - messageHandler.handleMessage(msg); + //IMessage msg = null; + getLint().cantFindType.signal(WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE,ty.getName()),isl); + //if (isl!=null) { + //msg = MessageUtil.error(WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE,ty.getName()),isl); + //} else { + //msg = MessageUtil.error(WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE,ty.getName())); + //} + //messageHandler.handleMessage(msg); } return ret; } diff --git a/weaver/src/org/aspectj/weaver/XlintDefault.properties b/weaver/src/org/aspectj/weaver/XlintDefault.properties index e495f4aa4..2e0f7baac 100644 --- a/weaver/src/org/aspectj/weaver/XlintDefault.properties +++ b/weaver/src/org/aspectj/weaver/XlintDefault.properties @@ -34,3 +34,6 @@ noExplicitConstructorCall = warning aspectExcludedByConfiguration = ignore unmatchedTargetKind = warning + +cantFindType = error +cantFindTypeAffectingJPMatch = warning diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java index e74bb537d..210ce547a 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java @@ -263,10 +263,14 @@ public class BcelAdvice extends Advice { for (int i=0, len=excs.length; i < len; i++) { ResolvedType t = world.resolve(excs[i],true); if (t == ResolvedType.MISSING) { - IMessage msg = new Message( - WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_EXCEPTION_TYPE,excs[i].getName()), - "",IMessage.ERROR,getSourceLocation(),null,null); - world.getMessageHandler().handleMessage(msg); + world.getLint().cantFindType.signal( + WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_EXCEPTION_TYPE,excs[i].getName()), + getSourceLocation() + ); +// IMessage msg = new Message( +// WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_EXCEPTION_TYPE,excs[i].getName()), +// "",IMessage.ERROR,getSourceLocation(),null,null); +// world.getMessageHandler().handleMessage(msg); } if (!(runtimeException.isAssignableFrom(t) || error.isAssignableFrom(t))) { ret.add(t); diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java index e358d4dac..cf83ceda6 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java @@ -2019,11 +2019,16 @@ public class BcelShadow extends Shadow { } ResolvedType declaringType = world.resolve(mungerSig.getDeclaringType(),true); if (declaringType == ResolvedType.MISSING) { - IMessage msg = new Message( - WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_DURING_AROUND_WEAVE,declaringType.getClassName()), - "",IMessage.ERROR,getSourceLocation(),null, - new ISourceLocation[]{ munger.getSourceLocation()}); - world.getMessageHandler().handleMessage(msg); + world.getLint().cantFindType.signal( + new String[] {WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_DURING_AROUND_WEAVE,declaringType.getClassName())}, + getSourceLocation(), + new ISourceLocation[]{ munger.getSourceLocation()} + ); +// IMessage msg = new Message( +// WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_DURING_AROUND_WEAVE,declaringType.getClassName()), +// "",IMessage.ERROR,getSourceLocation(),null, +// new ISourceLocation[]{ munger.getSourceLocation()}); +// world.getMessageHandler().handleMessage(msg); } //??? might want some checks here to give better errors BcelObjectType ot = BcelWorld.getBcelObjectType((declaringType.isParameterizedType()?declaringType.getGenericType():declaringType)); @@ -2619,11 +2624,16 @@ public class BcelShadow extends Shadow { UnresolvedType bcelTX = BcelWorld.fromBcel(stateTypes[i]); ResolvedType stateRTX = world.resolve(bcelTX,true); if (stateRTX == ResolvedType.MISSING) { - IMessage msg = new Message( - WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_DURING_AROUND_WEAVE_PREINIT,bcelTX.getClassName()), - "",IMessage.ERROR,getSourceLocation(),null, - new ISourceLocation[]{ munger.getSourceLocation()}); - world.getMessageHandler().handleMessage(msg); + world.getLint().cantFindType.signal( + new String[] {WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_DURING_AROUND_WEAVE_PREINIT,bcelTX.getClassName())}, + getSourceLocation(), + new ISourceLocation[]{ munger.getSourceLocation()} + ); +// IMessage msg = new Message( +// WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_DURING_AROUND_WEAVE_PREINIT,bcelTX.getClassName()), +// "",IMessage.ERROR,getSourceLocation(),null, +// new ISourceLocation[]{ munger.getSourceLocation()}); +// world.getMessageHandler().handleMessage(msg); } stateTempVar.appendConvertableArrayLoad( returnConversionCode, diff --git a/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java index 2cc2b2cbc..a7f979623 100644 --- a/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java @@ -146,9 +146,14 @@ public class ArgsAnnotationPointcut extends NameBindingPointcut { UnresolvedType argType = shadow.getArgType(argsIndex); ResolvedType rArgType = argType.resolve(shadow.getIWorld()); if (rArgType == ResolvedType.MISSING) { - IMessage msg = new Message( - WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_ARG_TYPE,argType.getName()), - "",IMessage.ERROR,shadow.getSourceLocation(),null,new ISourceLocation[]{getSourceLocation()}); + shadow.getIWorld().getLint().cantFindType.signal( + new String[] {WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_ARG_TYPE,argType.getName())}, + shadow.getSourceLocation(), + new ISourceLocation[]{getSourceLocation()} + ); +// IMessage msg = new Message( +// WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_ARG_TYPE,argType.getName()), +// "",IMessage.ERROR,shadow.getSourceLocation(),null,new ISourceLocation[]{getSourceLocation()}); } ResolvedType rAnnType = ap.getAnnotationType().resolve(shadow.getIWorld()); diff --git a/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java index 884c7ec90..93cbba3e1 100644 --- a/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/ArgsPointcut.java @@ -206,10 +206,15 @@ public class ArgsPointcut extends NameBindingPointcut { ResolvedType argRTX = shadow.getIWorld().resolve(argType,true); if (!(type instanceof BindingTypePattern)) { if (argRTX == ResolvedType.MISSING) { - IMessage msg = new Message( - WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_ARG_TYPE,argType.getName()), - "",IMessage.ERROR,shadow.getSourceLocation(),null,new ISourceLocation[]{getSourceLocation()}); - shadow.getIWorld().getMessageHandler().handleMessage(msg); + shadow.getIWorld().getLint().cantFindType.signal( + new String[] {WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_ARG_TYPE,argType.getName())}, + shadow.getSourceLocation(), + new ISourceLocation[]{getSourceLocation()} + ); +// IMessage msg = new Message( +// WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_ARG_TYPE,argType.getName()), +// "",IMessage.ERROR,shadow.getSourceLocation(),null,new ISourceLocation[]{getSourceLocation()}); +// shadow.getIWorld().getMessageHandler().handleMessage(msg); } if (type.matchesInstanceof(argRTX).alwaysTrue()) { continue; diff --git a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java index d25f90501..db47527dd 100644 --- a/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/KindedPointcut.java @@ -26,6 +26,7 @@ import org.aspectj.weaver.Checker; import org.aspectj.weaver.ISourceContext; import org.aspectj.weaver.IntMap; import org.aspectj.weaver.Member; +import org.aspectj.weaver.ResolvedMember; import org.aspectj.weaver.ResolvedType; import org.aspectj.weaver.Shadow; import org.aspectj.weaver.ShadowMunger; @@ -155,7 +156,13 @@ public class KindedPointcut extends Pointcut { // if the method in the declaring type is *not* visible to the // exact declaring type then warning not needed. - int shadowModifiers = shadow.getSignature().resolve(world).getModifiers(); + ResolvedMember rm = shadow.getSignature().resolve(world); + // rm can be null in the case where we are binary weaving, and looking at a class with a call to a method in another class, + // but because of class incompatibilities, the method does not exist on the target class anymore. + // this will be reported elsewhere. + if (rm == null) return; + + int shadowModifiers = rm.getModifiers(); if (!ResolvedType .isVisible( shadowModifiers, diff --git a/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java index e285a5a1a..6c06be7ae 100644 --- a/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/WithinAnnotationPointcut.java @@ -90,11 +90,16 @@ public class WithinAnnotationPointcut extends NameBindingPointcut { protected FuzzyBoolean matchInternal(Shadow shadow) { ResolvedType enclosingType = shadow.getIWorld().resolve(shadow.getEnclosingType(),true); if (enclosingType == ResolvedType.MISSING) { - IMessage msg = new Message( - WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_WITHINPCD, - shadow.getEnclosingType().getName()), - shadow.getSourceLocation(),true,new ISourceLocation[]{getSourceLocation()}); - shadow.getIWorld().getMessageHandler().handleMessage(msg); + shadow.getIWorld().getLint().cantFindType.signal( + new String[] {WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_WITHINPCD, + shadow.getEnclosingType().getName())}, + shadow.getSourceLocation(), + new ISourceLocation[]{getSourceLocation()}); +// IMessage msg = new Message( +// WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_WITHINPCD, +// shadow.getEnclosingType().getName()), +// shadow.getSourceLocation(),true,new ISourceLocation[]{getSourceLocation()}); +// shadow.getIWorld().getMessageHandler().handleMessage(msg); } annotationTypePattern.resolve(shadow.getIWorld()); return annotationTypePattern.matches(enclosingType); diff --git a/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java b/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java index a5e35f453..5072db4fd 100644 --- a/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/WithinPointcut.java @@ -74,11 +74,16 @@ public class WithinPointcut extends Pointcut { protected FuzzyBoolean matchInternal(Shadow shadow) { ResolvedType enclosingType = shadow.getIWorld().resolve(shadow.getEnclosingType(),true); if (enclosingType == ResolvedType.MISSING) { - IMessage msg = new Message( - WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_WITHINPCD, - shadow.getEnclosingType().getName()), - shadow.getSourceLocation(),true,new ISourceLocation[]{getSourceLocation()}); - shadow.getIWorld().getMessageHandler().handleMessage(msg); + shadow.getIWorld().getLint().cantFindType.signal( + new String[] {WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_WITHINPCD, + shadow.getEnclosingType().getName())}, + shadow.getSourceLocation(), + new ISourceLocation[]{getSourceLocation()}); +// IMessage msg = new Message( +// WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_WITHINPCD, +// shadow.getEnclosingType().getName()), +// shadow.getSourceLocation(),true,new ISourceLocation[]{getSourceLocation()}); +// shadow.getIWorld().getMessageHandler().handleMessage(msg); } typePattern.resolve(shadow.getIWorld()); return isWithinType(enclosingType); |