[java] ignores incomplete version strings for JDKs defined programmatically (IDEA-203014)

This commit is contained in:
Roman Shevchenko
2018-12-05 17:36:51 +01:00
parent 53a0100ce4
commit 835594e57a
3 changed files with 20 additions and 6 deletions
@@ -331,7 +331,9 @@ public class JavaSdkImpl extends JavaSdk {
String path = home.replace(File.separatorChar, '/');
sdkModificator.setHomePath(path);
sdkModificator.setVersionString(jdkName); // must be set after home path, otherwise setting home path clears the version string
if (JdkVersionDetector.isVersionString(jdkName)) {
sdkModificator.setVersionString(jdkName); // must be set after home path, otherwise setting home path clears the version string
}
File jdkHomeFile = new File(home);
addClasses(jdkHomeFile, sdkModificator, isJre);
@@ -3,10 +3,11 @@ package com.intellij.java.openapi.projectRoots;
import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.util.lang.JavaVersion;
import org.jetbrains.jps.model.java.JdkVersionDetector;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.*;
public class JavaSdkVersionTest {
@Test
@@ -37,4 +38,12 @@ public class JavaSdkVersionTest {
assertEquals(JavaSdkVersion.JDK_1_9, JavaSdkVersion.fromVersionString("java version \"9-ea\""));
assertEquals(JavaSdkVersion.JDK_1_9, JavaSdkVersion.fromVersionString("java version \"9.1.2\""));
}
@Test
public void versionStringDetectorSanity() {
assertTrue(JdkVersionDetector.isVersionString("java version \"9\""));
assertFalse(JdkVersionDetector.isVersionString("java version \"\""));
assertTrue(JdkVersionDetector.isVersionString(JdkVersionDetector.formatVersionString(JavaVersion.compose(9))));
}
}
@@ -1,9 +1,8 @@
/*
* Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
*/
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.jps.model.java;
import com.intellij.openapi.util.Bitness;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.lang.JavaVersion;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -76,4 +75,8 @@ public abstract class JdkVersionDetector {
public static String formatVersionString(@NotNull JavaVersion version) {
return "java version \"" + version + '"';
}
public static boolean isVersionString(@NotNull String string) {
return string.length() >= 16 && string.startsWith("java version \"") && StringUtil.endsWithChar(string, '"');
}
}