Bug 549732 - Fix NPE with parameter monitor=null in run(...)

Change-Id: I5a746c92e7526bbd6b6afd835de9d0682fede4b9
Signed-off-by: Cornelius Dirmeier <cornelius.dirmeier@faktorzehn.de>
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
index cbe5f3c..b191a18 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
@@ -30,7 +30,6 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
@@ -150,8 +149,10 @@
 
 	@Override
 	public String showCommandLine(VMRunnerConfiguration configuration, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		CommandDetails cmd = getCommandLine(configuration, launch, monitor);
-		if (monitor.isCanceled()) {
+		SubMonitor subMonitor = SubMonitor.convert(monitor);
+
+		CommandDetails cmd = getCommandLine(configuration, launch, subMonitor);
+		if (subMonitor.isCanceled()) {
 			return ""; //$NON-NLS-1$
 		}
 		String[] cmdLine = cmd.getCommandLine();
@@ -160,11 +161,13 @@
 	}
 
 	private CommandDetails getCommandLine(VMRunnerConfiguration config, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		if (monitor == null) {
-			monitor = new NullProgressMonitor();
-
-		}
 		IProgressMonitor subMonitor = SubMonitor.convert(monitor, 1);
+
+		// check for cancellation
+		if (subMonitor.isCanceled()) {
+			return null;
+		}
+
 		subMonitor.subTask(LaunchingMessages.StandardVMDebugger_Finding_free_socket____2);
 
 		int port= SocketUtil.findFreePort();
@@ -175,7 +178,7 @@
 		subMonitor.worked(1);
 
 		// check for cancellation
-		if (monitor.isCanceled()) {
+		if (subMonitor.isCanceled()) {
 			return null;
 		}
 
@@ -269,7 +272,7 @@
 		arguments.toArray(cmdLine);
 
 		// check for cancellation
-		if (monitor.isCanceled()) {
+		if (subMonitor.isCanceled()) {
 			return null;
 		}
 		File workingDir = getWorkingDir(config);
@@ -303,17 +306,15 @@
 	 */
 	@Override
 	public void run(VMRunnerConfiguration config, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		if (monitor == null) {
-			monitor = new NullProgressMonitor();
-		}
-		CommandDetails cmdDetails = getCommandLine(config, launch, monitor);
+		IProgressMonitor subMonitor = SubMonitor.convert(monitor, 1);
+		CommandDetails cmdDetails = getCommandLine(config, launch, subMonitor);
+
 		// check for cancellation
-		if (monitor.isCanceled() || cmdDetails == null) {
+		if (subMonitor.isCanceled() || cmdDetails == null) {
 			return;
 		}
 		String[] cmdLine = cmdDetails.getCommandLine();
 
-		IProgressMonitor subMonitor = SubMonitor.convert(monitor, 1);
 		subMonitor.beginTask(LaunchingMessages.StandardVMDebugger_Launching_VM____1, 4);
 		subMonitor.subTask(LaunchingMessages.StandardVMDebugger_Starting_virtual_machine____4);
 		ListeningConnector connector= getConnector();
@@ -327,7 +328,7 @@
 		try {
 			try {
 				// check for cancellation
-				if (monitor.isCanceled()) {
+				if (subMonitor.isCanceled()) {
 					return;
 				}
 
@@ -339,7 +340,7 @@
 				}
 
 				// check for cancellation
-				if (monitor.isCanceled()) {
+				if (subMonitor.isCanceled()) {
 					p.destroy();
 					return;
 				}
@@ -379,7 +380,7 @@
                         connectThread.setDaemon(true);
 						connectThread.start();
 						while (connectThread.isAlive()) {
-							if (monitor.isCanceled()) {
+							if (subMonitor.isCanceled()) {
                                 try {
                                     connector.stopListening(map);
                                 } catch (IOException ioe) {
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
index 3501323..38a24bd 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMRunner.java
@@ -27,7 +27,6 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.debug.core.DebugPlugin;
@@ -402,8 +401,10 @@
 
 	@Override
 	public String showCommandLine(VMRunnerConfiguration configuration, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		CommandDetails cmd = getCommandLine(configuration, launch, monitor);
-		if (monitor.isCanceled() || cmd == null) {
+		IProgressMonitor subMonitor = SubMonitor.convert(monitor, 1);
+
+		CommandDetails cmd = getCommandLine(configuration, launch, subMonitor);
+		if (subMonitor.isCanceled() || cmd == null) {
 			return ""; //$NON-NLS-1$
 		}
 		String[] cmdLine = cmd.getCommandLine();
@@ -412,10 +413,6 @@
 	}
 
 	private CommandDetails getCommandLine(VMRunnerConfiguration config, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		if (monitor == null) {
-			monitor = new NullProgressMonitor();
-		}
-
 		IProgressMonitor subMonitor = SubMonitor.convert(monitor, 1);
 		subMonitor.subTask(LaunchingMessages.StandardVMRunner_Constructing_command_line____2);
 		String program = constructProgramString(config);
@@ -490,18 +487,15 @@
 
 	@Override
 	public void run(VMRunnerConfiguration config, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		if (monitor == null) {
-			monitor = new NullProgressMonitor();
-		}
+		IProgressMonitor subMonitor = SubMonitor.convert(monitor, 1);
 
-		CommandDetails cmdDetails = getCommandLine(config, launch, monitor);
+		CommandDetails cmdDetails = getCommandLine(config, launch, subMonitor);
 		// check for cancellation
-		if (monitor.isCanceled() || cmdDetails == null) {
+		if (subMonitor.isCanceled() || cmdDetails == null) {
 			return;
 		}
 		String[] cmdLine = cmdDetails.getCommandLine();
 
-		IProgressMonitor subMonitor = SubMonitor.convert(monitor, 1);
 		subMonitor.beginTask(LaunchingMessages.StandardVMRunner_Launching_VM____1, 2);
 		subMonitor.subTask(LaunchingMessages.StandardVMRunner_Starting_virtual_machine____3);
 		Process p = null;
@@ -511,7 +505,7 @@
 		}
 
 		// check for cancellation
-		if (monitor.isCanceled()) {
+		if (subMonitor.isCanceled()) {
 			p.destroy();
 			return;
 		}