if (dominatesPattern != null) {
scope.problemReporter().signalError(
dominatesPattern.getStart(), dominatesPattern.getEnd(),
- "dominates has changed for 1.1, use 'declare dominates: " +
+ "dominates has changed for 1.1, use 'declare precedence: " +
new String(this.name) + ", " + dominatesPattern.toString() + ";' " +
"in the body of the aspect instead");
}
pointcut p(): handler(Foo);
pointcut p2(): initialization(Object.new(..));
+
+ declare dominates: A, B;
}
aspect D a b c {}
\ No newline at end of file
public void testUnimplementedSyntax() {
checkCompile("src1/UnimplementedSyntax.java",
- new int[] {5, 15, 16, 23});
+ new int[] {5, 15, 16, 22, 25});
}
public void testXlintWarn() {
checkCompile("src1/Xlint.java", NO_ERRORS);
}
aspect A2 {
- declare dominates: A2, A1;
+ declare precedence: A2, A1;
int around() : set(int C1.f) && within(A1) {
return C1.f = 3;
}
}
-aspect A1 { declare dominates: A1, A2;
+aspect A1 { declare precedence: A1, A2;
pointcut cut(): target(C) && execution(void a());
before(): A1.cut() { T.add("A1"); }
}
-aspect A2 { declare dominates: A2, A3;
+aspect A2 { declare precedence: A2, A3;
before(): A1.cut() { T.add("A2"); }
}
-aspect A3 { declare dominates: A3, A1;
+aspect A3 { declare precedence: A3, A1;
before(): A1.cut() { T.add("A3"); }
}
// This cluster of aspects checks that the partial order rules work
//aspect A1 dominates A2, B1 {
-aspect A1 { declare dominates: A1, A2 || B1;
+aspect A1 { declare precedence: A1, A2 || B1;
pointcut cut() : target(C) && call(void a());
before(): A1.cut() { T.add("A1"); }
}
-aspect A2 { declare dominates: A2, B1;
+aspect A2 { declare precedence: A2, B1;
before(): A1.cut() { T.add("A2"); }
}
-aspect A3 { declare dominates: A3, A4, A1;
+aspect A3 { declare precedence: A3, A4, A1;
before(): A1.cut() { T.add("A3"); }
}
-aspect A4 { declare dominates: A4, A1;
+aspect A4 { declare precedence: A4, A1;
before(): A1.cut() { T.add("A4"); }
}
//aspect C1 dominates C2, C3 {
-aspect C1 { declare dominates: C1, C2 || C3;
+aspect C1 { declare precedence: C1, C2 || C3;
before(): A1.cut() { T.add("C1"); }
}
-aspect C2 { declare dominates: C2, C3;
+aspect C2 { declare precedence: C2, C3;
before(): A1.cut() { T.add("C2"); }
}
-aspect C3 { declare dominates: C3, C4;
+aspect C3 { declare precedence: C3, C4;
before(): A1.cut() { T.add("C3"); }
}
//aspect C4 dominates A1, A2, A3, A4, B1 {
-aspect C4 { declare dominates: C4, (A1 || A2 || A3 || A4 || B1);
+aspect C4 { declare precedence: C4, (A1 || A2 || A3 || A4 || B1);
before(): A1.cut() { T.add("C4"); }
}
}
}
-aspect Mobility { declare dominates: Mobility, MoveTracking;
+aspect Mobility { declare precedence: Mobility, MoveTracking;
private static boolean enableMoves = true;
class C {}
// bug: dominates clause prevents collision error
-abstract aspect AA { declare dominates: AA, B;
+abstract aspect AA { declare precedence: AA, B;
// same result if this line is uncommented
//public String C.title() { return "[AA] C.title()"; }
}
class C {}
// works if A is specified explicitly
-abstract aspect AA { declare dominates: AA, (AA+ && !AA); // error: should dominate A
+abstract aspect AA { declare precedence: AA, (AA+ && !AA); // error: should dominate A
public String C.method() { return "pass"; }
}
class C {}
// works if A is specified explicitly
-abstract aspect AA { declare dominates: AA, AA+; // CE, AA is matched by both pieces
+abstract aspect AA { declare precedence: AA, AA+; // CE, AA is matched by both pieces
public String C.method() { return "pass"; }
}
// dominates should have no effect as call join points
// always come before executions
-aspect MultiExec extends Multi { declare dominates: MultiExec, MultiCall;
+aspect MultiExec extends Multi { declare precedence: MultiExec, MultiCall;
public static boolean enabled = false;
String getPrefix() { return "exec"; }
public String toString() {
StringBuffer buf = new StringBuffer();
- buf.append("declare dominates: ");
+ buf.append("declare precedence: ");
buf.append(patterns);
buf.append(";");
return buf.toString();
ret = parseErrorOrWarning(true);
} else if (kind.equals("warning")) {
ret = parseErrorOrWarning(false);
- } else if (kind.equals("dominates")) {
+ } else if (kind.equals("precedence")) {
ret = parseDominates();
+ } else if (kind.equals("dominates")) {
+ throw new ParserException("name changed to declare precedence", tokenSource.peek(-2));
} else if (kind.equals("parents")) {
ret = parseParents();
} else if (kind.equals("soft")) {
public void testDominates() {
Declare dom =
- new PatternParser("declare dominates: java.lang.String, java.lang.Throwable").parseDeclare();
+ new PatternParser("declare precedence: java.lang.String, java.lang.Throwable").parseDeclare();
//??? concretize dom
ResolvedTypeX aType = world.resolve("Aspect");
CrosscuttingMembers xcut = new CrosscuttingMembers(aType);
public void testDominatesHarder() {
Declare dom =
- new PatternParser("declare dominates: *, java.lang.String, java.lang.Throwable").parseDeclare();
+ new PatternParser("declare precedence: *, java.lang.String, java.lang.Throwable").parseDeclare();
//??? concretize dom
ResolvedTypeX aType = world.resolve("Aspect");
CrosscuttingMembers xcut = new CrosscuttingMembers(aType);