Bug Bug 486011 - Partial revert
Reverting the change to the stop-gap API in JavaCore to enable builds to
succeed.
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 4b3281c..7f0429d 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
@@ -31,7 +31,6 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IModuleDescription;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
@@ -46,7 +45,7 @@
}
static {
-// TESTS_NAMES = new String[] { "test_ModuleSourcePathContainer" };
+// TESTS_NAMES = new String[] { "testConvertToModule" };
}
private static boolean isJRE9 = false;
public static Test suite() {
@@ -63,7 +62,7 @@
public void setUpSuite() throws Exception {
super.setUpSuite();
- System.setProperty("modules.to.load", "java.baserequires java.desktop;java.rmi;java.sql;");
+ System.setProperty("modules.to.load", "java.base,java.desktop;java.rmi;java.sql;");
this.currentProject = createJava9Project("P1");
this.createFile("P1/src/module-info.java", "");
this.createFolder("P1/src/com/greetings");
@@ -690,19 +689,27 @@
}
}
assertNotNull("should not be null", theRoot);
- IModuleDescription mod = JavaCore.createModuleFromPackageRoot(null, project);
- assertEquals("incorrect value", "ConvertToModule", mod.getElementName());
- IModuleDescription.IPackageExport[] exports = mod.getExportedPackages();
- assertEquals("incorrect value", 2, exports.length);
- assertEquals("incorrect value", "org.eclipse.jdt.test", exports[0].getPackageName());
- assertEquals("incorrect value", "org.eclipse.test", exports[1].getPackageName());
-
- IModuleDescription.IModuleReference[] mods = mod.getRequiredModules();
- assertEquals("incorrect value", 4, mods.length);
- assertEquals("incorrect value", "java.base", mods[0].getModuleName());
- assertEquals("incorrect value", "java.desktop", mods[1].getModuleName());
- assertEquals("incorrect value", "java.rmi", mods[2].getModuleName());
- assertEquals("incorrect value", "java.sql", mods[3].getModuleName());
+ String mod = JavaCore.createModuleFromPackageRoot(null, theRoot);
+ String lineDelimiter = System.getProperty("line.separator", "\n");
+ assertEquals("module-info is incorrect",
+ "module ConvertToModule {" + lineDelimiter + "" +
+ " exports org.eclipse.jdt.test;" + lineDelimiter +
+ " exports org.eclipse.test;" + lineDelimiter + lineDelimiter +
+ " requires java.base;" + lineDelimiter +
+ " requires java.desktop;" + lineDelimiter +
+ " requires java.rmi;" + lineDelimiter +
+ " requires java.sql;" + lineDelimiter + lineDelimiter +
+ "}" ,mod);
+ mod = JavaCore.createModuleFromPackageRoot("my.module", theRoot);
+ assertEquals("module-info is incorrect",
+ "module my.module {" + lineDelimiter +
+ " exports org.eclipse.jdt.test;" + lineDelimiter +
+ " exports org.eclipse.test;" + lineDelimiter + lineDelimiter +
+ " requires java.base;" + lineDelimiter +
+ " requires java.desktop;" + lineDelimiter +
+ " requires java.rmi;" + lineDelimiter +
+ " requires java.sql;" + lineDelimiter + lineDelimiter +
+ "}" ,mod);
} finally {
this.deleteProject("ConvertToModule");
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
index 788ef50..d06ebc6 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
@@ -5825,24 +5825,25 @@
return Long.compare(CompilerOptions.versionToJdkLevel(first), CompilerOptions.versionToJdkLevel(second));
}
/**
- * Creates a {@link IModuleDescription} for the given Java project and with the given
- * name. The module name is optional and a null argument can be passed to indicate that the
- * project's name to be used as the module name.
+ * Creates a corresponding module-info as a String for the given source package fragment root and with
+ * the given name. The module name is optional and a null argument can be passed to indicate that the
+ * package fragment root's element name to be used as the module name.
*
- * This is a utility method and computes the module description by looking at the source files inside
- * the project and which modules within the project's build path are needed in order to
- * successfully compile the source files.
+ * This is a utility method and computes a module configuration by looking at the source files inside
+ * the package fragment root and what modules within the project's build path are needed in order to
+ * successfully compile the source files. For non-source package fragment roots
+ * (i.e., {@link IPackageFragmentRoot#isArchive()} returns true), this method returns null.
*
- * Note this is a long-running operation and it is recommended that clients run this in a background thread.
+ * Note this is a long-running operation and it is preferable that clients run this in a background thread.
*
* @param moduleName name to be used for the new module. A null indicates that the package fragment root element's name to be used
- * @param project the Java project for which the module is sought
- * @return the module-info content as a {@link IModuleDescription}
+ * @param root the package fragment root for which the module is sought
+ * @return the module-info content as a String
* @throws CoreException
* @since 3.13 BETA_JAVA9
*/
- public static IModuleDescription createModuleFromPackageRoot(String moduleName, IJavaProject project) throws CoreException {
- return ModuleUtil.createModuleFromPackageRoot(moduleName, project);
+ public static String createModuleFromPackageRoot(String moduleName, IPackageFragmentRoot root) throws CoreException {
+ return ModuleUtil.createModuleFromPackageRoot(moduleName, root);
}
/* (non-Javadoc)
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java
index ded3e91..2547671 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/ModuleUtil.java
@@ -55,6 +55,22 @@
public class ModuleUtil {
+ public static String createModuleFromPackageRoot(String moduleName, IPackageFragmentRoot root) throws CoreException {
+ IJavaProject project = root.getJavaProject();
+ String lineDelimiter = null;
+ if (project != null) {
+ IScopeContext[] scopeContext;
+ // project preference
+ scopeContext = new IScopeContext[] { new ProjectScope(project.getProject()) };
+ lineDelimiter = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext);
+ }
+ if (lineDelimiter == null) {
+ lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ LocalModuleImpl module = (LocalModuleImpl) createModuleFromPackageFragmentRoot(moduleName, project);
+ return module.toString(lineDelimiter);
+ }
+
public static IModuleDescription createModuleFromPackageRoot(String moduleName, IJavaProject root) throws CoreException {
return createModuleFromPackageFragmentRoot(moduleName, root.getJavaProject());
}
@@ -123,16 +139,7 @@
return newCompiler;
}
private static IModuleDescription createModuleFromPackageFragmentRoot(String moduleName, IJavaProject project) throws CoreException {
- String lineDelimiter = null;
- if (project != null) {
- IScopeContext[] scopeContext;
- // project preference
- scopeContext = new IScopeContext[] { new ProjectScope(project.getProject()) };
- lineDelimiter = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, null, scopeContext);
- }
- if (lineDelimiter == null) {
- lineDelimiter = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$
- }
+
ModuleAccumulatorEnvironment environment = new ModuleAccumulatorEnvironment(project);
Compiler compiler = newCompiler(environment, project);
LocalModuleImpl module = new LocalModuleImpl(moduleName == null ? project.getElementName() : moduleName);