Bug 529334 - [9][testsources][launching] Add --add-reads m=ALL-UNNAMED
if launching with test code and non-empty build classpath

Change-Id: I425a4cbc240925e870ae8905eb61c0e8736d83ee
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
index f2c5655..583cc55 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
@@ -51,6 +51,7 @@
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IModuleDescription;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.provisional.JavaModelAccess;
 import org.eclipse.jdt.debug.core.IJavaDebugTarget;
 import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint;
 import org.eclipse.jdt.debug.core.JDIDebugModel;
@@ -1182,6 +1183,23 @@
 			sb.append(entry.getValue());
 		}
 
+		boolean excludeTestCode = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_EXCLUDE_TEST_CODE, false);
+		if (!excludeTestCode) {
+			// TODO: revisit to examine other possible solutions
+			IJavaProject project = getJavaProject(configuration);
+			if (project != null) {
+				for (String moduleName : JavaModelAccess.determineModulesOfProjectsWithNonEmptyClasspath(project)) {
+					if (sb.length() > 0) {
+						sb.append(' ');
+					}
+					sb.append("--add-reads"); //$NON-NLS-1$
+					sb.append(' ');
+					sb.append(moduleName);
+					sb.append('=');
+					sb.append("ALL-UNNAMED"); //$NON-NLS-1$
+				}
+			}
+		}
 		return sb.toString();
 	}
 }