KotlinBuildScriptManipulator: cleanup code

This commit is contained in:
Dmitry Gridin
2019-07-15 13:24:51 +03:00
parent b1d1a4b2e1
commit 46dfff7d82
@@ -181,7 +181,12 @@ class KotlinBuildScriptManipulator(
} }
private fun KtBlockExpression.addNoVersionCompileStdlibIfMissing(stdlibArtifactName: String): KtCallExpression? = private fun KtBlockExpression.addNoVersionCompileStdlibIfMissing(stdlibArtifactName: String): KtCallExpression? =
findStdLibDependency() ?: addExpressionIfMissing("implementation(${getKotlinModuleDependencySnippet(stdlibArtifactName, null)})") as? KtCallExpression findStdLibDependency() ?: addExpressionIfMissing(
"implementation(${getKotlinModuleDependencySnippet(
stdlibArtifactName,
null
)})"
) as? KtCallExpression
private fun KtFile.containsCompileStdLib(): Boolean = private fun KtFile.containsCompileStdLib(): Boolean =
findScriptInitializer("dependencies")?.getBlock()?.findStdLibDependency() != null findScriptInitializer("dependencies")?.getBlock()?.findStdLibDependency() != null
@@ -233,15 +238,14 @@ class KotlinBuildScriptManipulator(
} }
private fun KtScriptInitializer.getBlock(): KtBlockExpression? = private fun KtScriptInitializer.getBlock(): KtBlockExpression? =
PsiTreeUtil.findChildOfType<KtCallExpression>(this, KtCallExpression::class.java)?.getBlock() PsiTreeUtil.findChildOfType(this, KtCallExpression::class.java)?.getBlock()
private fun KtCallExpression.getBlock(): KtBlockExpression? = private fun KtCallExpression.getBlock(): KtBlockExpression? =
(valueArguments.singleOrNull()?.getArgumentExpression() as? KtLambdaExpression)?.bodyExpression (valueArguments.singleOrNull()?.getArgumentExpression() as? KtLambdaExpression)?.bodyExpression
private fun KtFile.getKotlinStdlibVersion(): String? { private fun KtFile.getKotlinStdlibVersion(): String? {
return findScriptInitializer("dependencies")?.getBlock()?.let { return findScriptInitializer("dependencies")?.getBlock()?.let {
val expression = it.findStdLibDependency()?.valueArguments?.firstOrNull()?.getArgumentExpression() when (val expression = it.findStdLibDependency()?.valueArguments?.firstOrNull()?.getArgumentExpression()) {
when (expression) {
is KtCallExpression -> expression.valueArguments.getOrNull(1)?.text?.trim('\"') is KtCallExpression -> expression.valueArguments.getOrNull(1)?.text?.trim('\"')
is KtStringTemplateExpression -> expression.text?.trim('\"')?.substringAfterLast(":")?.removePrefix("$") is KtStringTemplateExpression -> expression.text?.trim('\"')?.substringAfterLast(":")?.removePrefix("$")
else -> null else -> null
@@ -267,17 +271,13 @@ class KotlinBuildScriptManipulator(
else -> false else -> false
} }
private fun KtFile.getPluginManagementBlock(): KtBlockExpression? = private fun KtFile.getPluginManagementBlock(): KtBlockExpression? = findOrCreateScriptInitializer("pluginManagement", true)
findScriptInitializer("pluginManagement")?.getBlock() ?: addTopLevelBlock("pluginManagement", true)
private fun KtFile.getRepositoriesBlock(): KtBlockExpression? = private fun KtFile.getRepositoriesBlock(): KtBlockExpression? = findOrCreateScriptInitializer("repositories")
findScriptInitializer("repositories")?.getBlock() ?: addTopLevelBlock("repositories")
private fun KtFile.getDependenciesBlock(): KtBlockExpression? = private fun KtFile.getDependenciesBlock(): KtBlockExpression? = findOrCreateScriptInitializer("dependencies")
findScriptInitializer("dependencies")?.getBlock() ?: addTopLevelBlock("dependencies")
private fun KtFile.getPluginsBlock(): KtBlockExpression? = private fun KtFile.getPluginsBlock(): KtBlockExpression? = findOrCreateScriptInitializer("plugins", true)
findScriptInitializer("plugins")?.getBlock() ?: addTopLevelBlock("plugins", true)
private fun KtFile.createPluginInPluginsGroupIfMissing(pluginName: String, version: String): KtCallExpression? = private fun KtFile.createPluginInPluginsGroupIfMissing(pluginName: String, version: String): KtCallExpression? =
getPluginsBlock()?.let { getPluginsBlock()?.let {
@@ -300,7 +300,7 @@ class KotlinBuildScriptManipulator(
private fun KtFile.changeCoroutineConfiguration(coroutineOption: String): PsiElement? { private fun KtFile.changeCoroutineConfiguration(coroutineOption: String): PsiElement? {
val snippet = "experimental.coroutines = Coroutines.${coroutineOption.toUpperCase()}" val snippet = "experimental.coroutines = Coroutines.${coroutineOption.toUpperCase()}"
val kotlinBlock = findScriptInitializer("kotlin")?.getBlock() ?: addTopLevelBlock("kotlin") ?: return null val kotlinBlock = findOrCreateScriptInitializer("kotlin") ?: return null
addImportIfMissing("org.jetbrains.kotlin.gradle.dsl.Coroutines") addImportIfMissing("org.jetbrains.kotlin.gradle.dsl.Coroutines")
val statement = kotlinBlock.statements.find { it.text.startsWith("experimental.coroutines") } val statement = kotlinBlock.statements.find { it.text.startsWith("experimental.coroutines") }
return if (statement != null) { return if (statement != null) {
@@ -363,14 +363,14 @@ class KotlinBuildScriptManipulator(
} }
} }
private fun KtFile.getBuildScriptBlock(): KtBlockExpression? = private fun KtFile.getBuildScriptBlock(): KtBlockExpression? = findOrCreateScriptInitializer("buildscript", true)
findScriptInitializer("buildscript")?.getBlock() ?: addTopLevelBlock("buildscript", true)
private fun KtBlockExpression.getRepositoriesBlock(): KtBlockExpression? = private fun KtFile.findOrCreateScriptInitializer(name: String, first: Boolean = false): KtBlockExpression? =
findBlock("repositories") ?: addBlock("repositories") findScriptInitializer(name)?.getBlock() ?: addTopLevelBlock(name, first)
private fun KtBlockExpression.getDependenciesBlock(): KtBlockExpression? = private fun KtBlockExpression.getRepositoriesBlock(): KtBlockExpression? = findOrCreateBlock("repositories")
findBlock("dependencies") ?: addBlock("dependencies")
private fun KtBlockExpression.getDependenciesBlock(): KtBlockExpression? = findOrCreateBlock("dependencies")
private fun KtBlockExpression.addRepositoryIfMissing(version: String): KtCallExpression? { private fun KtBlockExpression.addRepositoryIfMissing(version: String): KtCallExpression? {
val snippet = getRepositorySnippet(version) ?: return null val snippet = getRepositorySnippet(version) ?: return null
@@ -433,9 +433,7 @@ class KotlinBuildScriptManipulator(
) as KtImportDirective ) as KtImportDirective
private fun KtBlockExpression.addExpressionAfterIfMissing(text: String, after: PsiElement): KtExpression = addStatementIfMissing(text) { private fun KtBlockExpression.addExpressionAfterIfMissing(text: String, after: PsiElement): KtExpression = addStatementIfMissing(text) {
psiFactory.createExpression(it).let { created -> addAfter(psiFactory.createExpression(it), after)
addAfter(created, after)
}
} }
private fun KtBlockExpression.addExpressionIfMissing(text: String, first: Boolean = false): KtExpression = addStatementIfMissing(text) { private fun KtBlockExpression.addExpressionIfMissing(text: String, first: Boolean = false): KtExpression = addStatementIfMissing(text) {
@@ -494,8 +492,8 @@ class KotlinBuildScriptManipulator(
} }
companion object { companion object {
private val STDLIB_ARTIFACT_PREFIX = "org.jetbrains.kotlin:kotlin-stdlib" private const val STDLIB_ARTIFACT_PREFIX = "org.jetbrains.kotlin:kotlin-stdlib"
val GSK_KOTLIN_VERSION_PROPERTY_NAME = "kotlin_version" const val GSK_KOTLIN_VERSION_PROPERTY_NAME = "kotlin_version"
fun getKotlinGradlePluginClassPathSnippet(): String = fun getKotlinGradlePluginClassPathSnippet(): String =
"classpath(${getKotlinModuleDependencySnippet("gradle-plugin", "\$$GSK_KOTLIN_VERSION_PROPERTY_NAME")})" "classpath(${getKotlinModuleDependencySnippet("gradle-plugin", "\$$GSK_KOTLIN_VERSION_PROPERTY_NAME")})"