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;