diff options
author | Stephan Herrmann | 2019-10-06 10:57:57 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-10-06 10:57:57 +0000 |
commit | 33f5b5f615926308947076f2bb0c71a1e038d04f (patch) | |
tree | a242ccb720204958ee7ca8cd92921bfae6b5d56c | |
parent | 9f7623dbf89718c901b626f8024cbc33b5147b6e (diff) | |
download | eclipse.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
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; } } /* |