Refactoring: introduce Sdk.version extension

(cherry picked from commit d387e6e)
This commit is contained in:
Nikolay Krasko
2017-09-28 15:29:33 +03:00
parent 4cdd4c04a3
commit 3145c096a7
4 changed files with 14 additions and 7 deletions
@@ -25,6 +25,7 @@ import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.idea.KotlinPluginUtil
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator
import org.jetbrains.kotlin.idea.util.projectStructure.version
import org.jetbrains.kotlin.idea.versions.MAVEN_STDLIB_ID_JRE7
import org.jetbrains.kotlin.idea.versions.hasJreSpecificRuntime
import org.jetbrains.kotlin.resolve.TargetPlatform
@@ -62,7 +63,7 @@ class KotlinAndroidGradleModuleConfigurator internal constructor() : KotlinWithG
override fun getStdlibArtifactName(sdk: Sdk?, version: String): String {
if (sdk != null && hasJreSpecificRuntime(version)) {
val sdkVersion = JavaSdk.getInstance().getVersion(sdk)
val sdkVersion = sdk.version
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
// Android dex can't convert our kotlin-stdlib-jre8 artifact, so use jre7 instead (KT-16530)
return MAVEN_STDLIB_ID_JRE7
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.idea.framework.JavaRuntimeLibraryDescription
import org.jetbrains.kotlin.idea.framework.JsLibraryStdDetectionUtil
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
import org.jetbrains.kotlin.idea.util.projectStructure.sdk
import org.jetbrains.kotlin.idea.util.projectStructure.version
import org.jetbrains.kotlin.idea.versions.LibraryJarDescriptor
import org.jetbrains.kotlin.idea.versions.isKotlinJavaRuntime
import org.jetbrains.kotlin.resolve.TargetPlatform
@@ -76,7 +77,7 @@ open class KotlinJavaModuleConfigurator internal constructor() : KotlinWithLibra
LibraryJarDescriptor.REFLECT_JAR,
LibraryJarDescriptor.RUNTIME_SRC_JAR,
LibraryJarDescriptor.TEST_JAR)
val sdkVersion = sdk?.let { JavaSdk.getInstance().getVersion(it) } ?: return result
val sdkVersion = sdk?.version ?: return result
if (sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_7)) {
result += listOf(LibraryJarDescriptor.RUNTIME_JRE7_JAR, LibraryJarDescriptor.RUNTIME_JRE7_SOURCES_JAR)
}
@@ -93,7 +94,7 @@ open class KotlinJavaModuleConfigurator internal constructor() : KotlinWithLibra
override fun configureKotlinSettings(modules: List<Module>) {
val project = modules.firstOrNull()?.project ?: return
val canChangeProjectSettings = project.allModules().all {
it.sdk?.let { JavaSdk.getInstance().getVersion(it)?.isAtLeast(JavaSdkVersion.JDK_1_8) } ?: true
it.sdk?.version?.isAtLeast(JavaSdkVersion.JDK_1_8) ?: true
}
if (canChangeProjectSettings) {
Kotlin2JvmCompilerArgumentsHolder.getInstance(project).update {
@@ -102,8 +103,8 @@ open class KotlinJavaModuleConfigurator internal constructor() : KotlinWithLibra
}
else {
for (module in modules) {
val hasJdk8 = module.sdk?.let { JavaSdk.getInstance().getVersion(it)?.isAtLeast(JavaSdkVersion.JDK_1_8) }
if (hasJdk8 == true) {
val sdkVersion = module.sdk?.version
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
val modelsProvider = IdeModifiableModelsProviderImpl(project)
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true)
val facetSettings = facet.configuration.settings
@@ -20,6 +20,8 @@ import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.module.ModuleUtilCore
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdk
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.OrderEnumerator
@@ -36,6 +38,8 @@ fun Module.findLibrary(predicate: (Library) -> Boolean): Library? = OrderEnumera
val Module.sdk: Sdk? get() = ModuleRootManager.getInstance(this).sdk
val Sdk.version: JavaSdkVersion? get() = JavaSdk.getInstance().getVersion(this)
fun OrderEnumerator.findLibrary(predicate: (Library) -> Boolean): Library? {
var lib: Library? = null
forEachLibrary { library ->
@@ -49,6 +49,7 @@ import org.jetbrains.kotlin.idea.framework.isExternalLibrary
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
import org.jetbrains.kotlin.idea.util.projectStructure.version
import org.jetbrains.kotlin.idea.util.runWithAlternativeResolveEnabled
import org.jetbrains.kotlin.idea.vfilefinder.KotlinJavaScriptMetaFileIndex
import org.jetbrains.kotlin.idea.vfilefinder.hasSomethingInPackage
@@ -334,7 +335,7 @@ fun getStdlibArtifactId(sdk: Sdk?, version: String): String {
return MAVEN_STDLIB_ID
}
val sdkVersion = sdk?.let { JavaSdk.getInstance().getVersion(it) }
val sdkVersion = sdk?.version
return when (sdkVersion) {
JavaSdkVersion.JDK_1_8, JavaSdkVersion.JDK_1_9 -> MAVEN_STDLIB_ID_JRE8
JavaSdkVersion.JDK_1_7 -> MAVEN_STDLIB_ID_JRE7
@@ -346,7 +347,7 @@ fun getDefaultJvmTarget(sdk: Sdk?, version: String): JvmTarget? {
if (!hasJreSpecificRuntime(version)) {
return null
}
val sdkVersion = sdk?.let { JavaSdk.getInstance().getVersion(it) }
val sdkVersion = sdk?.version
if (sdkVersion != null && sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_8)) {
return JvmTarget.JVM_1_8
}