Configuring project with Gradle adds kotlin-stdlib-jre7 or kotlin-stdlib-jre8 if the selected JDK is of a high enough version

This commit is contained in:
Dmitry Jemerov
2017-01-26 11:43:29 +01:00
parent acc19f2ab6
commit 7eea8f3849
9 changed files with 36 additions and 13 deletions
@@ -73,7 +73,7 @@ class GradleKotlinJavaFrameworkSupportProvider : GradleFrameworkSupportProvider(
.addRepositoriesDefinition("mavenCentral()")
.addBuildscriptPropertyDefinition("ext.kotlin_version = '$kotlinVersion'")
.addDependencyNotation(KotlinWithGradleConfigurator.LIBRARY)
.addDependencyNotation(KotlinWithGradleConfigurator.getRuntimeLibrary(rootModel.sdk))
.addBuildscriptDependencyNotation(KotlinWithGradleConfigurator.CLASSPATH)
}
}
@@ -19,7 +19,9 @@ package org.jetbrains.kotlin.idea.configuration
import com.intellij.codeInsight.CodeInsightUtilCore
import com.intellij.ide.actions.OpenFileAction
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleUtil
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.DependencyScope
import com.intellij.openapi.roots.ExternalLibraryDescriptor
import com.intellij.openapi.roots.ModuleRootManager
@@ -33,6 +35,7 @@ import org.jetbrains.kotlin.idea.KotlinPluginUtil
import org.jetbrains.kotlin.idea.framework.ui.ConfigureDialogWithModulesAndVersion
import org.jetbrains.kotlin.idea.util.application.executeCommand
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.idea.versions.getStdlibArtifactId
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.plugins.gradle.util.GradleConstants
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile
@@ -72,7 +75,9 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
private fun isFileConfigured(projectGradleFile: GroovyFile): Boolean {
val fileText = projectGradleFile.text
return containsDirective(fileText, applyPluginDirective) && fileText.contains(LIBRARY)
return containsDirective(fileText, applyPluginDirective) &&
fileText.contains("org.jetbrains.kotlin") &&
fileText.contains("kotlin-stdlib")
}
@JvmSuppressWildcards
@@ -140,7 +145,8 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
wasModified = wasModified or addRepository(repositoriesBlock, version)
val dependenciesBlock = getDependenciesBlock(file)
wasModified = wasModified or addExpressionInBlockIfNeeded(LIBRARY, dependenciesBlock, false)
val sdk = ModuleUtil.findModuleForPsiElement(file)?.let { ModuleRootManager.getInstance(it).sdk }
wasModified = wasModified or addExpressionInBlockIfNeeded(getRuntimeLibrary(sdk), dependenciesBlock, false)
return wasModified
}
@@ -187,8 +193,7 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
private val MAVEN_CENTRAL = "mavenCentral()\n"
private val JCENTER = "jcenter()\n"
val LIBRARY = "compile \"org.jetbrains.kotlin:kotlin-stdlib:\$kotlin_version\""
val SOURCE_SET = "main.java.srcDirs += 'src/main/kotlin'\n"
private val VERSION = String.format("ext.kotlin_version = '%s'", VERSION_TEMPLATE)
private fun containsDirective(fileText: String, directive: String): Boolean {
@@ -318,8 +323,6 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
return getBlockOrCreate(file, "dependencies")
}
fun getSourceSetsBlock(parent: GrStatementOwner) = getBlockOrCreate(parent, "sourceSets")
private fun getBuildScriptBlock(file: GrStatementOwner) = getBlockOrCreate(file, "buildscript")
private fun getBuildScriptDependenciesBlock(file: GrStatementOwner): GrClosableBlock {
@@ -402,5 +405,10 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
}
return addLastExpressionInBlockIfNeeded(snippet, repositoriesBlock)
}
fun getRuntimeLibrary(sdk: Sdk?): String {
val artifactId = getStdlibArtifactId(sdk)
return "compile \"org.jetbrains.kotlin:$artifactId:\$kotlin_version\""
}
}
}
@@ -22,6 +22,9 @@ import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.module.ModuleUtil
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.LibraryOrderEntry
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ProjectFileIndex
@@ -287,6 +290,18 @@ fun getKotlinJsRuntimeMarkerClass(project: Project, scope: GlobalSearchScope): V
}
}
fun getStdlibArtifactId(sdk: Sdk?): String {
val sdkVersion = sdk?.let { JavaSdk.getInstance().getVersion(it) }
val artifactId = when (sdkVersion) {
JavaSdkVersion.JDK_1_8, JavaSdkVersion.JDK_1_9 -> MAVEN_STDLIB_ID_JRE8
JavaSdkVersion.JDK_1_7 -> MAVEN_STDLIB_ID_JRE7
else -> MAVEN_STDLIB_ID
}
return artifactId
}
val MAVEN_STDLIB_ID = "kotlin-stdlib"
val MAVEN_STDLIB_ID_JRE7 = "kotlin-stdlib-jre7"
val MAVEN_STDLIB_ID_JRE8 = "kotlin-stdlib-jre8"
val MAVEN_JS_STDLIB_ID = "kotlin-js-library"
val MAVEN_COMMON_STDLIB_ID = "kotlin-stdlib-common" // TODO: KotlinCommonMavenConfigurator
+1 -1
View File
@@ -10,7 +10,7 @@ repositories {
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
buildscript {
ext.kotlin_version = '$VERSION$'
+1 -1
View File
@@ -13,7 +13,7 @@ repositories {
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
buildscript {
ext.kotlin_version = '$VERSION$'
+1 -1
View File
@@ -13,7 +13,7 @@ repositories {
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
buildscript {
ext.kotlin_version = '$VERSION$'
@@ -6,7 +6,7 @@ version = '1.0'
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
buildscript {
@@ -6,7 +6,7 @@ version = '1.0'
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
buildscript {
+1 -1
View File
@@ -13,7 +13,7 @@ repositories {
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
buildscript {
ext.kotlin_version = '$VERSION$'