diff --git a/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt b/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt index 2edb492b220..18c71dac188 100644 --- a/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt +++ b/compiler/util/src/org/jetbrains/kotlin/utils/PathUtil.kt @@ -24,36 +24,50 @@ import java.io.File import java.util.regex.Pattern object PathUtil { - const val JS_LIB_JAR_NAME = "kotlin-stdlib-js.jar" + const val JS_LIB_NAME = "kotlin-stdlib-js" + const val JS_LIB_JAR_NAME = "$JS_LIB_NAME.jar" + const val JS_LIB_10_JAR_NAME = "kotlin-jslib.jar" const val ALLOPEN_PLUGIN_JAR_NAME = "allopen-compiler-plugin.jar" const val NOARG_PLUGIN_JAR_NAME = "noarg-compiler-plugin.jar" const val SAM_WITH_RECEIVER_PLUGIN_JAR_NAME = "sam-with-receiver-compiler-plugin.jar" const val JS_LIB_SRC_JAR_NAME = "kotlin-stdlib-js-sources.jar" - const val KOTLIN_JAVA_RUNTIME_JRE7_JAR = "kotlin-stdlib-jre7.jar" - const val KOTLIN_JAVA_RUNTIME_JDK7_JAR = "kotlin-stdlib-jdk7.jar" + const val KOTLIN_JAVA_RUNTIME_JRE7_NAME = "kotlin-stdlib-jre7" + const val KOTLIN_JAVA_RUNTIME_JRE7_JAR = "$KOTLIN_JAVA_RUNTIME_JRE7_NAME.jar" + const val KOTLIN_JAVA_RUNTIME_JRE7_SRC_JAR = "$KOTLIN_JAVA_RUNTIME_JRE7_NAME-sources.jar" - const val KOTLIN_JAVA_RUNTIME_JRE8_JAR = "kotlin-stdlib-jre8.jar" - const val KOTLIN_JAVA_RUNTIME_JDK8_JAR = "kotlin-stdlib-jdk8.jar" + const val KOTLIN_JAVA_RUNTIME_JDK7_NAME = "kotlin-stdlib-jdk7" + const val KOTLIN_JAVA_RUNTIME_JDK7_JAR = "$KOTLIN_JAVA_RUNTIME_JDK7_NAME.jar" + const val KOTLIN_JAVA_RUNTIME_JDK7_SRC_JAR = "$KOTLIN_JAVA_RUNTIME_JDK7_NAME-sources.jar" - const val KOTLIN_JAVA_RUNTIME_JRE7_SRC_JAR = "kotlin-stdlib-jre7-sources.jar" - const val KOTLIN_JAVA_RUNTIME_JDK7_SRC_JAR = "kotlin-stdlib-jdk7-sources.jar" + const val KOTLIN_JAVA_RUNTIME_JRE8_NAME = "kotlin-stdlib-jre8" + const val KOTLIN_JAVA_RUNTIME_JRE8_JAR = "$KOTLIN_JAVA_RUNTIME_JRE8_NAME.jar" + const val KOTLIN_JAVA_RUNTIME_JRE8_SRC_JAR = "$KOTLIN_JAVA_RUNTIME_JRE8_NAME-sources.jar" - const val KOTLIN_JAVA_RUNTIME_JRE8_SRC_JAR = "kotlin-stdlib-jre8-sources.jar" - const val KOTLIN_JAVA_RUNTIME_JDK8_SRC_JAR = "kotlin-stdlib-jdk8-sources.jar" + const val KOTLIN_JAVA_RUNTIME_JDK8_NAME = "kotlin-stdlib-jdk8" + const val KOTLIN_JAVA_RUNTIME_JDK8_JAR = "$KOTLIN_JAVA_RUNTIME_JDK8_NAME.jar" + const val KOTLIN_JAVA_RUNTIME_JDK8_SRC_JAR = "$KOTLIN_JAVA_RUNTIME_JDK8_NAME-sources.jar" + + const val KOTLIN_JAVA_STDLIB_NAME = "kotlin-stdlib" + const val KOTLIN_JAVA_STDLIB_JAR = "$KOTLIN_JAVA_STDLIB_NAME.jar" + const val KOTLIN_JAVA_STDLIB_SRC_JAR = "$KOTLIN_JAVA_STDLIB_NAME-sources.jar" - const val KOTLIN_JAVA_STDLIB_JAR = "kotlin-stdlib.jar" const val KOTLIN_JAVA_REFLECT_JAR = "kotlin-reflect.jar" const val KOTLIN_JAVA_SCRIPT_RUNTIME_JAR = "kotlin-script-runtime.jar" - const val KOTLIN_TEST_JAR = "kotlin-test.jar" - const val KOTLIN_TEST_JS_JAR = "kotlin-test-js.jar" - const val KOTLIN_JAVA_STDLIB_SRC_JAR = "kotlin-stdlib-sources.jar" + + const val KOTLIN_TEST_NAME = "kotlin-test" + const val KOTLIN_TEST_JAR = "$KOTLIN_TEST_NAME.jar" + const val KOTLIN_TEST_SRC_JAR = "$KOTLIN_TEST_NAME-sources.jar" + + const val KOTLIN_TEST_JS_NAME = "kotlin-test-js" + const val KOTLIN_TEST_JS_JAR = "$KOTLIN_TEST_JS_NAME.jar" + const val KOTLIN_JAVA_STDLIB_SRC_JAR_OLD = "kotlin-runtime-sources.jar" const val KOTLIN_REFLECT_SRC_JAR = "kotlin-reflect-sources.jar" - const val KOTLIN_TEST_SRC_JAR = "kotlin-test-sources.jar" - const val KOTLIN_COMPILER = "kotlin-compiler" - const val KOTLIN_COMPILER_JAR = "$KOTLIN_COMPILER.jar" + + const val KOTLIN_COMPILER_NAME = "kotlin-compiler" + const val KOTLIN_COMPILER_JAR = "$KOTLIN_COMPILER_NAME.jar" @JvmField val KOTLIN_RUNTIME_JAR_PATTERN: Pattern = Pattern.compile("kotlin-(stdlib|runtime)(-\\d[\\d.]+(-.+)?)?\\.jar") @@ -73,7 +87,7 @@ object PathUtil { @JvmStatic val kotlinPathsForCompiler: KotlinPaths - get() = if (!pathUtilJar.isFile || !pathUtilJar.name.startsWith(KOTLIN_COMPILER)) { + get() = if (!pathUtilJar.isFile || !pathUtilJar.name.startsWith(KOTLIN_COMPILER_NAME)) { // PathUtil.class is located not in the kotlin-compiler*.jar, so it must be a test and we'll take KotlinPaths from "dist/" // (when running tests, PathUtil.class is in its containing module's artifact, i.e. util-{version}.jar) kotlinPathsForDistDirectory diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt index b167c351b1e..86ff79b07e4 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/JsLibraryStdDetectionUtil.kt @@ -54,8 +54,8 @@ object JsLibraryStdDetectionUtil { val name = root.url.substringBefore("!/").substringAfterLast('/') if (name == PathUtil.JS_LIB_JAR_NAME || name == PathUtil.JS_LIB_10_JAR_NAME || - PathUtil.KOTLIN_STDLIB_JS_JAR_PATTERN.matcher(name).matches() || - PathUtil.KOTLIN_JS_LIBRARY_JAR_PATTERN.matcher(name).matches()) { + PathUtil.KOTLIN_STDLIB_JS_JAR_PATTERN.matcher(name).matches() || + PathUtil.KOTLIN_JS_LIBRARY_JAR_PATTERN.matcher(name).matches()) { val jar = VfsUtilCore.getVirtualFileForJar(root) ?: continue var isJSStdLib = jar.getUserData(IS_JS_LIBRARY_STD_LIB) diff --git a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt index fd0197d1f09..692d33c2006 100644 --- a/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/versions/KotlinRuntimeLibraryUtil.kt @@ -315,13 +315,18 @@ fun getStdlibArtifactId(sdk: Sdk?, version: String): String { return MAVEN_STDLIB_ID } - val areSDKArtifactsAvailable = VersionComparatorUtil.COMPARATOR.compare("1.2.0-rc-39", version) >= 0 val sdkVersion = sdk?.version + if (hasJdkLikeUpdatedRuntime(version)) { + return when { + sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8) -> MAVEN_STDLIB_ID_JDK8 + sdkVersion == JavaSdkVersion.JDK_1_7 -> MAVEN_STDLIB_ID_JDK7 + else -> MAVEN_STDLIB_ID + } + } + return when { - sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8) -> - if (areSDKArtifactsAvailable) MAVEN_STDLIB_ID_JDK8 else MAVEN_STDLIB_ID_JDK7 - sdkVersion == JavaSdkVersion.JDK_1_7 -> - if (areSDKArtifactsAvailable) MAVEN_STDLIB_ID_JDK7 else MAVEN_STDLIB_ID_JRE7 + sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8) -> MAVEN_STDLIB_ID_JRE8 + sdkVersion == JavaSdkVersion.JDK_1_7 -> MAVEN_STDLIB_ID_JRE7 else -> MAVEN_STDLIB_ID } } @@ -337,24 +342,30 @@ fun getDefaultJvmTarget(sdk: Sdk?, version: String): JvmTarget? { return null } +fun hasJdkLikeUpdatedRuntime(version: String): Boolean = + VersionComparatorUtil.compare(version, "1.2.0-rc-39") >= 0 || + isSnapshot(version) || + version == "default_version" /* for tests */ + fun hasJreSpecificRuntime(version: String): Boolean = VersionComparatorUtil.compare(version, "1.1.0") >= 0 || isSnapshot(version) || version == "default_version" /* for tests */ -val MAVEN_STDLIB_ID = "kotlin-stdlib" +val MAVEN_STDLIB_ID = PathUtil.KOTLIN_JAVA_STDLIB_NAME -val MAVEN_STDLIB_ID_JRE7 = "kotlin-stdlib-jre7" -val MAVEN_STDLIB_ID_JDK7 = "kotlin-stdlib-jdk7" +val MAVEN_STDLIB_ID_JRE7 = PathUtil.KOTLIN_JAVA_RUNTIME_JRE7_NAME +val MAVEN_STDLIB_ID_JDK7 = PathUtil.KOTLIN_JAVA_RUNTIME_JDK7_NAME -val MAVEN_STDLIB_ID_JRE8 = "kotlin-stdlib-jre8" -val MAVEN_STDLIB_ID_JDK8 = "kotlin-stdlib-jdk8" +val MAVEN_STDLIB_ID_JRE8 = PathUtil.KOTLIN_JAVA_RUNTIME_JRE8_NAME +val MAVEN_STDLIB_ID_JDK8 = PathUtil.KOTLIN_JAVA_RUNTIME_JDK8_NAME + +val MAVEN_JS_STDLIB_ID = PathUtil.JS_LIB_NAME +val MAVEN_JS_TEST_ID = PathUtil.KOTLIN_TEST_JS_NAME -val MAVEN_JS_STDLIB_ID = "kotlin-stdlib-js" -val MAVEN_JS_TEST_ID = "kotlin-test-js" val MAVEN_OLD_JS_STDLIB_ID = "kotlin-js-library" val MAVEN_COMMON_STDLIB_ID = "kotlin-stdlib-common" // TODO: KotlinCommonMavenConfigurator -val MAVEN_TEST_ID = "kotlin-test" +val MAVEN_TEST_ID = PathUtil.KOTLIN_TEST_NAME val MAVEN_TEST_JUNIT_ID = "kotlin-test-junit" val MAVEN_COMMON_TEST_ID = "kotlin-test-common" val MAVEN_COMMON_TEST_ANNOTATIONS_ID = "kotlin-test-annotations-common" diff --git a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/context.kt b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/context.kt index 3f64a99bf3d..4447691298f 100644 --- a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/context.kt +++ b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/util/context.kt @@ -51,7 +51,7 @@ fun File.matchMaybeVersionedFile(baseName: String) = name == baseName.removeSuffix(".jar") || // for classes dirs Regex(Regex.escape(baseName.removeSuffix(".jar")) + "(-\\d.*)?\\.jar").matches(name) -private const val KOTLIN_COMPILER_EMBEDDABLE_JAR = "${PathUtil.KOTLIN_COMPILER}-embeddable.jar" +private const val KOTLIN_COMPILER_EMBEDDABLE_JAR = "${PathUtil.KOTLIN_COMPILER_NAME}-embeddable.jar" internal fun List.takeIfContainsAll(vararg keyNames: String): List? = takeIf { classpath ->