Gradle project configurator: fix inserting of non-kotlin library version in gradle.kts files

This commit is contained in:
Natalia Selezneva
2018-08-28 11:10:49 +03:00
parent 4671fa0136
commit 2fe4f95d33
5 changed files with 28 additions and 37 deletions
@@ -50,8 +50,7 @@ interface GradleBuildScriptManipulator<out Psi: PsiFile> {
fun addKotlinLibraryToModuleBuildScript(
scope: DependencyScope,
libraryDescriptor: ExternalLibraryDescriptor,
isAndroidModule: Boolean
libraryDescriptor: ExternalLibraryDescriptor
)
fun getKotlinStdlibVersion(): String?
@@ -48,8 +48,7 @@ interface GradleBuildScriptManipulator<out Psi: PsiFile> {
fun addKotlinLibraryToModuleBuildScript(
scope: DependencyScope,
libraryDescriptor: ExternalLibraryDescriptor,
isAndroidModule: Boolean
libraryDescriptor: ExternalLibraryDescriptor
)
fun getKotlinStdlibVersion(): String?
@@ -21,6 +21,7 @@ import com.intellij.openapi.roots.ExternalLibraryDescriptor
import com.intellij.openapi.util.text.StringUtil
import com.intellij.psi.PsiElement
import com.intellij.psi.codeStyle.CodeStyleManager
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator.Companion.getBuildScriptSettingsPsiFile
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
@@ -28,12 +29,11 @@ import org.jetbrains.plugins.groovy.lang.psi.GroovyFile
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrApplicationStatement
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression
import org.jetbrains.plugins.groovy.lang.psi.api.util.GrStatementOwner
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator.Companion.getBuildScriptSettingsPsiFile
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrApplicationStatement
class GroovyBuildScriptManipulator(
override val scriptFile: GroovyFile,
@@ -158,12 +158,11 @@ class GroovyBuildScriptManipulator(
override fun addKotlinLibraryToModuleBuildScript(
scope: DependencyScope,
libraryDescriptor: ExternalLibraryDescriptor,
isAndroidModule: Boolean
libraryDescriptor: ExternalLibraryDescriptor
) {
val dependencyString = String.format(
"%s \"%s:%s:%s\"",
scope.toGradleCompileScope(isAndroidModule),
scope.toGradleCompileScope(scriptFile.module?.getBuildSystemType() == AndroidGradle),
libraryDescriptor.libraryGroupId,
libraryDescriptor.libraryArtifactId,
libraryDescriptor.maxVersion
@@ -116,24 +116,15 @@ class KotlinBuildScriptManipulator(
override fun addKotlinLibraryToModuleBuildScript(
scope: DependencyScope,
libraryDescriptor: ExternalLibraryDescriptor,
isAndroidModule: Boolean
libraryDescriptor: ExternalLibraryDescriptor
) {
val kotlinLibraryVersion = libraryDescriptor.maxVersion
.takeIf {
!useNewSyntax(if (isAndroidModule) "kotlin-android" else KotlinGradleModuleConfigurator.KOTLIN)
}
.let {
if (it == GSK_KOTLIN_VERSION_PROPERTY_NAME) "\$$it" else it
}
scriptFile.getDependenciesBlock()?.apply {
addExpressionIfMissing(
getCompileDependencySnippet(
libraryDescriptor.libraryGroupId,
libraryDescriptor.libraryArtifactId,
scope.toGradleCompileScope(isAndroidModule),
kotlinLibraryVersion
libraryDescriptor.maxVersion,
scope.toGradleCompileScope(module?.getBuildSystemType() == AndroidGradle)
)
)
}
@@ -358,9 +349,6 @@ class KotlinBuildScriptManipulator(
private fun KtBlockExpression.addPluginToClassPathIfMissing(): KtCallExpression? =
addExpressionIfMissing(getKotlinGradlePluginClassPathSnippet()) as? KtCallExpression
fun getKotlinGradlePluginClassPathSnippet(): String =
"classpath(${getKotlinModuleDependencySnippet("gradle-plugin", "\$$GSK_KOTLIN_VERSION_PROPERTY_NAME")})"
private fun KtBlockExpression.addBlock(name: String, first: Boolean = false): KtBlockExpression? {
return psiFactory.createExpression("$name {\n}")
.let { if (first) addAfter(it, null) else add(it) }
@@ -444,6 +432,24 @@ class KotlinBuildScriptManipulator(
private val PsiElement.psiFactory: KtPsiFactory
get() = KtPsiFactory(this)
private fun getCompileDependencySnippet(
groupId: String,
artifactId: String,
version: String?,
compileScope: String = "compile"
): String {
if (groupId != KOTLIN_GROUP_ID) {
return "$compileScope(\"$groupId:$artifactId:$version\")"
}
if (useNewSyntax(if (scriptFile.module?.getBuildSystemType() == AndroidGradle) "kotlin-android" else KotlinGradleModuleConfigurator.KOTLIN)) {
return "$compileScope(${getKotlinModuleDependencySnippet(artifactId)})"
}
val libraryVersion = if (version == GSK_KOTLIN_VERSION_PROPERTY_NAME) "\$$version" else version
return "$compileScope(${getKotlinModuleDependencySnippet(artifactId, libraryVersion)})"
}
companion object {
private val STDLIB_ARTIFACT_PREFIX = "org.jetbrains.kotlin:kotlin-stdlib"
val GSK_KOTLIN_VERSION_PROPERTY_NAME = "kotlin_version"
@@ -459,16 +465,5 @@ class KotlinBuildScriptManipulator(
else -> "kotlinModule(\"$moduleName\", ${"\"$version\""})"
}
}
fun getCompileDependencySnippet(
groupId: String,
artifactId: String,
compileScope: String = "compile",
version: String? = null
): String =
if (groupId == KOTLIN_GROUP_ID)
"$compileScope(${Companion.getKotlinModuleDependencySnippet(artifactId, version)})"
else
"$compileScope(\"$groupId:$artifactId:$version\")"
}
}
@@ -288,8 +288,7 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
return
}
getManipulator(buildScript)
.addKotlinLibraryToModuleBuildScript(scope, libraryDescriptor, module.getBuildSystemType() == AndroidGradle)
getManipulator(buildScript).addKotlinLibraryToModuleBuildScript(scope, libraryDescriptor)
buildScript.virtualFile?.let {
createConfigureKotlinNotificationCollector(buildScript.project)