Community
Participate
Working Groups
Created attachment 84199 [details] annotation jar The following code will not resolve with the given annotation: public class Test { @TestAnnotation private String foo; } public @interface TestAnnotation { Class targetItem() default void.class; } NOTE: The annotation must be in a referenced jar file (in binary form). One is attached for convenience. Many exceptions occur as a result. Below is one of them. Exception occurred during problem detection: ----------------------------------- SOURCE BEGIN ------------------------------------- public class Test { @TestAnnotation private String foo; } ----------------------------------- SOURCE END ------------------------------------- java.lang.ClassCastException: org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.convertMemberValue(BinaryTypeBinding.java:54) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethod(BinaryTypeBinding.java:511) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.createMethods(BinaryTypeBinding.java:560) at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.cachePartsFrom(BinaryTypeBinding.java:329) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.java:731) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.createBinaryTypeFrom(LookupEnvironment.java:710) at org.eclipse.jdt.internal.compiler.Compiler.accept(Compiler.java:276) at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:130) at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:178) at org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2416) at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2144) at org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:134) at org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:125) at org.eclipse.jdt.internal.compiler.ast.Annotation.resolveType(Annotation.java:231) at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveAnnotations(ASTNode.java:590) at org.eclipse.jdt.internal.compiler.lookup.FieldBinding.getAnnotationTagBits(FieldBinding.java:252) at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.resolveTypeFor(SourceTypeBinding.java:1256) at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.fields(SourceTypeBinding.java:608) at org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.faultInTypesForFieldsAndMethods(SourceTypeBinding.java:586) at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInTypes(CompilationUnitScope.java:431) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:724) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:187) at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:183) at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:252) at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:510) at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:1001) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:170) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:780) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1151) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:124) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.access$0(JavaReconcilingStrategy.java:108) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:89) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:149) at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86) at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:102) at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:75) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
I'll investigate.
Reproduced. The problem only exists if the class default value is from a base type. void.class, int.class, ...
Created attachment 84209 [details] Proposed fix + regression tests
Released for 3.4M4. Regression tests added in org.eclipse.jdt.core.tests.compiler.regression.AnnotationTest#test247 org.eclipse.jdt.core.tests.compiler.regression.AnnotationTest#test248
Verifier, in order to reproduce the storage of annotations must be enabled. The reconciling is one way to do that.
Philippe, we might want to backport to 3.3.2.
+1 for 3.3.2
Since in 3.3.x doesn't do a cast to ReferenceBinding, there is no need to backport.
Verified for 3.4M4 using build I20071210-1800.
*** Bug 213527 has been marked as a duplicate of this bug. ***