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$