Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,10 @@ fun File.projectFile(content: String) {
fun String.isAgp9(): Boolean {
return this.startsWith("9.")
}

fun String.supportsLintToolchain(): Boolean {
val parts = split('.')
val major = parts.getOrNull(0)?.toIntOrNull() ?: return false
val minor = parts.getOrNull(1)?.toIntOrNull() ?: return false
return major > 9 || (major == 9 && minor >= 5)
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class CompositeBuildPluginAndroidApp {
| sourceCompatibility = JavaVersion.VERSION_${versions.project.jdk}
| targetCompatibility = JavaVersion.VERSION_${versions.project.jdk}
| }
${lintToolchainDsl(versions)}
| }
| target.extensions.getByType(JavaPluginExtension::class.java).apply {
| toolchain.languageVersion.set(org.gradle.jvm.toolchain.JavaLanguageVersion.of(${versions.project.jdk}))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class CompositeBuildPluginAndroidLib {
|import org.gradle.api.plugins.JavaPluginExtension
|import org.gradle.kotlin.dsl.configure
|import org.gradle.kotlin.dsl.dependencies
${lintToolchainImport(versions)}
|
|class CompositeBuildPluginAndroidLib : Plugin<Project> {
| override fun apply(target: Project) {
Expand Down Expand Up @@ -44,6 +45,7 @@ class CompositeBuildPluginAndroidLib {
| sourceCompatibility = JavaVersion.VERSION_${versions.project.jdk}
| targetCompatibility = JavaVersion.VERSION_${versions.project.jdk}
| }
${lintToolchainDsl(versions)}
| buildFeatures {
| compose = true
| }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.github.cdsap.projectgenerator.generator.plugins.android

import io.github.cdsap.projectgenerator.generator.extension.supportsLintToolchain
import io.github.cdsap.projectgenerator.model.Versions

internal fun lintToolchainImport(versions: Versions): String {
if (!versions.android.agp.supportsLintToolchain()) {
return ""
}
return " |import org.gradle.jvm.toolchain.JavaLanguageVersion\n"
}

internal fun lintToolchainDsl(versions: Versions): String {
if (!versions.android.agp.supportsLintToolchain()) {
return ""
}
return """
lint {
toolchain {
languageVersion.set(JavaLanguageVersion.of(${versions.project.jdk}))
}
}
""".trimStart('\n').trimEnd() + "\n"
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ data class Kotlin(
)

data class Android(
val agp: String = "9.4.1",
val agp: String = "9.5.0",
val agp9: String = "9.0.0-rc02",
val androidxCore: String = "1.19.1",
val appcompat: String = "1.8.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package io.github.cdsap.projectgenerator.generator.plugins.android

import io.github.cdsap.projectgenerator.model.Android
import io.github.cdsap.projectgenerator.model.DependencyInjection
import io.github.cdsap.projectgenerator.model.Project
import io.github.cdsap.projectgenerator.model.Versions
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test

class CompositeBuildPluginAndroidLintToolchainTest {

@Test
fun `agp 9_5 app and lib plugins pin lint to the project jdk`() {
val versions = Versions(
project = Project(jdk = "21"),
android = Android(agp = "9.5.0")
)

val app = CompositeBuildPluginAndroidApp().get(versions, DependencyInjection.NONE)
val lib = CompositeBuildPluginAndroidLib().get(versions, DependencyInjection.NONE)

listOf(app, lib).forEach { content ->
assertTrue(
content.contains("languageVersion.set(JavaLanguageVersion.of(21))"),
"Expected lint toolchain to use project JDK 21:\n$content"
)
assertTrue(content.contains("lint {"), content)
assertTrue(content.contains("toolchain {"), content)
}
}

@Test
fun `agp 9_4 app and lib plugins do not emit lint toolchain dsl`() {
val versions = Versions(
project = Project(jdk = "21"),
android = Android(agp = "9.4.1")
)

val app = CompositeBuildPluginAndroidApp().get(versions, DependencyInjection.NONE)
val lib = CompositeBuildPluginAndroidLib().get(versions, DependencyInjection.NONE)

listOf(app, lib).forEach { content ->
assertFalse(content.contains("lint {"), content)
assertFalse(content.contains("toolchain {"), content)
}
}
}
Loading