Bug 535583 - Adding a Java 11 JRE can lead to NPE

Change-Id: I0dfb22b318e62ca7219b2b23265ccbc37a400a4b
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
index 7db3e25..e2f87d7 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
@@ -25,7 +25,7 @@
 import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
 import org.eclipse.jdt.internal.debug.ui.IJavaDebugHelpContextIds;
 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
-import org.eclipse.jdt.internal.launching.StandardVM;
+import org.eclipse.jdt.internal.launching.StandardVMType;
 import org.eclipse.jdt.launching.AbstractVMInstall;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.IVMInstallType;
@@ -192,16 +192,11 @@
 			}
 			if (vmver == null) {
 				IVMInstallType vmType = vmInstall.getVMInstallType();
-				IVMInstall vm = vmType.findVMInstall(vmInstall.getId());
-				if (vm == null) {
-					vm = vmType.createVMInstall(vmInstall.getId());
-				}
-				if (vm instanceof StandardVM) {
-					((StandardVM) vm).setInstallLocation(vmInstall.getInstallLocation());
-					vmver = ((StandardVM) vm).getJavaVersion();
+				if ( vmType instanceof StandardVMType) {
+					vmver = ((StandardVMType) vmType).readReleaseVersion(vmInstall.getInstallLocation());
 				}
 			}
-			if (vmver != null && JavaCore.compareJavaVersions(vmver, latest) > 0) {
+			if (vmver != null && vmver.length() != 0 && JavaCore.compareJavaVersions(vmver, latest) > 0) {
 				setMessage(NLS.bind(JREMessages.JREsPreferencePage_9, new String[] { compliance }), IMessageProvider.WARNING);
 				fCompliance.setVisible(true);
 			} else {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
index f096b7e..758b403 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/StandardVMPage.java
@@ -26,9 +26,8 @@
 import org.eclipse.jdt.internal.debug.ui.IJavaDebugHelpContextIds;
 import org.eclipse.jdt.internal.debug.ui.JavaDebugImages;
 import org.eclipse.jdt.internal.debug.ui.StatusInfo;
-import org.eclipse.jdt.internal.launching.StandardVM;
+import org.eclipse.jdt.internal.launching.StandardVMType;
 import org.eclipse.jdt.launching.AbstractVMInstallType;
-import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.IVMInstallType;
 import org.eclipse.jdt.launching.VMStandin;
 import org.eclipse.jface.dialogs.Dialog;
@@ -246,14 +245,9 @@
 			List<String> allVersions = JavaCore.getAllVersions();
 			String latest = allVersions.get(allVersions.size() - 1);
 			IVMInstallType vmType = fVM.getVMInstallType();
-			IVMInstall vm = vmType.findVMInstall(fVM.getId());
-			if (vm == null) {
-				vm = vmType.createVMInstall(fVM.getId());
-			}
-			if (vm instanceof StandardVM) {
-				((StandardVM) vm).setInstallLocation(getInstallLocation());
-				String vmver = ((StandardVM) vm).getJavaVersion();
-				if (vmver != null && JavaCore.compareJavaVersions(vmver, latest) > 0) {
+			if (vmType instanceof StandardVMType) {
+				String vmver = ((StandardVMType) vmType).readReleaseVersion(getInstallLocation());
+				if (vmver != null && vmver.length() != 0 && JavaCore.compareJavaVersions(vmver, latest) > 0) {
 					s = new StatusInfo(IStatus.INFO, JREMessages.JREsPreferencePage_9);
 				}
 			}
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
index a3b7eef..ffabb5b 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMType.java
@@ -827,7 +827,7 @@
 		return null;
 	}
 
-	private synchronized String readReleaseVersion(File javaHome) {
+	public synchronized String readReleaseVersion(File javaHome) {
 
 		String version = ""; //$NON-NLS-1$