diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java index df440d9bd3c..2d423777da9 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterBugsTest.java @@ -13,6 +13,8 @@ *******************************************************************************/ package org.eclipse.jdt.core.tests.dom; +import static org.junit.Assert.assertThrows; + import java.io.IOException; import java.util.Arrays; import java.util.HashSet; @@ -21,6 +23,7 @@ import java.util.Map; import java.util.Set; import junit.framework.Test; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.ICompilationUnit; @@ -1445,4 +1448,39 @@ public void acceptAST(String sourceFilePath, CompilationUnit cu) { parser.createASTs(paths, null, new String[] {}, new MyFileASTRequestor() {}, null); assertEquals(expectedProblems, actualProblems); } +public void testGH3298() throws Exception { + Hashtable<String, String> options = JavaCore.getDefaultOptions(); + options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_9); + options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_9); + options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_9); + + IProject project = createProject("P"); + IJavaProject javaProject = JavaCore.create(project); + try { + ASTParser parser = ASTParser.newParser(AST.getJLSLatest()); + parser.setProject(javaProject); + parser.setCompilerOptions(options); + parser.setSource("public class Test{}".toCharArray()); + parser.setResolveBindings(true); + parser.setKind(ASTParser.K_COMPILATION_UNIT); + assertNotNull(parser.createAST(null)); + + addJavaNature("P"); + parser.setProject(javaProject); + parser.setCompilerOptions(options); + parser.setSource("public class Test{}".toCharArray()); + parser.setResolveBindings(true); + parser.setKind(ASTParser.K_COMPILATION_UNIT); + assertThrows(IllegalStateException.class, () -> parser.createAST(null)); + + parser.setProject(javaProject); + parser.setCompilerOptions(options); + parser.setSource("public class Test{}".toCharArray()); + parser.setResolveBindings(false); + parser.setKind(ASTParser.K_COMPILATION_UNIT); + assertNotNull(parser.createAST(null)); + } finally { + deleteProject("P"); + } +} } diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java index 6223e6f1aaa..3252700db18 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java @@ -44,6 +44,7 @@ import org.eclipse.jdt.internal.core.ClassFileWorkingCopy; import org.eclipse.jdt.internal.core.DefaultWorkingCopyOwner; import org.eclipse.jdt.internal.core.JavaModelManager; +import org.eclipse.jdt.internal.core.JavaProject; import org.eclipse.jdt.internal.core.PackageFragment; import org.eclipse.jdt.internal.core.dom.ICompilationUnitResolver; import org.eclipse.jdt.internal.core.dom.util.DOMASTUtil; @@ -306,7 +307,7 @@ private void checkForSystemLibrary(List<Classpath> allClasspaths) { } } } - if (!hasSystemLibrary) + if (!hasSystemLibrary && hasJavaNature()) throw new IllegalStateException("Missing system library", exception); //$NON-NLS-1$ } } @@ -1562,4 +1563,8 @@ private void rootNodeToCompilationUnit(AST ast, CompilationUnit compilationUnit, } } } + + private boolean hasJavaNature() { + return this.project != null && JavaProject.hasJavaNature(this.project.getProject()); + } }