From c3cc6cf26e8bdc8034873bfc15e436e98e435274 Mon Sep 17 00:00:00 2001 From: jeppeman Date: Tue, 26 Mar 2024 08:20:12 +0100 Subject: [PATCH] Make compose compiler version configurable --- gradle/libs.versions.toml | 26 +++++++++---------- integration-tests/android/build.gradle.kts | 1 + .../compiler/MockposableCompilerTest.kt | 2 +- .../gradle/MockposableSubPlugin.kt | 8 +++++- .../gradle/MockposableSubPluginExtension.kt | 1 + .../com/jeppeman/mockposable/Mockposable.kt | 7 +++-- 6 files changed, 25 insertions(+), 20 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 39712da..a54f155 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,33 +1,31 @@ [versions] -kotlin = '1.9.22' -compose-ui = '1.5.4' -compose-compiler = '1.5.8' -google-ksp = '1.9.22-1.0.16' +kotlin = '1.9.23' +compose-ui = '1.6.4' +compose-compiler = '1.5.11' +google-ksp = '1.9.23-1.0.19' activity = '1.8.2' -agp = '8.2.1' -espresso = '3.4.0' -hamcrest = '2.2' +agp = '8.2.2' +espresso = '3.5.1' mockk = '1.13.2' mockito = '4.8.1' [libraries] -kotlin-stdlib = { module = 'org.jetbrains.kotlin:kotlin-stdlib-jdk7', version.ref = 'kotlin' } kotlin-gradle = { module = 'org.jetbrains.kotlin:kotlin-gradle-plugin', version.ref = 'kotlin' } kotlin-compiler = { module = 'org.jetbrains.kotlin:kotlin-compiler-embeddable', version.ref = 'kotlin' } androidx-activity = { module = 'androidx.activity:activity', version.ref = 'activity' } -androidx-appcompat = { module = 'androidx.appcompat:appcompat', version = '1.5.1' } +androidx-appcompat = { module = 'androidx.appcompat:appcompat', version = '1.6.1' } androidx-activity-compose = { module = 'androidx.activity:activity-compose', version.ref = 'activity' } -androidx-lifecycle-viewmodel-compose = { module = 'androidx.lifecycle:lifecycle-viewmodel-compose', version = '2.5.1' } -androidx-test-runner = { module = 'androidx.test:runner', version = '1.2.0'} +androidx-lifecycle-viewmodel-compose = { module = 'androidx.lifecycle:lifecycle-viewmodel-compose', version = '2.7.0' } +androidx-test-runner = { module = 'androidx.test:runner', version = '1.5.2'} androidx-test-espresso-core = { module = 'androidx.test.espresso:espresso-core', version.ref = 'espresso' } -androidx-fragment-testing = { module = 'androidx.fragment:fragment-testing', version = '1.5.4' } +androidx-fragment-testing = { module = 'androidx.fragment:fragment-testing', version = '1.6.2' } compose-compiler = { module = 'androidx.compose.compiler:compiler', version.ref = 'compose-compiler' } compose-runtime = { module = 'org.jetbrains.compose.runtime:runtime', version = '1.4.1' } compose-ui = { module = 'androidx.compose.ui:ui', version.ref = 'compose-ui' } -compose-material = { module = 'androidx.compose.material:material', version = '1.4.0' } -compose-foundation = { module = 'androidx.compose.foundation:foundation', version = '1.4.0' } +compose-material = { module = 'androidx.compose.material:material', version = '1.6.4' } +compose-foundation = { module = 'androidx.compose.foundation:foundation', version = '1.6.4' } compose-ui-test-junit4 = { module = 'androidx.compose.ui:ui-test-junit4', version.ref = 'compose-ui' } compose-ui-test-manifest = { module = 'androidx.compose.ui:ui-test-manifest', version.ref = 'compose-ui' } diff --git a/integration-tests/android/build.gradle.kts b/integration-tests/android/build.gradle.kts index 2928777..23fc85b 100644 --- a/integration-tests/android/build.gradle.kts +++ b/integration-tests/android/build.gradle.kts @@ -12,6 +12,7 @@ plugins { mockposable { plugins = listOf(MOCKK, MOCKITO, COMPOSE_UI) + composeCompilerPluginVersion = libs.versions.compose.compiler.get() } android { diff --git a/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt b/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt index 6bf6ab5..5c289af 100644 --- a/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt +++ b/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt @@ -91,7 +91,7 @@ fun compile( val mockposableCommandLineProcessor = MockposableCommandLineProcessor() val composeCommandLineProcessor = ComposeCommandLineProcessor() return KotlinCompilation().apply { - languageVersion = "1.8" + languageVersion = "1.9" sources = sourceFiles commandLineProcessors = listOf(mockposableCommandLineProcessor, composeCommandLineProcessor) componentRegistrars = listOf(ComposePluginRegistrar(), MockposablePlugin()) diff --git a/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt b/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt index 1127d3c..9ebad98 100644 --- a/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt +++ b/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt @@ -59,10 +59,16 @@ class MockposableSubPlugin : KotlinCompilerPluginSupportPlugin { .dependencies .add(project.dependencies.create(COMPOSE_RUNTIME_COORDINATES)) + val composeCompilerDependency = if (extension.composeCompilerPluginVersion.isNotBlank()) { + project.dependencies.create(COMPOSE_COMPILER_COORDINATES.dropLastWhile { it != ':' } + extension.composeCompilerPluginVersion) + } else { + project.dependencies.create(COMPOSE_COMPILER_COORDINATES) + } + project.configurations .getByName(PLUGIN_CLASSPATH_CONFIGURATION_NAME) .dependencies - .add(project.dependencies.create(COMPOSE_COMPILER_COORDINATES)) + .add(composeCompilerDependency) return project.provider { listOf( diff --git a/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPluginExtension.kt b/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPluginExtension.kt index f88cf9c..9c76b29 100644 --- a/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPluginExtension.kt +++ b/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPluginExtension.kt @@ -1,5 +1,6 @@ package com.jeppeman.mockposable.gradle abstract class MockposableSubPluginExtension { + var composeCompilerPluginVersion: String = "" var plugins: List = emptyList() } \ No newline at end of file diff --git a/mockposable/mockposable-runtime/src/main/kotlin/com/jeppeman/mockposable/Mockposable.kt b/mockposable/mockposable-runtime/src/main/kotlin/com/jeppeman/mockposable/Mockposable.kt index 1d97087..ed2eee8 100644 --- a/mockposable/mockposable-runtime/src/main/kotlin/com/jeppeman/mockposable/Mockposable.kt +++ b/mockposable/mockposable-runtime/src/main/kotlin/com/jeppeman/mockposable/Mockposable.kt @@ -13,7 +13,6 @@ object Mockposable { /** * Runs the initial composition of a composable function and returns its result. */ - @Suppress("UNCHECKED_CAST") fun runComposableOneShot(useActiveComposer: Boolean = false, block: @Composable () -> T): T { if (!useActiveComposer || Mockposable.activeComposer == null) { @@ -24,10 +23,10 @@ fun runComposableOneShot(useActiveComposer: Boolean = false, block: @Composa val composition = Composition(UnitApplier, recomposer) composition.setContent { result = block() - composition.dispose() + SideEffect { composition.dispose() } recomposer.close() - /* We're just looking to execute block() and escape as soon as possible. Perhaps - there is a more elegant way of doing this, but this gets the job done. */ + // We're just looking to execute block() and escape as soon as possible. Perhaps + // there is a more elegant way of doing this, but this gets the job done. cancel() } }