Skip to content

Commit

Permalink
Support modifying 'setting.gradle.kts' as well.
Browse files Browse the repository at this point in the history
Test dsl will update 'settings.gradle.kts' with required plugin
management block.

^KT-45745 In Progress
  • Loading branch information
Tapchicoma authored and Space committed Dec 7, 2021
1 parent d1bbf66 commit 01332a2
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,79 @@ internal val DEFAULT_GROOVY_SETTINGS_FILE =
repositories {
mavenLocal()
mavenCentral()
google()
gradlePluginPortal()
}
plugins {
id "org.jetbrains.kotlin.jvm" version "${'$'}kotlin_version"
id "org.jetbrains.kotlin.kapt" version "${'$'}kotlin_version"
id "org.jetbrains.kotlin.android" version "${'$'}kotlin_version"
id "org.jetbrains.kotlin.js" version "${'$'}kotlin_version"
id "org.jetbrains.kotlin.multiplatform" version "${'$'}kotlin_version"
id "org.jetbrains.kotlin.test.fixes.android" version "${'$'}kotlin_version"
}
resolutionStrategy {
eachPlugin {
switch (requested.id.id) {
case "com.android.application":
case "com.android.library":
case "com.android.test":
case "com.android.dynamic-feature":
case "com.android.asset-pack":
case "com.android.asset-pack-bundle":
case "com.android.lint":
case "com.android.instantapp":
case "com.android.feature":
useModule("com.android.tools.build:gradle:${'$'}android_tools_version")
break
case "kotlin-dce-js":
useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version")
break
}
}
}
}
""".trimIndent()

@Language("kts")
internal val DEFAULT_KOTLIN_SETTINGS_FILE =
"""
pluginManagement {
repositories {
mavenLocal()
mavenCentral()
google()
gradlePluginPortal()
}
val kotlin_version: String by settings
val android_tools_version: String by settings
plugins {
id("org.jetbrains.kotlin.jvm") version kotlin_version
id("org.jetbrains.kotlin.kapt") version kotlin_version
id("org.jetbrains.kotlin.android") version kotlin_version
id("org.jetbrains.kotlin.js") version kotlin_version
id("org.jetbrains.kotlin.multiplatform") version kotlin_version
id("org.jetbrains.kotlin.test.fixes.android") version kotlin_version
}
resolutionStrategy {
eachPlugin {
when (requested.id.id) {
"com.android.application",
"com.android.library",
"com.android.test",
"com.android.dynamic-feature",
"com.android.asset-pack",
"com.android.asset-pack-bundle",
"com.android.lint",
"com.android.instantapp",
"com.android.feature" -> useModule("com.android.tools.build:gradle:${'$'}android_tools_version")
"kotlin-dce-js" -> useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${'$'}kotlin_version")
}
}
}
}
""".trimIndent()
Original file line number Diff line number Diff line change
Expand Up @@ -231,26 +231,41 @@ private fun setupProjectFromTestResources(
}

private fun Path.addDefaultBuildFiles() {
if (Files.exists(resolve("build.gradle"))) {
val settingsFile = resolve("settings.gradle")
if (!Files.exists(settingsFile)) {
settingsFile.toFile().writeText(DEFAULT_GROOVY_SETTINGS_FILE)
} else {
val settingsContent = settingsFile.toFile().readText()
if (!settingsContent
.lines()
.first { !it.startsWith("//") }
.startsWith("pluginManagement {")
) {
settingsFile.toFile().writeText(
"""
$DEFAULT_GROOVY_SETTINGS_FILE
$settingsContent
""".trimIndent()
)
addPluginManagementToSettings()

val buildSrc = resolve("buildSrc")
if (Files.exists(buildSrc)) {
buildSrc.addPluginManagementToSettings()
}
}

internal fun Path.addPluginManagementToSettings() {
val settingsGradle = resolve("settings.gradle")
val settingsGradleKts = resolve("settings.gradle.kts")
when {
Files.exists(settingsGradle) -> settingsGradle.modify {
if (!it.contains("pluginManagement {")) {
"""
|$DEFAULT_GROOVY_SETTINGS_FILE
|
|$it
|""".trimMargin()
} else {
it
}
}
Files.exists(settingsGradleKts) -> settingsGradleKts.modify {
if (!it.contains("pluginManagement {")) {
"""
|$DEFAULT_KOTLIN_SETTINGS_FILE
|
|$it
""".trimMargin()
} else {
it
}
}
else -> settingsGradle.toFile().writeText(DEFAULT_GROOVY_SETTINGS_FILE)
}
}

Expand Down

0 comments on commit 01332a2

Please sign in to comment.