Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2019-02-12 23:09:45 +0000
committerStephan Herrmann2019-02-12 23:09:45 +0000
commit7411c5d64b4f841347cb94c0ae326a6cb0df5581 (patch)
tree8a75db4098fd7a05e1984eec61376d92623ff405
parentc0a450d6d478972de7ffb4ec43ebd4a908dfbbbc (diff)
downloadeclipse.jdt.core-7411c5d64b4f841347cb94c0ae326a6cb0df5581.tar.gz
eclipse.jdt.core-7411c5d64b4f841347cb94c0ae326a6cb0df5581.tar.xz
eclipse.jdt.core-7411c5d64b4f841347cb94c0ae326a6cb0df5581.zip
Bug 544017 - [9] bogus error in editor: "The type com.example.sub.b.B isI20190213-1800
not accessable." Change-Id: I8f395c4ccb270c7c86d2016761221095f1d94dec Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java9
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java7
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java79
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java11
4 files changed, 96 insertions, 10 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
index 755fbfc24a..df6e565b35 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java
@@ -620,6 +620,15 @@ public abstract class AbstractJavaModelTests extends SuiteOfTestCases {
exported);
addClasspathEntry(project, entry);
}
+
+ protected void addModularProjectEntry(IJavaProject project, IJavaProject depProject) throws JavaModelException {
+ addClasspathEntry(project, newModularProjectEntry(depProject));
+ }
+
+ protected IClasspathEntry newModularProjectEntry(IJavaProject depProject) {
+ return JavaCore.newProjectEntry(depProject.getPath(), null, false, moduleAttribute(), false);
+ }
+
protected void assertSortedElementsEqual(String message, String expected, IJavaElement[] elements) {
sortElements(elements);
assertElementsEqual(message, expected, elements);
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 8242823b45..725f615ff1 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
@@ -41,7 +41,6 @@ import org.eclipse.jdt.core.IModuleDescription;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IProblemRequestor;
import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.WorkingCopyOwner;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -103,12 +102,6 @@ public class ModuleBuilderTests extends ModifyingResourceTests {
deleteProject("P1");
}
- void addModularProjectEntry(IJavaProject project, IJavaProject depProject) throws JavaModelException {
- addClasspathEntry(project, newModularProjectEntry(depProject));
- }
- IClasspathEntry newModularProjectEntry(IJavaProject depProject) {
- return JavaCore.newProjectEntry(depProject.getPath(), null, false, moduleAttribute(), false);
- }
// Test that the java.base found as a module package fragment root in the project
public void test001() throws CoreException {
try {
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
index 16166b5a8d..7c7f99d85c 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ReconcilerTests9.java
@@ -570,4 +570,83 @@ public void testBug543092b() throws Exception {
deleteProject(p);
}
}
+public void testBug544017() throws CoreException {
+ if (!isJRE9) {
+ System.err.println("Test "+getName()+" requires a JRE 9");
+ return;
+ }
+ IJavaProject testa = createJava9Project("testa");
+ IJavaProject testb = createJava9Project("testb");
+ IJavaProject testmain = createJava9Project("testmain");
+ try {
+ createFolder("testb/src/com/example/sub/b");
+ createFile("testb/src/com/example/sub/b/B.java",
+ "package com.example.sub.b;\n" +
+ "public class B {\n" +
+ " public static void main(String[] args) {\n" +
+ " System.out.println(\"B\");\n" +
+ " }\n" +
+ "}\n");
+ createFile("testb/src/module-info.java",
+ "open module com.example.sub.b {\n" +
+ " exports com.example.sub.b;\n" +
+ "}\n");
+
+ addModularProjectEntry(testa, testb);
+ createFolder("testa/src/com/example/sub/a");
+ createFile("testa/src/com/example/sub/a/A.java",
+ "package com.example.sub.a;\n" +
+ "public class A {\n" +
+ " public static void main(String[] args) {\n" +
+ " System.out.println(\"A\");\n" +
+ " }\n" +
+ "}\n");
+ createFile("testa/src/module-info.java",
+ "open module com.example.sub.a {\n" +
+ " exports com.example.sub.a;\n" +
+ " requires com.example.sub.b;\n" +
+ "}\n");
+
+ addModularProjectEntry(testmain, testa);
+ addModularProjectEntry(testmain, testb);
+ createFolder("testmain/src/com/example");
+ createFile("testmain/src/module-info.java",
+ "open module com.example {\n" +
+ " requires com.example.sub.a;\n" +
+ " requires com.example.sub.b;\n" +
+ "}\n");
+ String pathExample = "testmain/src/com/example/Example.java";
+ String sourceExample =
+ "package com.example;\n" +
+ "import com.example.sub.a.A;\n" +
+ "import com.example.sub.b.B;\n" +
+ "\n" +
+ "public class Example {\n" +
+ " public static void main(String[] args) {\n" +
+ " A.main(null);\n" +
+ " B.main(null);\n" +
+ " }\n" +
+ "}\n";
+ createFile(pathExample, sourceExample);
+
+ getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);
+ IMarker[] markers = testmain.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE);
+ assertMarkers("markers in testmain",
+ "",
+ markers);
+
+ ICompilationUnit wc = getCompilationUnit(pathExample).getWorkingCopy(this.wcOwner, null);
+ wc.getBuffer().append(" ");
+ this.problemRequestor.initialize((sourceExample+" ").toCharArray());
+ wc.reconcile(AST_INTERNAL_JLS11, true, this.wcOwner, null);
+ assertProblems("Expecting no problems",
+ "----------\n" +
+ "----------\n",
+ this.problemRequestor);
+ } finally {
+ deleteProject(testa);
+ deleteProject(testb);
+ deleteProject(testmain);
+ }
+}
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java
index 44235199f0..32df973735 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ModuleBinding.java
@@ -513,7 +513,7 @@ public class ModuleBinding extends Binding implements IUpdatableModule {
// remember:
if (binding != null) {
this.environment.knownPackages.put(name, binding);
- binding = addPackage(binding, false);
+ binding = addPackage(binding, false); // no further lookup needed, binding is already complete (split?)
} else {
this.environment.knownPackages.put(name, LookupEnvironment.TheNotFoundPackage);
}
@@ -595,6 +595,8 @@ public class ModuleBinding extends Binding implements IUpdatableModule {
// enrich with split-siblings from visible modules:
if (considerRequiredModules) {
+ if (parent != null && binding != null)
+ parent.addPackage(binding, this); // preliminarily add to avoid creating duplicates, will be updated below
binding = combineWithPackagesFromOtherRelevantModules(binding, subPkgCompoundName, declaringModuleNames);
}
if (binding == null || !binding.isValidBinding()) {
@@ -607,10 +609,13 @@ public class ModuleBinding extends Binding implements IUpdatableModule {
return null;
}
// remember
- if (parentName.length == 0)
+ if (parentName.length == 0) {
binding.environment.knownPackages.put(name, binding);
- else if (parent != null)
+ } else if (parent != null) {
binding = parent.addPackage(binding, this);
+ }
+ if (packageMayBeIncomplete)
+ return binding;
return addPackage(binding, false);
}

Back to the top