]> source.dussan.org Git - aspectj.git/commitdiff
87525 - new error message (and testcase). Thats all I'm doing on this for 1.5.0
authoraclement <aclement>
Wed, 23 Nov 2005 12:36:28 +0000 (12:36 +0000)
committeraclement <aclement>
Wed, 23 Nov 2005 12:36:28 +0000 (12:36 +0000)
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
tests/bugs150/pr87525/A.java [new file with mode: 0644]
tests/bugs150/pr87525/B.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java
tests/src/org/aspectj/systemtest/ajc150/ajc150.xml

index 5817b50ef1936c2e9276eed985e1ce2eb4911b2c..d33fa0ff47dce6709d6c555a31a2cb1f5ce8e08d 100644 (file)
@@ -24,6 +24,7 @@ import org.aspectj.ajdt.internal.compiler.ast.PointcutDeclaration;
 import org.aspectj.ajdt.internal.compiler.ast.Proceed;
 import org.aspectj.ajdt.internal.compiler.lookup.EclipseFactory;
 import org.aspectj.ajdt.internal.compiler.lookup.InterTypeMethodBinding;
+import org.aspectj.ajdt.internal.compiler.lookup.PrivilegedFieldBinding;
 import org.aspectj.bridge.context.CompilationAndWeavingContext;
 import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
 import org.aspectj.org.eclipse.jdt.core.compiler.IProblem;
@@ -34,7 +35,9 @@ import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Annotation;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.ExplicitConstructorCall;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.Expression;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.LocalDeclaration;
+import org.aspectj.org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference;
 import org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
 import org.aspectj.org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.aspectj.org.eclipse.jdt.internal.compiler.impl.ReferenceContext;
@@ -417,6 +420,18 @@ public class AjProblemReporter extends ProblemReporter {
                        super.unusedPrivateMethod(methodDecl);
     }
     
+    public void caseExpressionMustBeConstant(Expression expression) {
+       if (expression instanceof QualifiedNameReference) {
+               QualifiedNameReference qnr = (QualifiedNameReference)expression;
+               if (qnr.otherBindings!=null && qnr.otherBindings.length>0 && qnr.otherBindings[0] instanceof PrivilegedFieldBinding) {
+                       super.signalError(expression.sourceStart,expression.sourceEnd,"Fields accessible due to an aspect being privileged can not be used in switch statements");
+                       referenceContext.tagAsHavingErrors();
+                       return;
+               }
+       }
+       super.caseExpressionMustBeConstant(expression);
+    }
+    
     public void unusedArgument(LocalDeclaration localDecl) {
        // don't warn if this is an aj synthetic arg
        String argType = new String(localDecl.type.resolvedType.signature());
diff --git a/tests/bugs150/pr87525/A.java b/tests/bugs150/pr87525/A.java
new file mode 100644 (file)
index 0000000..edb3b69
--- /dev/null
@@ -0,0 +1,5 @@
+class A {
+
+  private final static int c = 1;
+
+}
diff --git a/tests/bugs150/pr87525/B.java b/tests/bugs150/pr87525/B.java
new file mode 100644 (file)
index 0000000..5fbf93a
--- /dev/null
@@ -0,0 +1,9 @@
+privileged aspect B {
+
+  before(A anA):execution(* a()) && this(anA){   
+      switch(1){
+        case anA.c: // "case expressions must be constant expressions"
+      }
+    }
+
+}
index 683ee9e998a7d777ba26562456f64045cdef63e8..f6d67c68938a19b95d65c99c0d027614450b3795 100644 (file)
@@ -49,6 +49,7 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
   public void testGenericITDsAndAbstractMethodError_pr102357() { runTest("generic itds and abstract method error");}
   */
   
+  public void testPrivilegeProblem_pr87525() { runTest("privilege problem with switch");}
   public void testGenericAspects_pr115237() { runTest("aspectOf and generic aspects");}
   public void testClassFormatError_pr114436() { runTest("ClassFormatError binary weaving perthis");}
   public void testParserException_pr115788() { runTest("parser exception");}
index 39b35bb7724ed77128b79ea448213f870c37dd15..c517c8fc0e2fca1722be67439c09493da3f24c61 100644 (file)
                <compile files="Pr113368.aj"/>
                <run class="Pr113368"/>
     </ajc-test>
+    
+    <ajc-test dir="bugs150/pr87525" pr="87525" title="privilege problem with switch">
+               <compile files="A.java,B.java">
+                 <message kind="error" line="5" text="Fields accessible due to an aspect being privileged can not be used in switch statements"/>
+               </compile>
+    </ajc-test>
 
        <ajc-test dir="java5/reflection" title="pointcut parsing with ajc compiled pointcut references">
                <compile files="PointcutLibrary.aj,ReflectOnAjcCompiledPointcuts.java" options="-1.5"></compile>