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()") .addRepositoriesDefinition("mavenCentral()")
.addBuildscriptPropertyDefinition("ext.kotlin_version = '$kotlinVersion'") .addBuildscriptPropertyDefinition("ext.kotlin_version = '$kotlinVersion'")
.addDependencyNotation(KotlinWithGradleConfigurator.LIBRARY) .addDependencyNotation(KotlinWithGradleConfigurator.getRuntimeLibrary(rootModel.sdk))
.addBuildscriptDependencyNotation(KotlinWithGradleConfigurator.CLASSPATH) .addBuildscriptDependencyNotation(KotlinWithGradleConfigurator.CLASSPATH)
} }
} }
@@ -19,7 +19,9 @@ package org.jetbrains.kotlin.idea.configuration
import com.intellij.codeInsight.CodeInsightUtilCore import com.intellij.codeInsight.CodeInsightUtilCore
import com.intellij.ide.actions.OpenFileAction import com.intellij.ide.actions.OpenFileAction
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleUtil
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.roots.DependencyScope import com.intellij.openapi.roots.DependencyScope
import com.intellij.openapi.roots.ExternalLibraryDescriptor import com.intellij.openapi.roots.ExternalLibraryDescriptor
import com.intellij.openapi.roots.ModuleRootManager 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.framework.ui.ConfigureDialogWithModulesAndVersion
import org.jetbrains.kotlin.idea.util.application.executeCommand import org.jetbrains.kotlin.idea.util.application.executeCommand
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand 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.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.plugins.gradle.util.GradleConstants import org.jetbrains.plugins.gradle.util.GradleConstants
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile import org.jetbrains.plugins.groovy.lang.psi.GroovyFile
@@ -72,7 +75,9 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
private fun isFileConfigured(projectGradleFile: GroovyFile): Boolean { private fun isFileConfigured(projectGradleFile: GroovyFile): Boolean {
val fileText = projectGradleFile.text 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 @JvmSuppressWildcards
@@ -140,7 +145,8 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
wasModified = wasModified or addRepository(repositoriesBlock, version) wasModified = wasModified or addRepository(repositoriesBlock, version)
val dependenciesBlock = getDependenciesBlock(file) 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 return wasModified
} }
@@ -187,8 +193,7 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
private val MAVEN_CENTRAL = "mavenCentral()\n" private val MAVEN_CENTRAL = "mavenCentral()\n"
private val JCENTER = "jcenter()\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 val VERSION = String.format("ext.kotlin_version = '%s'", VERSION_TEMPLATE)
private fun containsDirective(fileText: String, directive: String): Boolean { private fun containsDirective(fileText: String, directive: String): Boolean {
@@ -318,8 +323,6 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
return getBlockOrCreate(file, "dependencies") return getBlockOrCreate(file, "dependencies")
} }
fun getSourceSetsBlock(parent: GrStatementOwner) = getBlockOrCreate(parent, "sourceSets")
private fun getBuildScriptBlock(file: GrStatementOwner) = getBlockOrCreate(file, "buildscript") private fun getBuildScriptBlock(file: GrStatementOwner) = getBlockOrCreate(file, "buildscript")
private fun getBuildScriptDependenciesBlock(file: GrStatementOwner): GrClosableBlock { private fun getBuildScriptDependenciesBlock(file: GrStatementOwner): GrClosableBlock {
@@ -402,5 +405,10 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
} }
return addLastExpressionInBlockIfNeeded(snippet, repositoriesBlock) 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.ModuleManager
import com.intellij.openapi.module.ModuleUtil import com.intellij.openapi.module.ModuleUtil
import com.intellij.openapi.project.Project 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.LibraryOrderEntry
import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ProjectFileIndex 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 = "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_JS_STDLIB_ID = "kotlin-js-library"
val MAVEN_COMMON_STDLIB_ID = "kotlin-stdlib-common" // TODO: KotlinCommonMavenConfigurator val MAVEN_COMMON_STDLIB_ID = "kotlin-stdlib-common" // TODO: KotlinCommonMavenConfigurator
+1 -1
View File
@@ -10,7 +10,7 @@ repositories {
dependencies { dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11' 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 { buildscript {
ext.kotlin_version = '$VERSION$' ext.kotlin_version = '$VERSION$'
+1 -1
View File
@@ -13,7 +13,7 @@ repositories {
dependencies { dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11' 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 { buildscript {
ext.kotlin_version = '$VERSION$' ext.kotlin_version = '$VERSION$'
+1 -1
View File
@@ -13,7 +13,7 @@ repositories {
dependencies { dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11' 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 { buildscript {
ext.kotlin_version = '$VERSION$' ext.kotlin_version = '$VERSION$'
@@ -6,7 +6,7 @@ version = '1.0'
dependencies { dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11' 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 { buildscript {
@@ -6,7 +6,7 @@ version = '1.0'
dependencies { dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11' 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 { buildscript {
+1 -1
View File
@@ -13,7 +13,7 @@ repositories {
dependencies { dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11' 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 { buildscript {
ext.kotlin_version = '$VERSION$' ext.kotlin_version = '$VERSION$'