Community
Participate
Working Groups
build I20061205-1200 //zz\MyA1.java package zz; import static java.lang.annotation.ElementType.TYPE; import java.lang.annotation.Target; @Target({TYPE}) public @interface MyA1 { } //zz\MyA2.java package zz; public @interface MyA2 { public static final MyA1 XX = null; } //zz\MyB1.java package zz; public @interface MyB1 { MyA1 value(); } //TestAnnot.java import zz.*; public class TestAnnot { @MyB1(MyA2.XX) public void foo(){} } When TestAnnot is reconciled the following exception occurs and is shown in the problem view. va.lang.ClassCastException: org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference at org.eclipse.jdt.internal.compiler.ClassFile.generateElementValueForNonConstantExpression(ClassFile.java:5215) at org.eclipse.jdt.internal.compiler.ClassFile.generateElementValue(ClassFile.java:5096) at org.eclipse.jdt.internal.compiler.ClassFile.generateAnnotation(ClassFile.java:5048) at org.eclipse.jdt.internal.compiler.ClassFile.generateRuntimeAnnotations(ClassFile.java:5567) at org.eclipse.jdt.internal.compiler.ClassFile.generateMethodInfoAttribute(ClassFile.java:5403) at org.eclipse.jdt.internal.compiler.ClassFile.generateMethodInfoAttribute(ClassFile.java:5254) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:210) at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.generateCode(AbstractMethodDeclaration.java:176) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:530) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.generateCode(TypeDeclaration.java:581) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.generateCode(CompilationUnitDeclaration.java:215) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:662) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:695) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:177) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:249) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:166) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:85) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:779) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1147)
This is a bug in the compiler. We don't reject the annotation definition in TestAnnot. javac 1.5.0 reports: zz/TestAnnot.java:4: annotation value must be an annotation @MyB1(MyA2.XX) ^
Created attachment 55318 [details] Proposed fix
Created attachment 55320 [details] Regression tests
Philippe, please double-check.
+1. Feels something we should address in 3.2.2 as well.
Released for 3.3M4. Regression tests added. org.eclipse.jdt.core.tests.compiler.regression.AnnotationTest#test219/224
Reopen to backport to 3.2.2
Released for 3.2.2. Same regression tests.
Verified for 3.3M4 with I20061212-0010.
Verified for 3.2.2 using build M20070112-1200.