Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 339864 - [1.7] Add recovery in ASTConverter for all new constructs in JLS3 mode
Summary: [1.7] Add recovery in ASTConverter for all new constructs in JLS3 mode
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.7   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: 3.7.1   Edit
Assignee: Olivier Thomann CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-03-14 06:59 EDT by Markus Keller CLA
Modified: 2011-08-05 02:54 EDT (History)
4 users (show)

See Also:


Attachments
Proposed fix + regression tests (15.73 KB, patch)
2011-03-14 14:59 EDT, Olivier Thomann CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Markus Keller CLA 2011-03-14 06:59:39 EDT
BETA_JAVA7 of jdt.core and jdt.ui

package p;

import java.io.*;

public class Test17 {
	public static void main(String[] args) {
		File file = new File(args[0]);
		try {
			FileInputStream fis = new FileInputStream(file);
			fis.read();
		} catch (FileNotFoundException | IOException e) {
			e.printStackTrace();
		}
	}
}

Try to compile this class with the project set to use J2SE-1.6 or J2SE-1.7. In both cases, no exception must be thrown, since we never asked for a JLS4 AST. Of course, the example doesn't compile, since it uses a 1.7 language feature.


java.lang.UnsupportedOperationException: Operation only supported in JLS4 AST
	at org.eclipse.jdt.core.dom.ASTNode.supportedOnlyIn4(ASTNode.java:1825)
	at org.eclipse.jdt.core.dom.DisjunctiveType.<init>(DisjunctiveType.java:94)
	at org.eclipse.jdt.core.dom.ASTConverter.convertType(ASTConverter.java:3403)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:788)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:2648)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:2487)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:536)
	at org.eclipse.jdt.core.dom.ASTConverter.buildBodyDeclarations(ASTConverter.java:187)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:2766)
	at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:1279)
	at org.eclipse.jdt.core.dom.AST.convertCompilationUnit(AST.java:237)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:206)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:89)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:728)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:788)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1244)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:126)
	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:42)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:87)
	at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.initialReconcile(JavaReconcilingStrategy.java:178)
	at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.initialReconcile(CompositeReconcilingStrategy.java:114)
	at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.initialReconcile(JavaCompositeReconcilingStrategy.java:136)
	at org.eclipse.jface.text.reconciler.MonoReconciler.initialProcess(MonoReconciler.java:105)
	at org.eclipse.jdt.internal.ui.text.JavaReconciler.initialProcess(JavaReconciler.java:406)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:173)
Comment 1 Olivier Thomann CLA 2011-03-14 09:23:20 EDT
What behavior do you expect in the converter ?
Comment 2 Olivier Thomann CLA 2011-03-14 10:41:50 EDT
Changing title to reflect more what the problem is in this case. We need to add malformed nodes when we get nodes that correspond to Java 7 syntax in JLS3 mode.
It should not fail with a UnsupportedOperationException exception, but the AST should contain MALFORMED node.
Comment 3 Olivier Thomann CLA 2011-03-14 14:59:20 EDT
Created attachment 191158 [details]
Proposed fix + regression tests
Comment 4 Olivier Thomann CLA 2011-03-14 15:04:59 EDT
Released in BETA_JAVA7 branch.
Comment 5 Jay Arthanareeswaran CLA 2011-06-28 05:14:55 EDT
Verified.