Bug 553611 - Launch Configuration uses wrong module for main classes
outside the project module

Change-Id: I89734fd735cceeb0046b270591a3974579e409fe
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SharedJavaMainTab.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SharedJavaMainTab.java
index 2a8ab68..9818cff 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SharedJavaMainTab.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/launcher/SharedJavaMainTab.java
@@ -155,7 +155,10 @@
 		String moduleName = EMPTY_STRING;
 		try {
 			mainTypeName = config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, EMPTY_STRING);
-			moduleName = config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING);
+			moduleName = config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MODULE_NAME, EMPTY_STRING);
+			if (moduleName.equals("")) { //$NON-NLS-1$
+				moduleName = config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING);
+			}
 		}
 		catch (CoreException ce) {JDIDebugUIPlugin.log(ce);}
 		fMainText.setText(mainTypeName);
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java
index d45fac1..da19c89 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaLaunchDelegate.java
@@ -103,23 +103,23 @@
 		// Module name not required for Scrapbook page
 		if (supportsModule() && !mainTypeName.equals("org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain")) { //$NON-NLS-1$
 			// Module name need not be the same as project name
-			String defaultModuleName = null;
-			String moduleName = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MODULE_NAME, defaultModuleName);
-			if (moduleName != null) {
-				runConfig.setModuleDescription(moduleName);
-			} else {
-				try {
-					IJavaProject proj = JavaRuntime.getJavaProject(configuration);
-					if (proj != null) {
-						IModuleDescription module = proj == null ? null : proj.getModuleDescription();
-						String modName = module == null ? null : module.getElementName();
-						if (modName != null) {
+			try {
+				IJavaProject proj = JavaRuntime.getJavaProject(configuration);
+				if (proj != null) {
+					IModuleDescription module = proj == null ? null : proj.getModuleDescription();
+					String modName = module == null ? null : module.getElementName();
+					if (modName != null && modName.length() > 0) {
+						String defaultModuleName = null;
+						String moduleName = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MODULE_NAME, defaultModuleName);
+						if (moduleName != null) {
+							runConfig.setModuleDescription(moduleName);
+						} else {
 							runConfig.setModuleDescription(modName);
 						}
 					}
-				} catch (CoreException e) {
-					// Not a java Project so no need to set module description
 				}
+			} catch (CoreException e) {
+				// Not a java Project so no need to set module description
 			}
 		}