Community
Participate
Working Groups
Using latest, compile this code: public final enum X { BLEU(10) { String foo() { // inner return super.foo() + this.val; } }, BLANC(20), ROUGE(30); int val; X(int val) { this.val = val; } String foo() { // outer return this.name(); } public static void main(String[] args) { for(X x: values()) { System.out.print(x.foo()); } } } You get: ---------- 1. ERROR in c:\tests_sources\X.java (at line 0) public final enum X { ^ Internal compiler error java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.anonymousClassCannotExtendFinalClass(ProblemReporter.java:135) at org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression.resolveType(QualifiedAllocationExpression.java:247) at org.eclipse.jdt.internal.compiler.ast.FieldDeclaration.resolve(FieldDeclaration.java:199) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:966) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1034) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:280) at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:510) at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:335) at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Main.java:1677) at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:375) at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:268) at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:260) at org.eclipse.jdt.core.tools.compiler.Compile.main(Compile.java:19) This is because we try to return this error using the anonymous type of the enum constant and its type is null. We simply need to change the error message in the qualified allocation expression. javac doesn't accept final enum class. This is legal as long as no enum constant has a class body.
Should reject final modifier for enum.
Added regression test: EnumTest#test024. Fixed
Reopen In build I200411040100 an NPE still occur Java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.problem.ProblemReporter.anonymousClassCannotExtendFinalClass(ProblemReporter.java:135) at org.eclipse.jdt.internal.compiler.ast.QualifiedAllocationExpression.resolveType(QualifiedAllocationExpression.java:248) at org.eclipse.jdt.internal.compiler.ast.FieldDeclaration.resolve(FieldDeclaration.java:199) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:966) at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1034) at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:280) at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:566) at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:175) at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:143) at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:203) at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:553) at org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:978) at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:60) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:739) at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1104) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:91) at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:133) at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86) at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:96) at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:75) at org.eclipse.jdt.internal.ui.text.JavaReconciler.process(JavaReconciler.java:318) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:204)
New fix is released. The regression test has been updated.
Verified in 200411041600