Skip to content

Commit 85129e4

Browse files
Kotlin 2.0.0 (#1036)
* 🚧 Kotlin 2.0.0-Beta4 * Testing useKSP2 useK2Uast * KSP 2.0.0-Beta4-1.0.19 * Update lint 8.4.0-alpha13 * 2.0.0-Beta5 * Lint 8.5.0-alpha02 * Update libs.versions.toml * Update libs.versions.toml * 🤖 Updates baselines for Dependency Guard * KSP `2.0.0-Beta5-1.0.20` * 2.0.0-RC1 * lint 8.5.0-alpha06 * Kotlin 2.0.0-RC2 * Lint 8.5.0-alpha07 * Fix missing imports * Migrate from deprecated `kotlinOptions` to `composeCompiler` * Kotlin 2.0.0-RC3 and AGP 8.6.0-alpha01 * Kotlin 2.0.0 & KSP 2.0.0-1.0.21 * Add `.kotlin` directory to `.gitignore` * Migrate from deprecated kotlinOptions to compilerOptions * Restore main workflow * Migrate from deprecated kotlinOptions to compilerOptions * Restore relative directories for Compose compiler metrics & reports --------- Co-authored-by: Don Turner <[email protected]>
1 parent 8a15a61 commit 85129e4

File tree

12 files changed

+70
-84
lines changed

12 files changed

+70
-84
lines changed

.github/dependabot.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@ updates:
1212
registries: "*"
1313
labels: [ "version update" ]
1414
groups:
15-
kotlin-ksp-compose:
15+
kotlin-ksp:
1616
patterns:
1717
- "org.jetbrains.kotlin:*"
1818
- "org.jetbrains.kotlin.jvm"
1919
- "com.google.devtools.ksp"
20-
- "androidx.compose.compiler:compiler"
2120
open-pull-requests-limit: 10
2221
registries:
2322
maven-google:

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,6 @@ _sandbox
4343

4444
# Android Studio captures folder
4545
captures/
46+
47+
# Kotlin
48+
.kotlin

app-nia-catalog/dependencies/releaseRuntimeClasspath.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ io.coil-kt:coil-compose-base:2.6.0
109109
io.coil-kt:coil-compose:2.6.0
110110
io.coil-kt:coil:2.6.0
111111
javax.inject:javax.inject:1
112-
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23
112+
org.jetbrains.kotlin:kotlin-stdlib-common:2.0.0
113113
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0
114114
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0
115-
org.jetbrains.kotlin:kotlin-stdlib:1.9.23
115+
org.jetbrains.kotlin:kotlin-stdlib:2.0.0
116116
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3
117117
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3
118118
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3

app/dependencies/prodReleaseRuntimeClasspath.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,10 @@ io.coil-kt:coil-svg:2.6.0
206206
io.coil-kt:coil:2.6.0
207207
javax.inject:javax.inject:1
208208
org.checkerframework:checker-qual:3.12.0
209-
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23
209+
org.jetbrains.kotlin:kotlin-stdlib-common:2.0.0
210210
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0
211211
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0
212-
org.jetbrains.kotlin:kotlin-stdlib:1.9.23
212+
org.jetbrains.kotlin:kotlin-stdlib:2.0.0
213213
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0
214214
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0
215215
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0

build-logic/convention/build.gradle.kts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
1718
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
1819

1920
plugins {
@@ -28,15 +29,17 @@ java {
2829
sourceCompatibility = JavaVersion.VERSION_17
2930
targetCompatibility = JavaVersion.VERSION_17
3031
}
31-
tasks.withType<KotlinCompile>().configureEach {
32-
kotlinOptions {
33-
jvmTarget = JavaVersion.VERSION_17.toString()
32+
33+
kotlin {
34+
compilerOptions {
35+
jvmTarget = JvmTarget.JVM_17
3436
}
3537
}
3638

3739
dependencies {
3840
compileOnly(libs.android.gradlePlugin)
3941
compileOnly(libs.android.tools.common)
42+
compileOnly(libs.compose.gradlePlugin)
4043
compileOnly(libs.firebase.crashlytics.gradlePlugin)
4144
compileOnly(libs.firebase.performance.gradlePlugin)
4245
compileOnly(libs.kotlin.gradlePlugin)

build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ import com.android.build.api.dsl.ApplicationExtension
1818
import com.google.samples.apps.nowinandroid.configureAndroidCompose
1919
import org.gradle.api.Plugin
2020
import org.gradle.api.Project
21+
import org.gradle.kotlin.dsl.apply
2122
import org.gradle.kotlin.dsl.getByType
2223

2324
class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
2425
override fun apply(target: Project) {
2526
with(target) {
26-
pluginManager.apply("com.android.application")
27+
apply(plugin = "com.android.application")
28+
apply(plugin = "org.jetbrains.kotlin.plugin.compose")
2729

2830
val extension = extensions.getByType<ApplicationExtension>()
2931
configureAndroidCompose(extension)

build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ import com.android.build.gradle.LibraryExtension
1818
import com.google.samples.apps.nowinandroid.configureAndroidCompose
1919
import org.gradle.api.Plugin
2020
import org.gradle.api.Project
21-
import org.gradle.kotlin.dsl.dependencies
21+
import org.gradle.kotlin.dsl.apply
2222
import org.gradle.kotlin.dsl.getByType
23-
import org.gradle.kotlin.dsl.kotlin
2423

2524
class AndroidLibraryComposeConventionPlugin : Plugin<Project> {
2625
override fun apply(target: Project) {
2726
with(target) {
28-
pluginManager.apply("com.android.library")
27+
apply(plugin = "com.android.library")
28+
apply(plugin = "org.jetbrains.kotlin.plugin.compose")
2929

3030
val extension = extensions.getByType<LibraryExtension>()
3131
configureAndroidCompose(extension)

build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt

Lines changed: 19 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ package com.google.samples.apps.nowinandroid
1818

1919
import com.android.build.api.dsl.CommonExtension
2020
import org.gradle.api.Project
21+
import org.gradle.api.provider.Provider
22+
import org.gradle.kotlin.dsl.assign
23+
import org.gradle.kotlin.dsl.configure
2124
import org.gradle.kotlin.dsl.dependencies
22-
import org.gradle.kotlin.dsl.withType
23-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
25+
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
2426

2527
/**
2628
* Configure Compose-specific options
@@ -33,10 +35,6 @@ internal fun Project.configureAndroidCompose(
3335
compose = true
3436
}
3537

36-
composeOptions {
37-
kotlinCompilerExtensionVersion = libs.findVersion("androidxComposeCompiler").get().toString()
38-
}
39-
4038
dependencies {
4139
val bom = libs.findLibrary("androidx-compose-bom").get()
4240
add("implementation", platform(bom))
@@ -53,48 +51,22 @@ internal fun Project.configureAndroidCompose(
5351
}
5452
}
5553

56-
tasks.withType<KotlinCompile>().configureEach {
57-
kotlinOptions {
58-
freeCompilerArgs += buildComposeMetricsParameters()
59-
freeCompilerArgs += stabilityConfiguration()
60-
freeCompilerArgs += strongSkippingConfiguration()
61-
}
62-
}
63-
}
54+
extensions.configure<ComposeCompilerGradlePluginExtension> {
55+
fun Provider<String>.onlyIfTrue() = flatMap { provider { it.takeIf(String::toBoolean) } }
56+
fun Provider<*>.relativeToRootProject(dir: String) = flatMap {
57+
rootProject.layout.buildDirectory.dir(projectDir.toRelativeString(rootDir))
58+
}.map { it.dir(dir) }
6459

65-
private fun Project.buildComposeMetricsParameters(): List<String> {
66-
val metricParameters = mutableListOf<String>()
67-
val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics")
68-
val relativePath = projectDir.relativeTo(rootDir)
69-
val buildDir = layout.buildDirectory.get().asFile
70-
val enableMetrics = (enableMetricsProvider.orNull == "true")
71-
if (enableMetrics) {
72-
val metricsFolder = buildDir.resolve("compose-metrics").resolve(relativePath)
73-
metricParameters.add("-P")
74-
metricParameters.add(
75-
"plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath,
76-
)
77-
}
60+
project.providers.gradleProperty("enableComposeCompilerMetrics").onlyIfTrue()
61+
.relativeToRootProject("compose-metrics")
62+
.let(metricsDestination::set)
7863

79-
val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports")
80-
val enableReports = (enableReportsProvider.orNull == "true")
81-
if (enableReports) {
82-
val reportsFolder = buildDir.resolve("compose-reports").resolve(relativePath)
83-
metricParameters.add("-P")
84-
metricParameters.add(
85-
"plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath
86-
)
87-
}
64+
project.providers.gradleProperty("enableComposeCompilerReports").onlyIfTrue()
65+
.relativeToRootProject("compose-reports")
66+
.let(reportsDestination::set)
8867

89-
return metricParameters.toList()
68+
stabilityConfigurationFile = rootProject.layout.projectDirectory.file("compose_compiler_config.conf")
69+
70+
enableStrongSkippingMode = true
71+
}
9072
}
91-
92-
private fun Project.stabilityConfiguration() = listOf(
93-
"-P",
94-
"plugin:androidx.compose.compiler.plugins.kotlin:stabilityConfigurationPath=${project.rootDir.absolutePath}/compose_compiler_config.conf",
95-
)
96-
97-
private fun Project.strongSkippingConfiguration() = listOf(
98-
"-P",
99-
"plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true",
100-
)

build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@ import com.android.build.api.dsl.CommonExtension
2020
import org.gradle.api.JavaVersion
2121
import org.gradle.api.Project
2222
import org.gradle.api.plugins.JavaPluginExtension
23+
import org.gradle.kotlin.dsl.assign
2324
import org.gradle.kotlin.dsl.configure
2425
import org.gradle.kotlin.dsl.dependencies
2526
import org.gradle.kotlin.dsl.provideDelegate
26-
import org.gradle.kotlin.dsl.withType
27-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
27+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
28+
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
29+
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
30+
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension
2831

2932
/**
3033
* Configure base Kotlin with Android options
@@ -48,7 +51,7 @@ internal fun Project.configureKotlinAndroid(
4851
}
4952
}
5053

51-
configureKotlin()
54+
configureKotlin<KotlinAndroidProjectExtension>()
5255

5356
dependencies {
5457
add("coreLibraryDesugaring", libs.findLibrary("android.desugarJdkLibs").get())
@@ -66,26 +69,26 @@ internal fun Project.configureKotlinJvm() {
6669
targetCompatibility = JavaVersion.VERSION_11
6770
}
6871

69-
configureKotlin()
72+
configureKotlin<KotlinJvmProjectExtension>()
7073
}
7174

7275
/**
7376
* Configure base Kotlin options
7477
*/
75-
private fun Project.configureKotlin() {
76-
// Use withType to workaround https://youtrack.jetbrains.com/issue/KT-55947
77-
tasks.withType<KotlinCompile>().configureEach {
78-
kotlinOptions {
79-
// Set JVM target to 11
80-
jvmTarget = JavaVersion.VERSION_11.toString()
81-
// Treat all Kotlin warnings as errors (disabled by default)
82-
// Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties
83-
val warningsAsErrors: String? by project
84-
allWarningsAsErrors = warningsAsErrors.toBoolean()
85-
freeCompilerArgs = freeCompilerArgs + listOf(
86-
// Enable experimental coroutines APIs, including Flow
87-
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
88-
)
89-
}
78+
private inline fun <reified T : KotlinTopLevelExtension> Project.configureKotlin() = configure<T> {
79+
// Treat all Kotlin warnings as errors (disabled by default)
80+
// Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties
81+
val warningsAsErrors: String? by project
82+
when (this) {
83+
is KotlinAndroidProjectExtension -> compilerOptions
84+
is KotlinJvmProjectExtension -> compilerOptions
85+
else -> TODO("Unsupported project extension $this ${T::class}")
86+
}.apply {
87+
jvmTarget = JvmTarget.JVM_11
88+
allWarningsAsErrors = warningsAsErrors.toBoolean()
89+
freeCompilerArgs.add(
90+
// Enable experimental coroutines APIs, including Flow
91+
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
92+
)
9093
}
9194
}

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ plugins {
3636
alias(libs.plugins.android.library) apply false
3737
alias(libs.plugins.android.test) apply false
3838
alias(libs.plugins.baselineprofile) apply false
39+
alias(libs.plugins.compose) apply false
3940
alias(libs.plugins.kotlin.jvm) apply false
4041
alias(libs.plugins.kotlin.serialization) apply false
4142
alias(libs.plugins.dependencyGuard) apply false

0 commit comments

Comments
 (0)