Bug 547479 - Java 9+ (JPMS) Intermittent compilation error "The type...
is not accessible".
LookupEnvironment::reset() shall reset "this.stepCompleted" to 0.
Change-Id: I6748f8cf08f460f5e47c39dadd0f52099e03edf6
Signed-off-by: Christoph Langer <christoph.langer@sap.com>
Also-by: Stephan Herrmann <stephan.herrmann@berlin.de>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
index 8c1afe1..5b8459f 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
@@ -8648,6 +8648,62 @@
deleteProject("lib");
}
}
+ public void testBug547479() throws CoreException {
+ int max = org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE;
+
+ IJavaProject prjA = createJava9Project("A");
+ IJavaProject prjB = createJava9Project("B");
+ try {
+ createFile("A/src/module-info.java",
+ "module A {\n" +
+ "}\n");
+
+ addModularProjectEntry(prjB, prjA);
+ // prepare files to be compiled in two batches à 2 files:
+ org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE = 2;
+ // ---1---
+ createFolder("B/src/b");
+ createFile("B/src/b/Class1.java",
+ "package b;\n" +
+ "import java.sql.Connection;\n" +
+ "public class Class1 {\n" +
+ " Connection connection;\n" +
+ "}\n");
+ createFile("B/src/b/Class2.java",
+ "package b;\n" +
+ "import java.sql.Connection;\n" +
+ "public class Class2 {\n" +
+ " Connection connection;\n" +
+ "}\n");
+ // ---2---
+ createFile("B/src/module-info.java",
+ "module B {\n" +
+ " requires java.sql;\n" +
+ " requires A;\n" +
+ "}\n");
+ String bPath = "B/src/b/Class3.java";
+ String bSource =
+ "package b;\n" + // <= this triggered createPackage in an inconsistent state
+ "import java.sql.Connection;\n" +
+ "public class Class3 {\n" +
+ " Connection connection;\n" +
+ "}\n";
+ createFile(bPath, bSource);
+ getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);
+ assertNoErrors();
+
+ this.problemRequestor.initialize(bSource.toCharArray());
+ getCompilationUnit(bPath).getWorkingCopy(this.wcOwner, null);
+ assertProblems("unexpected problems",
+ "----------\n" +
+ "----------\n",
+ this.problemRequestor);
+ } finally {
+ org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE = max;
+ deleteProject(prjA);
+ deleteProject(prjB);
+ }
+ }
protected void assertNoErrors() throws CoreException {
for (IProject p : getWorkspace().getRoot().getProjects()) {
int maxSeverity = p.findMaxProblemSeverity(null, true, IResource.DEPTH_INFINITE);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
index bf84ff6..3acb855 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
@@ -2122,6 +2122,7 @@
this.root.reset();
return;
}
+ this.stepCompleted = 0;
this.knownModules = new HashtableOfModule();
this.UnNamedModule = new ModuleBinding.UnNamedModule(this);
this.module = this.UnNamedModule;