ソースを参照

Fix for Bugzilla Bug 53012

   declare precedence on a class should be a compile-time error
tags/Root_ajdt_support
aclement 20年前
コミット
0a017593dc

+ 12
- 0
tests/ajcTests.xml ファイルの表示

@@ -7511,4 +7511,16 @@
</compile>
</ajc-test>
<ajc-test dir="bugs/declarePrecedenceWithClasses" pr="53012"
title="declare precedence on a class should be a compile-time error">
<compile files="DeclarePrecedenceTestClass.java" >
<message kind="error" line="10" text="Non-aspect types can only be specified"/>
</compile>
</ajc-test>
<ajc-test dir="bugs/declarePrecedenceWithClasses" pr="53012"
title="declare precedence on a class should be a compile-time error">
<compile files="Priority.aj" />
</ajc-test>
</suite>

+ 15
- 0
tests/bugs/declarePrecedenceWithClasses/DeclarePrecedenceTestClass.java ファイルの表示

@@ -0,0 +1,15 @@
//Bug 53012
// DP contains a declare precedence statement that mentions classes

public class DeclarePrecedenceTestClass {
public static void main(String[] args) {
System.out.println("hello");
}
}
aspect DP {
declare precedence: DeclarePrecedenceTestClass, DP;
before() : staticinitialization(DeclarePrecedenceTestClass) {
System.out.println("ok");
}
}

+ 11
- 0
tests/bugs/declarePrecedenceWithClasses/Priority.aj ファイルの表示

@@ -0,0 +1,11 @@
// Bug 53012
// Although the declare precedence mentions interfaces (and not aspects explicitly), it does
// mention with a '+' suffix - this should be allowed.
public aspect Priority {
public interface Highest {}
public interface Lowest {}
declare precedence: Highest+, *, Lowest+;
}
aspect Security implements Priority.Highest {}

+ 8
- 0
weaver/src/org/aspectj/weaver/patterns/DeclarePrecedence.java ファイルの表示

@@ -82,6 +82,14 @@ public class DeclarePrecedence extends Declare {
}
ResolvedTypeX exactType = pi.getExactType().resolve(scope.getWorld());
if (exactType == ResolvedTypeX.MISSING) continue;
// Cannot do a dec prec specifying a non-aspect types unless suffixed with a '+'
if (!exactType.isAspect() && !pi.isIncludeSubtypes()) {
scope.getWorld().showMessage(IMessage.ERROR,
"Non-aspect types can only be specified in a declare precedence statement when subtypes are included. Non-aspect type is : "+exactType.getName(),
pi.getSourceLocation(),null);
}
for (int j=0; j < patterns.size(); j++) {
if (j == i) continue;
TypePattern pj = patterns.get(j);

読み込み中…
キャンセル
保存