Bug 499342 - Read Version information from the release file
Change-Id: I19544dbac51de7341115ebf59e92414803f3d8f0
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 9e52ddd..b658ee2 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
@@ -19,6 +19,8 @@
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
@@ -29,6 +31,8 @@
import java.util.ListIterator;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.stream.Stream;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -68,6 +72,8 @@
private static final String JRE = "jre"; //$NON-NLS-1$
private static final String LIB = "lib"; //$NON-NLS-1$
private static final String BAR = "|"; //$NON-NLS-1$
+ private static final String RELEASE_FILE = "release"; //$NON-NLS-1$
+ private static final String JAVA_VERSION = "JAVA_VERSION"; //$NON-NLS-1$
public static final String ID_STANDARD_VM_TYPE = "org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType"; //$NON-NLS-1$
@@ -205,13 +211,18 @@
if (info == null || LaunchingPlugin.timeStampChanged(installPath)) {
info = fgFailedInstallPath.get(installPath);
if (info == null) {
- info = generateLibraryInfo(javaHome, javaExecutable);
- if (info == null) {
- info = getDefaultLibraryInfo(javaHome);
- fgFailedInstallPath.put(installPath, info);
+ String version = readReleaseVersion(javaHome);
+ if (JavaCore.compareJavaVersions(version, JavaCore.VERSION_1_8) > 0) {
+ info = new LibraryInfo(version, new String[0], new String[0], new String[0]);
} else {
- // only persist if we were able to generate information - see bug 70011
- LaunchingPlugin.setLibraryInfo(installPath, info);
+ info = generateLibraryInfo(javaHome, javaExecutable);
+ if (info == null) {
+ info = getDefaultLibraryInfo(javaHome);
+ fgFailedInstallPath.put(installPath, info);
+ } else {
+ // only persist if we were able to generate information - see bug 70011
+ LaunchingPlugin.setLibraryInfo(installPath, info);
+ }
}
}
}
@@ -796,4 +807,22 @@
return null;
}
+ private synchronized String readReleaseVersion(File javaHome) {
+
+ String version = ""; //$NON-NLS-1$
+ try (Stream<String> lines = Files.lines(Paths.get(javaHome.getAbsolutePath(), RELEASE_FILE)).filter(s -> s.contains(JAVA_VERSION))) {
+ Optional<String> hasVersion = lines.findFirst();
+ if (hasVersion.isPresent()) {
+ String line = hasVersion.get();
+ version = line.substring(14, line.length() - 1); // length of JAVA_VERSION + 2 in JAVA_VERSION="9"
+ }
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return version;
+
+ }
+
}