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);