Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2019-10-06 10:57:57 +0000
committerStephan Herrmann2019-10-06 10:57:57 +0000
commit33f5b5f615926308947076f2bb0c71a1e038d04f (patch)
treea242ccb720204958ee7ca8cd92921bfae6b5d56c
parent9f7623dbf89718c901b626f8024cbc33b5147b6e (diff)
downloadeclipse.jdt.core-33f5b5f615926308947076f2bb0c71a1e038d04f.tar.gz
eclipse.jdt.core-33f5b5f615926308947076f2bb0c71a1e038d04f.tar.xz
eclipse.jdt.core-33f5b5f615926308947076f2bb0c71a1e038d04f.zip
Bug 550410 - [model] undue caching of module while moving / renaming
module-info.java Change-Id: If3426d19dfb75eecef4d9d8739db935445c51479
-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/ResolveTests9.java41
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java14
3 files changed, 64 insertions, 0 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 cf1f469db4..0b6b5ae5d7 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
@@ -875,7 +875,16 @@ public abstract class AbstractJavaModelTests extends SuiteOfTestCases {
}
assertEquals("Unexpected type hierarchy", expected, actual);
}
+ /**
+ * New tests should not use this, to avoid risk of confusion with {@link #assertMarkers(String, String, IMarker[])},
+ * which considers all given markers, not just build path problems.
+ * @deprecated use {@link #assertBuildPathMarkers(String, String, IJavaProject)}.
+ */
+ @Deprecated
protected void assertMarkers(String message, String expectedMarkers, IJavaProject project) throws CoreException {
+ assertBuildPathMarkers(message, expectedMarkers, project);
+ }
+ protected void assertBuildPathMarkers(String message, String expectedMarkers, IJavaProject project) throws CoreException {
waitForAutoBuild();
IMarker[] markers = project.getProject().findMarkers(IJavaModelMarker.BUILDPATH_PROBLEM_MARKER, false, IResource.DEPTH_ZERO);
sortMarkers(markers);
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests9.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests9.java
index 22526322e5..85b9523d27 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests9.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ResolveTests9.java
@@ -34,6 +34,7 @@ import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaModelMarker;
import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IModuleDescription;
import org.eclipse.jdt.core.IOrdinaryClassFile;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
@@ -558,4 +559,44 @@ public class ResolveTests9 extends AbstractJavaModelTests {
deleteProject(logg);
}
}
+ public void testModuleCaching() throws Exception {
+ if (!isJRE9 || isJRE11) {
+ System.err.println("Test "+getName()+" requires a JRE [9,11)");
+ return;
+ }
+ IJavaProject prj = createJava9Project("caching");
+ try {
+ IFile file = createFile("caching/src/module-info.java",
+ "module caching {\n" +
+ " requires java.xml.bind;\n" +
+ "}\n");
+ createFolder("caching/src/p");
+ createFile("caching/src/p/X.java",
+ "package p;\n" +
+ "@javax.xml.bind.annotation.XmlRootElement\n" +
+ "public class X {}\n");
+ prj.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
+ IMarker[] markers = prj.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE);
+ assertMarkers("unexpected markers",
+ "The module java.xml.bind has been deprecated since version 9 and marked for removal", markers);
+
+ IModuleDescription module = prj.getModuleDescription();
+ assertTrue("module exists", module.exists());
+ assertEquals("module name", "caching", module.getElementName());
+
+ // move module-info away ...
+ createFolder("caching/away");
+ file.move(new Path("/caching/away/module-info.java"), false, null);
+ IModuleDescription mod2 = prj.getModuleDescription();
+ assertNull("no longer a module", mod2);
+
+ // ... and observe javax.xml.bind unobservable:
+ prj.getProject().build(IncrementalProjectBuilder.FULL_BUILD, null);
+ markers = prj.getProject().findMarkers(null, true, IResource.DEPTH_INFINITE);
+ assertMarkers("unexpected markers",
+ "javax.xml.bind cannot be resolved to a type", markers);
+ } finally {
+ deleteProject(prj);
+ }
+ }
}
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
index 784cee9032..8ae86f740a 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/DeltaProcessor.java
@@ -1291,6 +1291,13 @@ public class DeltaProcessor {
this.projectCachesToReset.add(project);
break;
+
+ case IJavaElement.COMPILATION_UNIT :
+ if (element.getElementName().equals(new String(TypeConstants.MODULE_INFO_FILE_NAME))) {
+ this.projectCachesToReset.add(element.getJavaProject()); // change unnamed -> named
+ }
+
+ break;
}
}
}
@@ -1387,6 +1394,13 @@ public class DeltaProcessor {
this.projectCachesToReset.add(project);
break;
+
+ case IJavaElement.COMPILATION_UNIT :
+ if (element.getElementName().equals(new String(TypeConstants.MODULE_INFO_FILE_NAME))) {
+ this.projectCachesToReset.add(element.getJavaProject()); // change named -> unnamed
+ }
+
+ break;
}
}
/*

Back to the top