diff options
author | aclement <aclement> | 2011-08-12 17:51:09 +0000 |
---|---|---|
committer | aclement <aclement> | 2011-08-12 17:51:09 +0000 |
commit | cf25e81e270720c86740cc18f6656f731af3b1f4 (patch) | |
tree | 21256693be6a2ccf50d3b6277efbac10696e4140 /org.aspectj.matcher/src/org/aspectj/weaver/patterns | |
parent | 8a64b5fcd37c6f67f9e339f6fe34714590052ed2 (diff) | |
download | aspectj-cf25e81e270720c86740cc18f6656f731af3b1f4.tar.gz aspectj-cf25e81e270720c86740cc18f6656f731af3b1f4.zip |
239649 and primitives no longer all resolved by default
Diffstat (limited to 'org.aspectj.matcher/src/org/aspectj/weaver/patterns')
5 files changed, 54 insertions, 34 deletions
diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java index 443a58645..8a553632b 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java @@ -129,8 +129,8 @@ public class ConcreteCflowPointcut extends Pointcut { for (Iterator i = slots.iterator(); i.hasNext();) { Slot slot = (Slot) i.next(); // System.out.println("slot: " + slot.formalIndex); - state.set(slot.formalIndex, aspect.getWorld().getWeavingSupport().makeCflowAccessVar(slot.formalType, - cflowField, slot.arrayIndex)); + state.set(slot.formalIndex, + aspect.getWorld().getWeavingSupport().makeCflowAccessVar(slot.formalType, cflowField, slot.arrayIndex)); } } return Test.makeFieldGetCall(cflowField, cflowStackIsValidMethod, Expr.NONE); @@ -138,10 +138,10 @@ public class ConcreteCflowPointcut extends Pointcut { } private static final Member cflowStackIsValidMethod = MemberImpl.method(NameMangler.CFLOW_STACK_UNRESOLVEDTYPE, 0, - ResolvedType.BOOLEAN, "isValid", UnresolvedType.NONE); + UnresolvedType.BOOLEAN, "isValid", UnresolvedType.NONE); private static final Member cflowCounterIsValidMethod = MemberImpl.method(NameMangler.CFLOW_COUNTER_UNRESOLVEDTYPE, 0, - ResolvedType.BOOLEAN, "isValid", UnresolvedType.NONE); + UnresolvedType.BOOLEAN, "isValid", UnresolvedType.NONE); public Pointcut concretize1(ResolvedType inAspect, ResolvedType declaringType, IntMap bindings) { throw new RuntimeException("unimplemented"); diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ExposedState.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ExposedState.java index 127db0406..2a9807118 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ExposedState.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/ExposedState.java @@ -26,6 +26,7 @@ public class ExposedState { private boolean[] erroneousVars; private Expr aspectInstance; private UnresolvedType[] expectedVarTypes; // enables us to check that binding is occurring with the *right* types + private ResolvedType concreteAspect; public ExposedState(int size) { super(); @@ -105,4 +106,12 @@ public class ExposedState { public boolean isErroneousVar(int formalIndex) { return erroneousVars[formalIndex]; } + + public void setConcreteAspect(ResolvedType concreteAspect) { + this.concreteAspect = concreteAspect; + } + + public ResolvedType getConcreteAspect() { + return this.concreteAspect; + } } diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/IfPointcut.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/IfPointcut.java index a3b5e79e2..a845153f9 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/IfPointcut.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/IfPointcut.java @@ -191,7 +191,7 @@ public class IfPointcut extends Pointcut { } Test ret = Literal.TRUE; - List args = new ArrayList(); + List<Var> args = new ArrayList<Var>(); // code style if (extraParameterFlags >= 0) { @@ -214,6 +214,7 @@ public class IfPointcut extends Pointcut { // If there are no args to sort out, don't bother with the recursive call if (baseArgsCount > 0) { ExposedState myState = new ExposedState(baseArgsCount); + myState.setConcreteAspect(state.getConcreteAspect()); // ??? we throw out the test that comes from this walk. All we want here // is bindings for the arguments residueSource.findResidue(shadow, myState); @@ -251,6 +252,10 @@ public class IfPointcut extends Pointcut { if ((extraParameterFlags & Advice.ThisEnclosingJoinPointStaticPart) != 0) { args.add(shadow.getThisEnclosingJoinPointStaticPartVar()); } + + if ((extraParameterFlags & Advice.ThisAspectInstance) != 0) { + args.add(shadow.getThisAspectInstanceVar(state.getConcreteAspect())); + } } else { // @style is slightly different int currentStateIndex = 0; @@ -272,16 +277,20 @@ public class IfPointcut extends Pointcut { if (paramNames != null) { errorParameter.append(testMethod.getParameterTypes()[i].getName()).append(" "); errorParameter.append(paramNames[i]); - shadow.getIWorld().getMessageHandler().handleMessage( - MessageUtil.error("Missing binding for if() pointcut method. Parameter " + (i + 1) + "(" - + errorParameter.toString() - + ") must be bound - even in reference pointcuts (compiler limitation)", - testMethod.getSourceLocation())); + shadow.getIWorld() + .getMessageHandler() + .handleMessage( + MessageUtil.error("Missing binding for if() pointcut method. Parameter " + (i + 1) + + "(" + errorParameter.toString() + + ") must be bound - even in reference pointcuts (compiler limitation)", + testMethod.getSourceLocation())); } else { - shadow.getIWorld().getMessageHandler().handleMessage( - MessageUtil.error("Missing binding for if() pointcut method. Parameter " + (i + 1) - + " must be bound - even in reference pointcuts (compiler limitation)", testMethod - .getSourceLocation())); + shadow.getIWorld() + .getMessageHandler() + .handleMessage( + MessageUtil.error("Missing binding for if() pointcut method. Parameter " + (i + 1) + + " must be bound - even in reference pointcuts (compiler limitation)", + testMethod.getSourceLocation())); } return Literal.TRUE; // exit quickly } @@ -293,8 +302,8 @@ public class IfPointcut extends Pointcut { } args.add(v); - ret = Test.makeAnd(ret, Test.makeInstanceof(v, testMethod.getParameterTypes()[i] - .resolve(shadow.getIWorld()))); + ret = Test.makeAnd(ret, + Test.makeInstanceof(v, testMethod.getParameterTypes()[i].resolve(shadow.getIWorld()))); } } } diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/KindedPointcut.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/KindedPointcut.java index 13770253a..3ccd9b290 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/KindedPointcut.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/KindedPointcut.java @@ -279,14 +279,14 @@ public class KindedPointcut extends Pointcut { return; } - SignaturePattern nonConfusingPattern = new SignaturePattern(signature.getKind(), signature.getModifiers(), signature - .getReturnType(), TypePattern.ANY, signature.getName(), signature.getParameterTypes(), + SignaturePattern nonConfusingPattern = new SignaturePattern(signature.getKind(), signature.getModifiers(), + signature.getReturnType(), TypePattern.ANY, signature.getName(), signature.getParameterTypes(), signature.getThrowsPattern(), signature.getAnnotationPattern()); if (nonConfusingPattern.matches(shadow.getSignature(), shadow.getIWorld(), true)) { shadow.getIWorld().getLint().unmatchedSuperTypeInCall.signal(new String[] { - shadow.getSignature().getDeclaringType().toString(), signature.getDeclaringType().toString() }, this - .getSourceLocation(), new ISourceLocation[] { shadow.getSourceLocation() }); + shadow.getSignature().getDeclaringType().toString(), signature.getDeclaringType().toString() }, + this.getSourceLocation(), new ISourceLocation[] { shadow.getSourceLocation() }); } } @@ -384,7 +384,7 @@ public class KindedPointcut extends Pointcut { // fields can't have a void type! UnresolvedType returnType = signature.getReturnType().getExactType(); - if (returnType == ResolvedType.VOID) { + if (returnType.equals(UnresolvedType.VOID)) { scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.FIELDS_CANT_HAVE_VOID_TYPE), getSourceLocation())); } @@ -413,8 +413,9 @@ public class KindedPointcut extends Pointcut { HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor(); signature.getDeclaringType().traverse(visitor, null); if (visitor.wellHasItThen/* ? */()) { - scope.message(MessageUtil.error(WeaverMessages - .format(WeaverMessages.EXECUTION_DOESNT_SUPPORT_PARAMETERIZED_DECLARING_TYPES), getSourceLocation())); + scope.message(MessageUtil.error( + WeaverMessages.format(WeaverMessages.EXECUTION_DOESNT_SUPPORT_PARAMETERIZED_DECLARING_TYPES), + getSourceLocation())); } visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor(); @@ -430,8 +431,9 @@ public class KindedPointcut extends Pointcut { HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor(); signature.getDeclaringType().traverse(visitor, null); if (visitor.wellHasItThen/* ? */()) { - scope.message(MessageUtil.error(WeaverMessages - .format(WeaverMessages.CALL_DOESNT_SUPPORT_PARAMETERIZED_DECLARING_TYPES), getSourceLocation())); + scope.message(MessageUtil.error( + WeaverMessages.format(WeaverMessages.CALL_DOESNT_SUPPORT_PARAMETERIZED_DECLARING_TYPES), + getSourceLocation())); } visitor = new HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor(); diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SimpleScope.java b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SimpleScope.java index a9b809481..119103d84 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SimpleScope.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/patterns/SimpleScope.java @@ -55,31 +55,31 @@ public class SimpleScope implements IScope { int len = name.length(); if (len == 3) { if (name.equals("int")) { - return ResolvedType.INT; + return UnresolvedType.INT; } } else if (len == 4) { if (name.equals("void")) { - return ResolvedType.VOID; + return UnresolvedType.VOID; } else if (name.equals("byte")) { - return ResolvedType.BYTE; + return UnresolvedType.BYTE; } else if (name.equals("char")) { - return ResolvedType.CHAR; + return UnresolvedType.CHAR; } else if (name.equals("long")) { - return ResolvedType.LONG; + return UnresolvedType.LONG; } } else if (len == 5) { if (name.equals("float")) { - return ResolvedType.FLOAT; + return UnresolvedType.FLOAT; } else if (name.equals("short")) { - return ResolvedType.SHORT; + return UnresolvedType.SHORT; } } else if (len == 6) { if (name.equals("double")) { - return ResolvedType.DOUBLE; + return UnresolvedType.DOUBLE; } } else if (len == 7) { if (name.equals("boolean")) { - return ResolvedType.BOOLEAN; + return UnresolvedType.BOOLEAN; } } } |