Bug 77244 - [1.5][enum] final enum class crashes the compiler
Summary: [1.5][enum] final enum class crashes the compiler
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 M3   Edit
Assignee: Olivier Thomann CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-10-28 17:16 EDT by Olivier Thomann CLA
Modified: 2004-11-04 18:36 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Olivier Thomann CLA 2004-10-28 17:16:01 EDT
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.
Comment 1 Philipe Mulet CLA 2004-10-28 17:37:33 EDT
Should reject final modifier for enum.
Comment 2 Philipe Mulet CLA 2004-10-28 18:00:37 EDT
Added regression test: EnumTest#test024.
Fixed
Comment 3 David Audel CLA 2004-11-04 10:46:45 EST
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)
Comment 4 Olivier Thomann CLA 2004-11-04 12:15:54 EST
New fix is released. The regression test has been updated.
Comment 5 Olivier Thomann CLA 2004-11-04 18:36:24 EST
Verified in 200411041600