diff options
author | Stephan Herrmann | 2019-09-24 21:23:26 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-09-24 21:23:26 +0000 |
commit | 3bd93e26c83a93ffcdf105d546429ede70b13f06 (patch) | |
tree | 445608818b50cfef98dc5be5dcd01b105bda57ee | |
parent | 79083c3cdeb2a4d0d81bf944be0d26b02be61ef5 (diff) | |
download | eclipse.jdt.core-3bd93e26c83a93ffcdf105d546429ede70b13f06.tar.gz eclipse.jdt.core-3bd93e26c83a93ffcdf105d546429ede70b13f06.tar.xz eclipse.jdt.core-3bd93e26c83a93ffcdf105d546429ede70b13f06.zip |
Bug 547197 - [9][model] API to get the kind of a IModuleDescription
Change-Id: I0d28b3970a2593301b283aa46ae5af27fa5e66da
4 files changed, 47 insertions, 3 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java index f7b6dbfc33..29ce20f5a8 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java @@ -1337,6 +1337,7 @@ public class Java9ElementTests extends AbstractJavaModelTests { IPackageFragmentRoot fragmentRoot = project2.getPackageFragmentRoot(project1.getResource()); IModuleDescription mod2 = JavaCore.getAutomaticModuleDescription(fragmentRoot); assertNotNull("auto module not found via package fragment root", mod2); + assertTrue("should be an auto module", mod2.isAutoModule()); assertEquals("names of module descriptions should be equal", mod1.getElementName(), mod2.getElementName()); @@ -1360,8 +1361,35 @@ public class Java9ElementTests extends AbstractJavaModelTests { assertEquals(fragmentRoot, mod2.getParent()); } finally { - deleteProject("Java9Elements"); - deleteProject("Java9Elements2"); + deleteProject("my_mod"); + deleteProject("your.mod"); + } + } + public void testSystemModule() throws Exception { + try { + IJavaProject project1 = createJava9Project("my_mod"); + IModuleDescription mod = project1.findModule("java.base", this.wcOwner); + assertTrue("should be a system module", mod.isSystemModule()); + mod = project1.findModule("java.desktop", this.wcOwner); + assertTrue("should be a system module", mod.isSystemModule()); + + createFile("/my_mod/src/module-info.java", + "module my_mod{\n" + + "}"); + mod = project1.getModuleDescription(); + assertFalse("should not be a system module", mod.isSystemModule()); + + addModularLibrary(project1, "mod.two.jar", "mod.two-sources.zip", + new String[] { + "module-info.java", + "module mod.two {}\n" + }, JavaCore.VERSION_9); + + mod = project1.findModule("mod.two", this.wcOwner); + assertFalse("should not be a system module", mod.isSystemModule()); + + } finally { + deleteProject("my_mod"); } } public void test526761a() throws Exception { diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IModuleDescription.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IModuleDescription.java index 5455e734e5..bf5eed5c96 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IModuleDescription.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IModuleDescription.java @@ -83,4 +83,12 @@ public interface IModuleDescription extends IMember, IAnnotatable { default boolean isAutoModule() { return false; } + + /** + * @return true if this module is a system module, else false + * @since 3.20 + */ + default boolean isSystemModule() { + return false; + } } diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/provisional/JavaModelAccess.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/provisional/JavaModelAccess.java index 73e7644700..0bdc298098 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/provisional/JavaModelAccess.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/provisional/JavaModelAccess.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 GK Software SE, and others. + * Copyright (c) 2017, 2019 GK Software SE, and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -71,7 +71,9 @@ public class JavaModelAccess { * @param module the module being queried about * @return {@code true} iff the module is defined in the system library (also known as JRE). * @since 3.18 + * @deprecated please use {@link IModuleDescription#isSystemModule()} */ + @Deprecated public static boolean isSystemModule(IModuleDescription module) { IPackageFragmentRoot pfr = (IPackageFragmentRoot) module.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT); return pfr instanceof JrtPackageFragmentRoot; diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryModule.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryModule.java index 2d6bffdb51..e2bb12ed88 100644 --- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryModule.java +++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/BinaryModule.java @@ -19,6 +19,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.jdt.core.IAnnotation; import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.ISourceRange; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; @@ -65,6 +66,11 @@ public class BinaryModule extends BinaryMember implements AbstractModule { return true; } @Override + public boolean isSystemModule() { + IPackageFragmentRoot pfr = (IPackageFragmentRoot) getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT); + return pfr instanceof JrtPackageFragmentRoot; + } + @Override public int getFlags() throws JavaModelException { if (getModuleInfo().isOpen()) return ClassFileConstants.ACC_OPEN; |