aboutsummaryrefslogtreecommitdiffstats
path: root/org.aspectj.matcher/src/org/aspectj/weaver/patterns
diff options
context:
space:
mode:
authoraclement <aclement>2011-08-12 17:51:09 +0000
committeraclement <aclement>2011-08-12 17:51:09 +0000
commitcf25e81e270720c86740cc18f6656f731af3b1f4 (patch)
tree21256693be6a2ccf50d3b6277efbac10696e4140 /org.aspectj.matcher/src/org/aspectj/weaver/patterns
parent8a64b5fcd37c6f67f9e339f6fe34714590052ed2 (diff)
downloadaspectj-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')
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java8
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/ExposedState.java9
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/IfPointcut.java33
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/KindedPointcut.java20
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/patterns/SimpleScope.java18
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;
}
}
}