From 08093edfcefb45fa3cc928c48ea8366120140478 Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 4 Jan 2024 03:50:52 -0500 Subject: [PATCH 01/22] Support K2. --- .gitignore | 1 + build.gradle.kts | 11 +++ gradle/libs.versions.toml | 4 +- .../api/validator/fir/KotlinFirLoader.kt | 6 +- .../bytecode/ApplySourceMapToBytecodeTest.kt | 4 +- .../app/cash/zipline/cli/GenerateKeyPair.kt | 2 +- .../app/cash/zipline/cli/DownloadTest.kt | 2 +- .../cash/zipline/gradle/ZiplineCompiler.kt | 4 +- .../app/cash/zipline/gradle/ZiplinePlugin.kt | 2 +- .../cash/zipline/gradle/jsProductionTasks.kt | 5 +- .../zipline/gradle/ZiplineCompilerTest.kt | 4 +- .../gradle/ZiplineGradleDownloaderTest.kt | 2 +- .../zipline/gradle/ZiplineGradlePluginTest.kt | 2 +- zipline-kotlin-plugin/build.gradle.kts | 11 +++ .../app/cash/zipline/kotlin/ZiplineApis.kt | 16 +++-- .../kotlin/ZiplineCompilerPluginRegistrar.kt | 2 +- .../cash/zipline/loader/ManifestVerifier.kt | 2 +- .../app/cash/zipline/loader/ZiplineLoader.kt | 2 +- .../loader/ProductionFetcherReceiverTest.kt | 2 +- .../cash/zipline/loader/ZiplineLoaderTest.kt | 2 +- .../cash/zipline/profiler/ProfilerClock.kt | 4 +- .../cash/zipline/profiler/ProfilerClockJvm.kt | 2 +- .../zipline/profiler/ProfilerClockUnix.kt | 2 +- zipline-testing/build.gradle.kts | 15 +++-- .../zipline/testing/ZiplineTestInternals.kt | 67 ++++++++++--------- .../app/cash/zipline/testing/suspendingJs.kt | 4 ++ .../app/cash/zipline/QuickJsNativeLoader.kt | 2 +- .../cash/zipline/internal/bridge/Endpoint.kt | 2 + .../internal/bridge/ZiplineServiceAdapter.kt | 4 +- .../cash/zipline/internal/signaturePayload.kt | 2 +- .../kotlin/app/cash/zipline/QuickJs.kt | 2 + .../app/cash/zipline/QuickJsNativeLoader.kt | 2 +- 32 files changed, 115 insertions(+), 79 deletions(-) diff --git a/.gitignore b/.gitignore index f769ce1d76..2bf071913b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ reports jacoco.exec .externalNativeBuild .cxx +.kotlin # iOS *.pbxuser diff --git a/build.gradle.kts b/build.gradle.kts index 3baac810de..40bc09c69f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -153,6 +153,17 @@ allprojects { plugins.withId("org.jetbrains.kotlin.multiplatform") { configure { jvmToolchain(11) + + targets.configureEach { + compilations.configureEach { + compilerOptions.configure { + freeCompilerArgs.addAll( + // https://youtrack.jetbrains.com/issue/KT-61573 + "-Xexpect-actual-classes", + ) + } + } + } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bff28a23a3..1361cc68d6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,10 +3,10 @@ androidx-compose = "1.5.4" androidx-compose-compiler = "1.5.7" compileSdk = "34" http4k = "4.48.0.0" -kotlin = "1.9.21" +kotlin = "2.0.0-Beta2" kotlinx-coroutines = "1.7.3" kotlinx-serialization = "1.6.2" -ksp = "1.9.21-1.0.16" +ksp = "2.0.0-Beta2-1.0.16" okHttp = "4.12.0" okio = "3.7.0" minSdk = "18" diff --git a/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt b/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt index 168f7485db..2b8bcf18c4 100644 --- a/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt +++ b/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment -import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.ModuleCompilerEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.ModuleCompilerInput import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.compileModuleToAnalyzedFir import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots @@ -136,10 +135,7 @@ internal class KotlinFirLoader( return compileModuleToAnalyzedFir( input = input, - environment = ModuleCompilerEnvironment( - projectEnvironment = projectEnvironment, - diagnosticsReporter = reporter, - ), + projectEnvironment = projectEnvironment, previousStepsSymbolProviders = emptyList(), incrementalExcludesScope = null, diagnosticsReporter = reporter, diff --git a/zipline-bytecode/src/test/kotlin/app/cash/zipline/bytecode/ApplySourceMapToBytecodeTest.kt b/zipline-bytecode/src/test/kotlin/app/cash/zipline/bytecode/ApplySourceMapToBytecodeTest.kt index eca19a2a98..4db9c472d2 100644 --- a/zipline-bytecode/src/test/kotlin/app/cash/zipline/bytecode/ApplySourceMapToBytecodeTest.kt +++ b/zipline-bytecode/src/test/kotlin/app/cash/zipline/bytecode/ApplySourceMapToBytecodeTest.kt @@ -40,7 +40,7 @@ class ApplySourceMapToBytecodeTest { ) @Before - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. fun setUp() { // Configure QuickJS to support module loading. app.cash.zipline.internal.initModuleLoader(quickJs) @@ -222,7 +222,7 @@ class ApplySourceMapToBytecodeTest { assertThat(quickJs.evaluate("doubleToDisplayString('1000.0')")).isEqualTo("1000.0") } - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. private fun loadJsModule(id: String, bytecode: ByteArray) { app.cash.zipline.internal.loadJsModule(quickJs, id, bytecode) } diff --git a/zipline-cli/src/main/kotlin/app/cash/zipline/cli/GenerateKeyPair.kt b/zipline-cli/src/main/kotlin/app/cash/zipline/cli/GenerateKeyPair.kt index f84504339c..07408aad99 100644 --- a/zipline-cli/src/main/kotlin/app/cash/zipline/cli/GenerateKeyPair.kt +++ b/zipline-cli/src/main/kotlin/app/cash/zipline/cli/GenerateKeyPair.kt @@ -33,7 +33,7 @@ class GenerateKeyPair( .default(Ed25519) .help("Signing algorithm to use.") - @Suppress("INVISIBLE_MEMBER") // Access :zipline-loader internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline-loader internals. override fun run() { val keyPair = app.cash.zipline.loader.internal.generateKeyPair(algorithm) out.println( diff --git a/zipline-cli/src/test/kotlin/app/cash/zipline/cli/DownloadTest.kt b/zipline-cli/src/test/kotlin/app/cash/zipline/cli/DownloadTest.kt index 65feb414e3..fa0a5aab8f 100644 --- a/zipline-cli/src/test/kotlin/app/cash/zipline/cli/DownloadTest.kt +++ b/zipline-cli/src/test/kotlin/app/cash/zipline/cli/DownloadTest.kt @@ -101,7 +101,7 @@ class DownloadTest { assertTrue(fileSystem.exists(tmpDirPath / testFixtures.alphaSha256Hex)) } - @Suppress("INVISIBLE_MEMBER") // Access :zipline-loader internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline-loader internals. private fun getApplicationManifestFileName(applicationName: String) = app.cash.zipline.loader.internal.getApplicationManifestFileName(applicationName) diff --git a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplineCompiler.kt b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplineCompiler.kt index 2c648d1917..e8196ba97d 100644 --- a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplineCompiler.kt +++ b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplineCompiler.kt @@ -162,10 +162,10 @@ internal class ZiplineCompiler( private fun getJsFiles(files: List) = files.filter { it.path.endsWith(".js") } - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. private val manifestFileName = app.cash.zipline.loader.internal.MANIFEST_FILE_NAME - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. private fun collectDependencies(quickJs: QuickJs, bytecode: ByteArray): List { app.cash.zipline.internal.collectModuleDependencies(quickJs) quickJs.execute(bytecode) diff --git a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplinePlugin.kt b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplinePlugin.kt index f6b6c47352..7c28f67269 100644 --- a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplinePlugin.kt +++ b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/ZiplinePlugin.kt @@ -218,7 +218,7 @@ class ZiplinePlugin : KotlinCompilerPluginSupportPlugin { } } - @Suppress("INVISIBLE_MEMBER") // Access :zipline-loader internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline-loader internals. private fun generateKeyPair(algorithm: SignatureAlgorithmId) { val logger = LoggerFactory.getLogger(ZiplinePlugin::class.java) val keyPair = app.cash.zipline.loader.internal.generateKeyPair(algorithm) diff --git a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt index 2ebce218c8..4f654216b4 100644 --- a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt +++ b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt @@ -16,7 +16,6 @@ package app.cash.zipline.gradle import java.io.File -import org.gradle.api.internal.provider.DefaultProvider import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary @@ -49,7 +48,7 @@ internal fun JsIrBinary.asJsProductionTask(): JsProductionTask { override val targetName get() = target.name override val toolName = null override val mode get() = this@asJsProductionTask.mode - override val outputFile get() = linkTask.map { it.outputFileProperty.get() } + override val outputFile get() = linkTask.map { it.destinationDirectory.get().asFile } } } @@ -64,6 +63,6 @@ internal fun KotlinWebpack.asJsProductionTask(): JsProductionTask { name.endsWith("ProductionWebpack") -> KotlinJsBinaryMode.PRODUCTION else -> error("unexpected KotlinWebpack task name: $name") } - override val outputFile get() = DefaultProvider { this@asJsProductionTask.outputFile } + override val outputFile get() = mainOutputFile.map { it.asFile } } } diff --git a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineCompilerTest.kt b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineCompilerTest.kt index eb28ee006d..b0c7ac0cb2 100644 --- a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineCompilerTest.kt +++ b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineCompilerTest.kt @@ -37,7 +37,7 @@ class ZiplineCompilerTest { private val quickJs = QuickJs.create() @Before - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. fun setUp() { // Configure QuickJS to support module loading. app.cash.zipline.internal.initModuleLoader(quickJs) @@ -224,7 +224,7 @@ class ZiplineCompilerTest { return result } - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. private fun loadJsModule(quickJs: QuickJs, id: String, bytecode: ByteArray) { return app.cash.zipline.internal.loadJsModule(quickJs, id, bytecode) } diff --git a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradleDownloaderTest.kt b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradleDownloaderTest.kt index 142b605797..3c99bcddf7 100644 --- a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradleDownloaderTest.kt +++ b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradleDownloaderTest.kt @@ -100,7 +100,7 @@ class ZiplineGradleDownloaderTest { ) } - @Suppress("INVISIBLE_MEMBER") // Access :zipline-loader internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline-loader internals. private fun getApplicationManifestFileName(applicationName: String) = app.cash.zipline.loader.internal.getApplicationManifestFileName(applicationName) } diff --git a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt index 2d393cb0d7..e2d3da1e99 100644 --- a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt +++ b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt @@ -535,7 +535,7 @@ class ZiplineGradlePluginTest { val SUCCESS_OUTCOMES = listOf(TaskOutcome.SUCCESS, TaskOutcome.UP_TO_DATE) val versionProperty = "-PziplineVersion=${System.getProperty("ziplineVersion")}" - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. private val manifestFileName = app.cash.zipline.loader.internal.MANIFEST_FILE_NAME } } diff --git a/zipline-kotlin-plugin/build.gradle.kts b/zipline-kotlin-plugin/build.gradle.kts index 04cf0f8376..a13cfeb4e5 100644 --- a/zipline-kotlin-plugin/build.gradle.kts +++ b/zipline-kotlin-plugin/build.gradle.kts @@ -1,6 +1,7 @@ import com.vanniktech.maven.publish.JavadocJar import com.vanniktech.maven.publish.KotlinJvm import com.vanniktech.maven.publish.MavenPublishBaseExtension +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") @@ -33,3 +34,13 @@ configure { ) ) } + +tasks { + withType().configureEach { + compilerOptions { + freeCompilerArgs.addAll( + "-opt-in=org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI" + ) + } + } +} diff --git a/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt b/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt index 0e3c7b5458..0f9e4632b4 100644 --- a/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt +++ b/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt @@ -204,12 +204,16 @@ internal class ZiplineApis( /** Maps overloads from the user-friendly function to its internal rewrite target. */ private fun rewritePair(funName: CallableId): Pair { val overloads = pluginContext.referenceFunctions(funName) - val rewriteTarget = overloads.single { - it.owner.valueParameters.lastOrNull()?.type?.getClass()?.classId == ziplineServiceAdapterClassId - } - val original = overloads.single { - it.owner.valueParameters.size + 1 == rewriteTarget.owner.valueParameters.size + try { + val rewriteTarget = overloads.single { + it.owner.valueParameters.lastOrNull()?.type?.getClass()?.classId == ziplineServiceAdapterClassId + } + val original = overloads.single { + it.owner.valueParameters.size + 1 == rewriteTarget.owner.valueParameters.size + } + return original.toString() to rewriteTarget + } catch (e: Exception) { + throw Exception(overloads.toString()) } - return original.toString() to rewriteTarget } } diff --git a/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineCompilerPluginRegistrar.kt b/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineCompilerPluginRegistrar.kt index 00469d435b..1eaf360a9a 100644 --- a/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineCompilerPluginRegistrar.kt +++ b/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineCompilerPluginRegistrar.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration @OptIn(ExperimentalCompilerApi::class) @AutoService(CompilerPluginRegistrar::class) class ZiplineCompilerPluginRegistrar : CompilerPluginRegistrar() { - override val supportsK2 get() = false + override val supportsK2 get() = true override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) { val messageCollector = configuration.get( diff --git a/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ManifestVerifier.kt b/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ManifestVerifier.kt index 419b841249..58b0ad0e86 100644 --- a/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ManifestVerifier.kt +++ b/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ManifestVerifier.kt @@ -44,7 +44,7 @@ class ManifestVerifier private constructor( * @throws IllegalStateException if no trusted signature is found, or if a signature doesn't * verify. */ - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. fun verify(manifestBytes: ByteString, manifest: ZiplineManifest): String? { if (!doSignatureChecks) return null diff --git a/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ZiplineLoader.kt b/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ZiplineLoader.kt index ae1a16ea32..a396d5c57c 100644 --- a/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ZiplineLoader.kt +++ b/zipline-loader/src/commonMain/kotlin/app/cash/zipline/loader/ZiplineLoader.kt @@ -378,7 +378,7 @@ class ZiplineLoader internal constructor( * After identifying a manifest to load this fetches all the code, loads it into a JS runtime, * and runs both the user's initializer and the manifest's specified main function. */ - @Suppress("INVISIBLE_MEMBER") // Access :zipline internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. internal suspend fun loadFromManifest( applicationName: String, eventListener: EventListener, diff --git a/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ProductionFetcherReceiverTest.kt b/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ProductionFetcherReceiverTest.kt index f5f2c5a69d..8575178928 100644 --- a/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ProductionFetcherReceiverTest.kt +++ b/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ProductionFetcherReceiverTest.kt @@ -137,7 +137,7 @@ class ProductionFetcherReceiverTest { assertEquals(testFixtures.alphaByteString, ziplineFileFromCache) } - @Suppress("INVISIBLE_MEMBER") // Access :zipline-loader internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline-loader internals. private fun getLog() = app.cash.zipline.internal.getLog(zipline.quickJs) private suspend fun ZiplineLoader.loadOrFail( diff --git a/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ZiplineLoaderTest.kt b/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ZiplineLoaderTest.kt index e06780e637..fb743c7756 100644 --- a/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ZiplineLoaderTest.kt +++ b/zipline-loader/src/commonTest/kotlin/app/cash/zipline/loader/ZiplineLoaderTest.kt @@ -410,7 +410,7 @@ class ZiplineLoaderTest { } } - @Suppress("INVISIBLE_MEMBER") // Access :zipline-loader internals. + @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline-loader internals. private fun Zipline.getLog(): String? = app.cash.zipline.internal.getLog(quickJs) private suspend fun ZiplineLoader.loadOrFail( diff --git a/zipline-profiler/src/commonMain/kotlin/app/cash/zipline/profiler/ProfilerClock.kt b/zipline-profiler/src/commonMain/kotlin/app/cash/zipline/profiler/ProfilerClock.kt index 2cf0187f6c..3fd6213f37 100644 --- a/zipline-profiler/src/commonMain/kotlin/app/cash/zipline/profiler/ProfilerClock.kt +++ b/zipline-profiler/src/commonMain/kotlin/app/cash/zipline/profiler/ProfilerClock.kt @@ -19,4 +19,6 @@ internal interface ProfilerClock { val nanoTime: Long } -internal expect object DefaultProfilerClock : ProfilerClock +internal expect object DefaultProfilerClock : ProfilerClock { + override val nanoTime: Long +} diff --git a/zipline-profiler/src/jvmMain/kotlin/app/cash/zipline/profiler/ProfilerClockJvm.kt b/zipline-profiler/src/jvmMain/kotlin/app/cash/zipline/profiler/ProfilerClockJvm.kt index 23e908d9af..4979c81185 100644 --- a/zipline-profiler/src/jvmMain/kotlin/app/cash/zipline/profiler/ProfilerClockJvm.kt +++ b/zipline-profiler/src/jvmMain/kotlin/app/cash/zipline/profiler/ProfilerClockJvm.kt @@ -16,5 +16,5 @@ package app.cash.zipline.profiler internal actual object DefaultProfilerClock : ProfilerClock { - override val nanoTime: Long get() = System.nanoTime() + actual override val nanoTime: Long get() = System.nanoTime() } diff --git a/zipline-profiler/src/nativeMain/kotlin/app/cash/zipline/profiler/ProfilerClockUnix.kt b/zipline-profiler/src/nativeMain/kotlin/app/cash/zipline/profiler/ProfilerClockUnix.kt index 2ba409c91a..0410fa2416 100644 --- a/zipline-profiler/src/nativeMain/kotlin/app/cash/zipline/profiler/ProfilerClockUnix.kt +++ b/zipline-profiler/src/nativeMain/kotlin/app/cash/zipline/profiler/ProfilerClockUnix.kt @@ -16,5 +16,5 @@ package app.cash.zipline.profiler internal actual object DefaultProfilerClock : ProfilerClock { - override val nanoTime: Long get() = kotlin.system.getTimeNanos() + actual override val nanoTime: Long get() = kotlin.system.getTimeNanos() } diff --git a/zipline-testing/build.gradle.kts b/zipline-testing/build.gradle.kts index 0d2619a96c..abb564b577 100644 --- a/zipline-testing/build.gradle.kts +++ b/zipline-testing/build.gradle.kts @@ -1,4 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile import org.jetbrains.kotlin.gradle.plugin.PLUGIN_CLASSPATH_CONFIGURATION_NAME import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile @@ -69,19 +68,23 @@ kotlin { tasks { // https://kotlinlang.org/docs/whatsnew19.html#library-linkage-in-kotlin-native - withType().all { - kotlinOptions { - freeCompilerArgs += listOf("-Xpartial-linkage-loglevel=ERROR") + withType().configureEach { + compilerOptions { + freeCompilerArgs.addAll("-Xpartial-linkage-loglevel=ERROR") } } // https://youtrack.jetbrains.com/issue/KT-56025 // https://youtrack.jetbrains.com/issue/KT-57203 - named("jsBrowserProductionWebpack").configure { + findByName("jsBrowserProductionWebpack")?.apply { dependsOn(named("jsProductionLibraryCompileSync")) dependsOn(named("jsDevelopmentLibraryCompileSync")) } - named("jsBrowserProductionLibraryPrepare").configure { + findByName("jsBrowserProductionLibraryPrepare")?.apply { + dependsOn(named("jsProductionExecutableCompileSync")) + dependsOn(named("jsDevelopmentLibraryCompileSync")) + } + findByName("jsBrowserProductionLibraryDistribution")?.apply { dependsOn(named("jsProductionExecutableCompileSync")) dependsOn(named("jsDevelopmentLibraryCompileSync")) } diff --git a/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt b/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt index 76df5e69c1..f6c42deaeb 100644 --- a/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt +++ b/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt @@ -27,7 +27,6 @@ package app.cash.zipline.testing import app.cash.zipline.ZiplineFunction import app.cash.zipline.ZiplineScope -import app.cash.zipline.ZiplineService import app.cash.zipline.internal.bridge.Endpoint import app.cash.zipline.internal.bridge.OutboundCallHandler import app.cash.zipline.internal.bridge.OutboundService @@ -97,40 +96,40 @@ object ZiplineTestInternals { /** Simulate a generated subclass of ZiplineServiceAdapter. */ class EchoServiceAdapter : ZiplineServiceAdapter() { - val simpleName: String + override val simpleName: String get() = "EchoService" - val serialName: String + override val serialName: String get() = "app.cash.zipline.kotlin.EchoService" - val serializers: List> + override val serializers: List> get() = emptyList() override fun ziplineFunctions( serializersModule: SerializersModule, - ): List> { + ): List> { val requestSerializer = serializersModule.serializer(echoRequestKt) as KSerializer<*> val responseSerializer = serializersModule.serializer(echoResponseKt) as KSerializer<*> val name = "fun echo(app.cash.zipline.testing.EchoRequest): app.cash.zipline.testing.EchoResponse" - return listOf>( - object : ReturningZiplineFunction( + return listOf>( + object : ReturningZiplineFunction( name.signatureHash(), name, listOf(requestSerializer), responseSerializer, ) { - override fun call(service: ZiplineService, args: List<*>): Any { - return (service as EchoService).echo(args[0] as EchoRequest) + override fun call(service: EchoService, args: List<*>): Any { + return service.echo(args[0] as EchoRequest) } }, ) } - override fun outboundService(callHandler: OutboundCallHandler): ZiplineService { + override fun outboundService(callHandler: OutboundCallHandler): EchoService { return GeneratedOutboundService(callHandler) } private class GeneratedOutboundService( - val callHandler: OutboundCallHandler, + override val callHandler: OutboundCallHandler, ) : EchoService, OutboundService { override fun echo(request: EchoRequest): EchoResponse { @@ -141,39 +140,40 @@ object ZiplineTestInternals { /** Simulate a generated subclass of ZiplineServiceAdapter. */ class GenericEchoServiceAdapter : ZiplineServiceAdapter>() { - val simpleName: String + override val simpleName: String get() = "GenericEchoService" - val serialName: String + override val serialName: String get() = "app.cash.zipline.kotlin.GenericEchoService" - val serializers: List> + override val serializers: List> get() = emptyList() override fun ziplineFunctions( serializersModule: SerializersModule, - ): List> { + ): List>> { val requestSerializer = serializersModule.serializer(stringKt) as KSerializer<*> val responseSerializer = serializersModule.serializer(listOfStringKt) as KSerializer<*> val name = "fun genericEcho(T): kotlin.collections.List" - return listOf>( - object : ReturningZiplineFunction( + return listOf>>( + object : ReturningZiplineFunction>( name.signatureHash(), name, listOf(requestSerializer), responseSerializer, ) { - override fun call(service: ZiplineService, args: List<*>): Any { - return (service as GenericEchoService).genericEcho(args[0] as String) + override fun call(service: GenericEchoService, args: List<*>): Any { + return service.genericEcho(args[0] as String) } }, ) } - override fun outboundService(callHandler: OutboundCallHandler): ZiplineService { + override fun outboundService(callHandler: OutboundCallHandler): GenericEchoService { return GeneratedOutboundService(callHandler) } - private class GeneratedOutboundService(val callHandler: OutboundCallHandler) : - GenericEchoService, OutboundService { + private class GeneratedOutboundService( + override val callHandler: OutboundCallHandler, + ) : GenericEchoService, OutboundService { override fun genericEcho(request: String): List { return callHandler.call(this, 0, request) as List @@ -183,40 +183,41 @@ object ZiplineTestInternals { /** Simulate a generated subclass of ZiplineServiceAdapter. */ class EchoZiplineServiceAdapter : ZiplineServiceAdapter() { - val simpleName: String + override val simpleName: String get() = "EchoService" - val serialName: String + override val serialName: String get() = "app.cash.zipline.kotlin.EchoZiplineService" - val serializers: List> + override val serializers: List> get() = emptyList() override fun ziplineFunctions( serializersModule: SerializersModule, - ): List> { + ): List> { val requestSerializer = serializersModule.serializer(echoRequestKt) as KSerializer<*> val responseSerializer = serializersModule.serializer(echoResponseKt) as KSerializer<*> val name = "fun echo(app.cash.zipline.testing.EchoRequest): app.cash.zipline.testing.EchoResponse" - return listOf>( - object : ReturningZiplineFunction( + return listOf>( + object : ReturningZiplineFunction( name.signatureHash(), name, listOf(requestSerializer), responseSerializer, ) { - override fun call(service: ZiplineService, args: List<*>): Any { - return (service as EchoZiplineService).echo(args[0] as EchoRequest) + override fun call(service: EchoZiplineService, args: List<*>): Any { + return service.echo(args[0] as EchoRequest) } }, ) } - override fun outboundService(callHandler: OutboundCallHandler): ZiplineService { + override fun outboundService(callHandler: OutboundCallHandler): EchoZiplineService { return GeneratedOutboundService(callHandler) } - private class GeneratedOutboundService(val callHandler: OutboundCallHandler) : - EchoZiplineService, OutboundService { + private class GeneratedOutboundService( + override val callHandler: OutboundCallHandler, + ) : EchoZiplineService, OutboundService { override fun echo(request: EchoRequest): EchoResponse { return callHandler.call(this, 0, request) as EchoResponse diff --git a/zipline-testing/src/jsMain/kotlin/app/cash/zipline/testing/suspendingJs.kt b/zipline-testing/src/jsMain/kotlin/app/cash/zipline/testing/suspendingJs.kt index 293a2636e6..17b432815e 100644 --- a/zipline-testing/src/jsMain/kotlin/app/cash/zipline/testing/suspendingJs.kt +++ b/zipline-testing/src/jsMain/kotlin/app/cash/zipline/testing/suspendingJs.kt @@ -13,10 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:OptIn(ExperimentalJsExport::class) + package app.cash.zipline.testing import app.cash.zipline.Zipline import kotlinx.coroutines.CoroutineStart +import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex @@ -49,6 +52,7 @@ fun unblockSuspendingJs() { mutex.unlock() } +@OptIn(DelicateCoroutinesApi::class) @JsExport fun callSuspendingEchoService(message: String) { val service = zipline.take("jvmSuspendingEchoService") diff --git a/zipline/src/androidMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt b/zipline/src/androidMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt index a88fb2e3f3..d80b794052 100644 --- a/zipline/src/androidMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt +++ b/zipline/src/androidMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt @@ -15,6 +15,6 @@ */ package app.cash.zipline -internal fun loadNativeLibrary() { +internal actual fun loadNativeLibrary() { System.loadLibrary("quickjs") } diff --git a/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt b/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt index 3e5eaac356..778044a352 100644 --- a/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt +++ b/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt @@ -233,4 +233,6 @@ internal class Endpoint internal constructor( open fun callEnd(call: Call, result: CallResult, startValue: Any?) { } } + + internal companion object } diff --git a/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/ZiplineServiceAdapter.kt b/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/ZiplineServiceAdapter.kt index a49abbb1ce..611129cee9 100644 --- a/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/ZiplineServiceAdapter.kt +++ b/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/ZiplineServiceAdapter.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:OptIn(ExperimentalSerializationApi::class) // Zipline must track ContextualSerializer API changes. + package app.cash.zipline.internal.bridge import app.cash.zipline.ZiplineFunction @@ -29,7 +31,6 @@ import kotlinx.serialization.modules.SerializersModule * Adapts [ZiplineService] implementations to receive incoming and send outgoing calls. Most * implementations are generated. */ -@OptIn(ExperimentalSerializationApi::class) // Zipline must track ContextualSerializer API changes. @PublishedApi internal abstract class ZiplineServiceAdapter : KSerializer { private val contextualSerializer = ContextualSerializer(PassByReference::class) @@ -83,7 +84,6 @@ internal fun ziplineServiceAdapter( * key to identify a serializer for [typeName] that has [serializers] for its type arguments. */ @PublishedApi -@OptIn(ExperimentalSerializationApi::class) // Zipline must track ContextualSerializer API changes. internal fun serialName(typeName: String, serializers: List>): String { return buildString { append(typeName) diff --git a/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt b/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt index f99f7f4bc8..9ce619bbd8 100644 --- a/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt +++ b/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt @@ -101,7 +101,7 @@ internal fun signaturePayload(manifest: JsonElement): JsonElement { return JsonObject(newContent) } -internal fun signaturePayload(manifestJson: String): String { +fun signaturePayload(manifestJson: String): String { val jsonElement = Json.parseToJsonElement(manifestJson) val signaturePayload = signaturePayload(jsonElement) return Json.encodeToString(JsonElement.serializer(), signaturePayload) diff --git a/zipline/src/jniMain/kotlin/app/cash/zipline/QuickJs.kt b/zipline/src/jniMain/kotlin/app/cash/zipline/QuickJs.kt index 78b8632480..a79b5e2aef 100644 --- a/zipline/src/jniMain/kotlin/app/cash/zipline/QuickJs.kt +++ b/zipline/src/jniMain/kotlin/app/cash/zipline/QuickJs.kt @@ -174,3 +174,5 @@ actual class QuickJs private constructor( private external fun gc(context: Long) private external fun setMaxStackSize(context: Long, stackSize: Long) } + +internal expect fun loadNativeLibrary() diff --git a/zipline/src/jvmMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt b/zipline/src/jvmMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt index b26900f6f9..dbeea79cb1 100644 --- a/zipline/src/jvmMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt +++ b/zipline/src/jvmMain/kotlin/app/cash/zipline/QuickJsNativeLoader.kt @@ -22,7 +22,7 @@ import java.nio.file.StandardCopyOption.REPLACE_EXISTING import java.util.Locale.US @Suppress("UnsafeDynamicallyLoadedCode") // Only loading from our own JAR contents. -internal fun loadNativeLibrary() { +internal actual fun loadNativeLibrary() { val osName = System.getProperty("os.name").lowercase(US) val osArch = System.getProperty("os.arch").lowercase(US) val nativeLibraryJarPath = if (osName.contains("linux")) { From 3b8b375b1a3afb9e54db264198cc835cbd8a4186 Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 4 Jan 2024 03:52:10 -0500 Subject: [PATCH 02/22] Revert. --- .../app/cash/zipline/kotlin/ZiplineApis.kt | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt b/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt index 0f9e4632b4..0e3c7b5458 100644 --- a/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt +++ b/zipline-kotlin-plugin/src/main/kotlin/app/cash/zipline/kotlin/ZiplineApis.kt @@ -204,16 +204,12 @@ internal class ZiplineApis( /** Maps overloads from the user-friendly function to its internal rewrite target. */ private fun rewritePair(funName: CallableId): Pair { val overloads = pluginContext.referenceFunctions(funName) - try { - val rewriteTarget = overloads.single { - it.owner.valueParameters.lastOrNull()?.type?.getClass()?.classId == ziplineServiceAdapterClassId - } - val original = overloads.single { - it.owner.valueParameters.size + 1 == rewriteTarget.owner.valueParameters.size - } - return original.toString() to rewriteTarget - } catch (e: Exception) { - throw Exception(overloads.toString()) + val rewriteTarget = overloads.single { + it.owner.valueParameters.lastOrNull()?.type?.getClass()?.classId == ziplineServiceAdapterClassId + } + val original = overloads.single { + it.owner.valueParameters.size + 1 == rewriteTarget.owner.valueParameters.size } + return original.toString() to rewriteTarget } } From 379a8ba8cfd29714d804866c64526a3db2972079 Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 4 Jan 2024 03:55:40 -0500 Subject: [PATCH 03/22] Revert. --- .../kotlin/app/cash/zipline/internal/signaturePayload.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt b/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt index 9ce619bbd8..f99f7f4bc8 100644 --- a/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt +++ b/zipline/src/hostMain/kotlin/app/cash/zipline/internal/signaturePayload.kt @@ -101,7 +101,7 @@ internal fun signaturePayload(manifest: JsonElement): JsonElement { return JsonObject(newContent) } -fun signaturePayload(manifestJson: String): String { +internal fun signaturePayload(manifestJson: String): String { val jsonElement = Json.parseToJsonElement(manifestJson) val signaturePayload = signaturePayload(jsonElement) return Json.encodeToString(JsonElement.serializer(), signaturePayload) From 2bf8e3eb7adc9c24e43cb14b3289b8b209412dd5 Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 4 Jan 2024 12:43:58 -0500 Subject: [PATCH 04/22] Update API. --- zipline/api/android/zipline.api | 36 +++++++++++++++++++-------------- zipline/api/jvm/zipline.api | 36 +++++++++++++++++++-------------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/zipline/api/android/zipline.api b/zipline/api/android/zipline.api index 4e4269184d..32c6cd6db6 100644 --- a/zipline/api/android/zipline.api +++ b/zipline/api/android/zipline.api @@ -204,6 +204,7 @@ public abstract interface class app/cash/zipline/ZiplineFunction { public final class app/cash/zipline/ZiplineManifest { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Companion; + public synthetic fun (ILapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public synthetic fun (Lapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lapp/cash/zipline/ZiplineManifest$Unsigned; public final fun component2 ()Ljava/util/Map; @@ -233,15 +234,16 @@ public final class app/cash/zipline/ZiplineManifest { public final fun getVersion ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; + public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public final class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public synthetic class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$$serializer; - public fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -257,6 +259,7 @@ public final class app/cash/zipline/ZiplineManifest$Companion { public final class app/cash/zipline/ZiplineManifest$Module { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Module$Companion; + public synthetic fun (ILjava/lang/String;Lokio/ByteString;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;)V public synthetic fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; @@ -270,15 +273,16 @@ public final class app/cash/zipline/ZiplineManifest$Module { public final fun getUrl ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; + public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Module;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public final class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public synthetic class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Module$$serializer; - public fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -290,6 +294,7 @@ public final class app/cash/zipline/ZiplineManifest$Module$Companion { public final class app/cash/zipline/ZiplineManifest$Unsigned { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Unsigned$Companion; public fun ()V + public synthetic fun (ILjava/util/Map;Ljava/lang/Long;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;)V public synthetic fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/util/Map; @@ -303,15 +308,16 @@ public final class app/cash/zipline/ZiplineManifest$Unsigned { public final fun getSignatures ()Ljava/util/Map; public fun hashCode ()I public fun toString ()Ljava/lang/String; + public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Unsigned;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public final class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public synthetic class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Unsigned$$serializer; - public fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } diff --git a/zipline/api/jvm/zipline.api b/zipline/api/jvm/zipline.api index 4e4269184d..32c6cd6db6 100644 --- a/zipline/api/jvm/zipline.api +++ b/zipline/api/jvm/zipline.api @@ -204,6 +204,7 @@ public abstract interface class app/cash/zipline/ZiplineFunction { public final class app/cash/zipline/ZiplineManifest { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Companion; + public synthetic fun (ILapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public synthetic fun (Lapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lapp/cash/zipline/ZiplineManifest$Unsigned; public final fun component2 ()Ljava/util/Map; @@ -233,15 +234,16 @@ public final class app/cash/zipline/ZiplineManifest { public final fun getVersion ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; + public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public final class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public synthetic class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$$serializer; - public fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -257,6 +259,7 @@ public final class app/cash/zipline/ZiplineManifest$Companion { public final class app/cash/zipline/ZiplineManifest$Module { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Module$Companion; + public synthetic fun (ILjava/lang/String;Lokio/ByteString;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;)V public synthetic fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; @@ -270,15 +273,16 @@ public final class app/cash/zipline/ZiplineManifest$Module { public final fun getUrl ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; + public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Module;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public final class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public synthetic class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Module$$serializer; - public fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -290,6 +294,7 @@ public final class app/cash/zipline/ZiplineManifest$Module$Companion { public final class app/cash/zipline/ZiplineManifest$Unsigned { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Unsigned$Companion; public fun ()V + public synthetic fun (ILjava/util/Map;Ljava/lang/Long;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;)V public synthetic fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/util/Map; @@ -303,15 +308,16 @@ public final class app/cash/zipline/ZiplineManifest$Unsigned { public final fun getSignatures ()Ljava/util/Map; public fun hashCode ()I public fun toString ()Ljava/lang/String; + public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Unsigned;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public final class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public synthetic class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Unsigned$$serializer; - public fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; + public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V + public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } From 5f96c9ad15d064d9a77ffb888cbd7889f177ee4c Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 4 Jan 2024 17:39:35 -0500 Subject: [PATCH 05/22] Use deprecated API. --- .../main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt index 4f654216b4..2ebce218c8 100644 --- a/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt +++ b/zipline-gradle-plugin/src/main/kotlin/app/cash/zipline/gradle/jsProductionTasks.kt @@ -16,6 +16,7 @@ package app.cash.zipline.gradle import java.io.File +import org.gradle.api.internal.provider.DefaultProvider import org.gradle.api.provider.Provider import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary @@ -48,7 +49,7 @@ internal fun JsIrBinary.asJsProductionTask(): JsProductionTask { override val targetName get() = target.name override val toolName = null override val mode get() = this@asJsProductionTask.mode - override val outputFile get() = linkTask.map { it.destinationDirectory.get().asFile } + override val outputFile get() = linkTask.map { it.outputFileProperty.get() } } } @@ -63,6 +64,6 @@ internal fun KotlinWebpack.asJsProductionTask(): JsProductionTask { name.endsWith("ProductionWebpack") -> KotlinJsBinaryMode.PRODUCTION else -> error("unexpected KotlinWebpack task name: $name") } - override val outputFile get() = mainOutputFile.map { it.asFile } + override val outputFile get() = DefaultProvider { this@asJsProductionTask.outputFile } } } From 6f8a83c5c88f07d7f2b762d344286221fb8dfbfd Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 11 Jan 2024 22:18:41 -0800 Subject: [PATCH 06/22] Add comments. --- zipline-testing/build.gradle.kts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/zipline-testing/build.gradle.kts b/zipline-testing/build.gradle.kts index abb564b577..78ed36f5e1 100644 --- a/zipline-testing/build.gradle.kts +++ b/zipline-testing/build.gradle.kts @@ -76,14 +76,17 @@ tasks { // https://youtrack.jetbrains.com/issue/KT-56025 // https://youtrack.jetbrains.com/issue/KT-57203 + // Required for K1. findByName("jsBrowserProductionWebpack")?.apply { dependsOn(named("jsProductionLibraryCompileSync")) dependsOn(named("jsDevelopmentLibraryCompileSync")) } + // Required for K1. findByName("jsBrowserProductionLibraryPrepare")?.apply { dependsOn(named("jsProductionExecutableCompileSync")) dependsOn(named("jsDevelopmentLibraryCompileSync")) } + // Required for K2. findByName("jsBrowserProductionLibraryDistribution")?.apply { dependsOn(named("jsProductionExecutableCompileSync")) dependsOn(named("jsDevelopmentLibraryCompileSync")) From 3ac667a119db350f74a90950c8dcdacb9048588b Mon Sep 17 00:00:00 2001 From: Colin White Date: Thu, 11 Jan 2024 23:15:35 -0800 Subject: [PATCH 07/22] Move dependencies. --- zipline/build.gradle.kts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/zipline/build.gradle.kts b/zipline/build.gradle.kts index 892550afac..1c31ccc36b 100644 --- a/zipline/build.gradle.kts +++ b/zipline/build.gradle.kts @@ -92,6 +92,13 @@ kotlin { } val androidInstrumentedTest by getting { dependsOn(hostTest) + dependencies { + implementation(libs.assertk) + implementation(libs.junit) + implementation(libs.androidx.test.runner) + implementation(libs.kotlinx.coroutines.test) + implementation(projects.ziplineTesting) + } } val jvmMain by getting { dependsOn(jniMain) @@ -280,14 +287,6 @@ android { } } -dependencies { - androidTestImplementation(libs.assertk) - androidTestImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.runner) - androidTestImplementation(libs.kotlinx.coroutines.test) - androidTestImplementation(projects.ziplineTesting) -} - fun quickJsVersion(): String { return File(projectDir, "native/quickjs/VERSION").readText().trim() } From b25837f7bbd6574ad4d2d4dfd8647802e96cda53 Mon Sep 17 00:00:00 2001 From: Colin White Date: Fri, 12 Jan 2024 12:53:49 -0800 Subject: [PATCH 08/22] Temporarily ignore tests so we don't spin on CI. --- .../app/cash/zipline/gradle/ZiplineGradlePluginTest.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt index e2d3da1e99..a060f9189c 100644 --- a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt +++ b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt @@ -25,6 +25,7 @@ import assertk.assertions.isTrue import java.io.File import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome +import org.junit.Ignore import org.junit.Test class ZiplineGradlePluginTest { @@ -70,6 +71,7 @@ class ZiplineGradlePluginTest { * - IR rewriting in JS and JVM * - Compiling to .zipline files and producing a manifest */ + @Ignore("Temporarily ignore as this gets stuck.") @Test fun endToEnd() { val projectDir = File("src/test/projects/basic") @@ -85,6 +87,7 @@ class ZiplineGradlePluginTest { * Stack traces in this mode have no line numbers and no function names. Class names like * 'Exception' are mangled into meaningless names like 'Ab'. */ + @Ignore("Temporarily ignore as this gets stuck.") @Test fun stacktraceWithOptimizeForSmallArtifactSize() { val projectDir = File("src/test/projects/crash") @@ -112,6 +115,7 @@ class ZiplineGradlePluginTest { * retained across Webpack minification. (Some JavaScript stack trace elements don't have line * numbers). */ + @Ignore("Temporarily ignore as this gets stuck.") @Test fun stacktraceWithOptimizeForDeveloperExperience() { val projectDir = File("src/test/projects/crash") @@ -138,6 +142,7 @@ class ZiplineGradlePluginTest { * Stack traces in this mode have line numbers and function names. These are built without any * Webpack minification. (Some JavaScript stack trace elements don't have line numbers). */ + @Ignore("Temporarily ignore as this gets stuck.") @Test fun stacktraceWithDevelopmentBuild() { val projectDir = File("src/test/projects/crash") From 91b17bf1ac22e6102439ad3abbb09a1642a79d50 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 00:53:34 -0800 Subject: [PATCH 09/22] Deprecations. --- zipline/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zipline/build.gradle.kts b/zipline/build.gradle.kts index 1c31ccc36b..83b7818896 100644 --- a/zipline/build.gradle.kts +++ b/zipline/build.gradle.kts @@ -23,7 +23,7 @@ plugins { val copyTestingJs = tasks.register("copyTestingJs") { dependsOn(":zipline-testing:compileDevelopmentLibraryKotlinJs") - destinationDir = buildDir.resolve("generated/testingJs") + destinationDir = layout.buildDirectory.asFile.get().resolve("generated/testingJs") from(rootDir.resolve("zipline-testing/build/compileSync/js/main/developmentLibrary/kotlin")) } tasks.withType().configureEach { @@ -148,6 +148,7 @@ kotlin { } } + @Suppress("DEPRECATION") targets.all { compilations.all { // Naming logic from https://github.com/JetBrains/kotlin/blob/a0e6fb03f0288f0bff12be80c402d8a62b5b045a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt#L519-L520 From c586742728a9ba05817b4c2d9635e68f96a01dd4 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 01:21:07 -0800 Subject: [PATCH 10/22] Fix assembleAndroidTest. --- zipline/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zipline/build.gradle.kts b/zipline/build.gradle.kts index 83b7818896..7d946c949a 100644 --- a/zipline/build.gradle.kts +++ b/zipline/build.gradle.kts @@ -91,12 +91,13 @@ kotlin { dependsOn(jniMain) } val androidInstrumentedTest by getting { - dependsOn(hostTest) + kotlin.srcDir("src/hostTest/kotlin/") dependencies { implementation(libs.assertk) implementation(libs.junit) implementation(libs.androidx.test.runner) implementation(libs.kotlinx.coroutines.test) + implementation(kotlin("test")) implementation(projects.ziplineTesting) } } @@ -108,6 +109,7 @@ kotlin { kotlin.srcDir("src/jniTest/kotlin/") resources.srcDir(copyTestingJs) dependencies { + implementation(libs.junit) implementation(projects.ziplineTesting) } } From 7c5f5acf41a78ea60c69e25f374867f8dd6c01d8 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 01:24:27 -0800 Subject: [PATCH 11/22] Unused dependency. --- gradle/libs.versions.toml | 1 - samples/world-clock/android/build.gradle.kts | 1 - 2 files changed, 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7c09ae63a2..739442a262 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,7 +33,6 @@ auto-service-compiler = { module = "dev.zacsweers.autoservice:auto-service-ksp", auto-service-annotations = { module = "com.google.auto.service:auto-service-annotations", version = "1.1.1" } binary-compatibility-validator-gradle-plugin = { module = "org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin", version = "0.13.2" } cklib-gradle-plugin = { module = "co.touchlab:cklib-gradle-plugin", version = "0.3.0" } -coil-compose = { module = "io.coil-kt:coil-compose", version = "2.5.0" } dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.10" } duktape = { module = "com.squareup.duktape:duktape-android", version = "1.4.0" } http4k-core = { module = "org.http4k:http4k-core", version.ref = "http4k" } diff --git a/samples/world-clock/android/build.gradle.kts b/samples/world-clock/android/build.gradle.kts index 7a035fca83..9f7bf2ff0d 100644 --- a/samples/world-clock/android/build.gradle.kts +++ b/samples/world-clock/android/build.gradle.kts @@ -62,7 +62,6 @@ dependencies { implementation(libs.androidx.appCompat) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle) - implementation(libs.coil.compose) implementation(libs.androidx.compose.material) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.tooling.preview) From b6e06bbbdb1a49c5e0d9ab47ed101c424a25a43b Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:11:26 -0800 Subject: [PATCH 12/22] Run tests against K2. --- gradle/libs.versions.toml | 8 ++--- .../api/validator/fir/KotlinFirLoader.kt | 6 +++- .../zipline/gradle/ZiplineGradlePluginTest.kt | 30 +++++++++++++------ .../projects/android/lib/build.gradle.kts | 11 +++++++ .../test/projects/basic/lib/build.gradle.kts | 10 +++++++ .../test/projects/crash/lib/build.gradle.kts | 10 +++++++ .../projects/jvmOnly/lib/build.gradle.kts | 10 +++++++ .../multipleJsTargets/lib/build.gradle.kts | 10 +++++++ .../projects/signing/lib/build.gradle.kts | 10 +++++++ 9 files changed, 91 insertions(+), 14 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 739442a262..ed957d10a6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,16 +1,16 @@ [versions] androidx-compose = "1.5.4" -androidx-compose-compiler = "1.5.7" +androidx-compose-compiler = "1.5.8" compileSdk = "34" http4k = "4.48.0.0" -kotlin = "2.0.0-Beta2" +kotlin = "1.9.22" kotlinx-coroutines = "1.7.3" kotlinx-serialization = "1.6.2" -ksp = "2.0.0-Beta2-1.0.16" +ksp = "1.9.22-1.0.16" okHttp = "4.12.0" okio = "3.7.0" minSdk = "18" -sqldelight = "2.0.0" +sqldelight = "2.0.1" [libraries] android-desugarJdkLibs = { module = "com.android.tools:desugar_jdk_libs", version = "2.0.4" } diff --git a/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt b/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt index 2b8bcf18c4..168f7485db 100644 --- a/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt +++ b/zipline-api-validator/src/main/kotlin/app/cash/zipline/api/validator/fir/KotlinFirLoader.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment +import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.ModuleCompilerEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.ModuleCompilerInput import org.jetbrains.kotlin.cli.jvm.compiler.pipeline.compileModuleToAnalyzedFir import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots @@ -135,7 +136,10 @@ internal class KotlinFirLoader( return compileModuleToAnalyzedFir( input = input, - projectEnvironment = projectEnvironment, + environment = ModuleCompilerEnvironment( + projectEnvironment = projectEnvironment, + diagnosticsReporter = reporter, + ), previousStepsSymbolProviders = emptyList(), incrementalExcludesScope = null, diagnosticsReporter = reporter, diff --git a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt index a060f9189c..6c7f8c0438 100644 --- a/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt +++ b/zipline-gradle-plugin/src/test/kotlin/app/cash/zipline/gradle/ZiplineGradlePluginTest.kt @@ -25,10 +25,15 @@ import assertk.assertions.isTrue import java.io.File import org.gradle.testkit.runner.GradleRunner import org.gradle.testkit.runner.TaskOutcome -import org.junit.Ignore import org.junit.Test - -class ZiplineGradlePluginTest { +import org.junit.runner.RunWith +import org.junit.runners.Parameterized +import org.junit.runners.Parameterized.Parameters + +@RunWith(Parameterized::class) +class ZiplineGradlePluginTest( + private val enableK2: Boolean, +) { @Test fun productionBuilds() { val projectDir = File("src/test/projects/basic") @@ -71,7 +76,6 @@ class ZiplineGradlePluginTest { * - IR rewriting in JS and JVM * - Compiling to .zipline files and producing a manifest */ - @Ignore("Temporarily ignore as this gets stuck.") @Test fun endToEnd() { val projectDir = File("src/test/projects/basic") @@ -87,7 +91,6 @@ class ZiplineGradlePluginTest { * Stack traces in this mode have no line numbers and no function names. Class names like * 'Exception' are mangled into meaningless names like 'Ab'. */ - @Ignore("Temporarily ignore as this gets stuck.") @Test fun stacktraceWithOptimizeForSmallArtifactSize() { val projectDir = File("src/test/projects/crash") @@ -115,7 +118,6 @@ class ZiplineGradlePluginTest { * retained across Webpack minification. (Some JavaScript stack trace elements don't have line * numbers). */ - @Ignore("Temporarily ignore as this gets stuck.") @Test fun stacktraceWithOptimizeForDeveloperExperience() { val projectDir = File("src/test/projects/crash") @@ -142,7 +144,6 @@ class ZiplineGradlePluginTest { * Stack traces in this mode have line numbers and function names. These are built without any * Webpack minification. (Some JavaScript stack trace elements don't have line numbers). */ - @Ignore("Temporarily ignore as this gets stuck.") @Test fun stacktraceWithDevelopmentBuild() { val projectDir = File("src/test/projects/crash") @@ -506,13 +507,17 @@ class ZiplineGradlePluginTest { } } - private fun createRunner(projectDir: File, vararg taskNames: String): GradleRunner { + private fun createRunner( + projectDir: File, + vararg taskNames: String, + ): GradleRunner { val gradleRoot = projectDir.resolve("gradle").also { it.mkdir() } File("../gradle/wrapper").copyRecursively(gradleRoot.resolve("wrapper"), true) + val arguments = arrayOf("--info", "--stacktrace", "--continue", "-PenableK2=$enableK2") return GradleRunner.create() .withProjectDir(projectDir) .withDebug(true) // Run in-process. - .withArguments("--info", "--stacktrace", "--continue", *taskNames, versionProperty) + .withArguments(*arguments, *taskNames, versionProperty) .forwardOutput() } @@ -542,5 +547,12 @@ class ZiplineGradlePluginTest { @Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER") // Access :zipline internals. private val manifestFileName = app.cash.zipline.loader.internal.MANIFEST_FILE_NAME + + @JvmStatic + @Parameters + fun data() = listOf( + arrayOf(true), + arrayOf(false), + ) } } diff --git a/zipline-gradle-plugin/src/test/projects/android/lib/build.gradle.kts b/zipline-gradle-plugin/src/test/projects/android/lib/build.gradle.kts index b614a427e3..f06ec62f1f 100644 --- a/zipline-gradle-plugin/src/test/projects/android/lib/build.gradle.kts +++ b/zipline-gradle-plugin/src/test/projects/android/lib/build.gradle.kts @@ -6,11 +6,22 @@ plugins { kotlin { androidTarget() + js { browser() binaries.executable() } + if (project.property("enableK2").toString().toBooleanStrict()) { + targets.configureEach { + compilations.configureEach { + compilerOptions.options.languageVersion.set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0, + ) + } + } + } + sourceSets { commonMain { dependencies { diff --git a/zipline-gradle-plugin/src/test/projects/basic/lib/build.gradle.kts b/zipline-gradle-plugin/src/test/projects/basic/lib/build.gradle.kts index 7a2ac22eb6..439ee04aed 100644 --- a/zipline-gradle-plugin/src/test/projects/basic/lib/build.gradle.kts +++ b/zipline-gradle-plugin/src/test/projects/basic/lib/build.gradle.kts @@ -15,6 +15,16 @@ kotlin { binaries.executable() } + if (project.property("enableK2").toString().toBooleanStrict()) { + targets.configureEach { + compilations.configureEach { + compilerOptions.options.languageVersion.set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0, + ) + } + } + } + sourceSets { commonMain { dependencies { diff --git a/zipline-gradle-plugin/src/test/projects/crash/lib/build.gradle.kts b/zipline-gradle-plugin/src/test/projects/crash/lib/build.gradle.kts index 2a6fb39be0..cb0f0b1acb 100644 --- a/zipline-gradle-plugin/src/test/projects/crash/lib/build.gradle.kts +++ b/zipline-gradle-plugin/src/test/projects/crash/lib/build.gradle.kts @@ -14,6 +14,16 @@ kotlin { binaries.executable() } + if (project.property("enableK2").toString().toBooleanStrict()) { + targets.configureEach { + compilations.configureEach { + compilerOptions.options.languageVersion.set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0, + ) + } + } + } + sourceSets { commonMain { dependencies { diff --git a/zipline-gradle-plugin/src/test/projects/jvmOnly/lib/build.gradle.kts b/zipline-gradle-plugin/src/test/projects/jvmOnly/lib/build.gradle.kts index 8a2c9def25..4bedf684d5 100644 --- a/zipline-gradle-plugin/src/test/projects/jvmOnly/lib/build.gradle.kts +++ b/zipline-gradle-plugin/src/test/projects/jvmOnly/lib/build.gradle.kts @@ -8,6 +8,16 @@ plugins { kotlin { jvm() + if (project.property("enableK2").toString().toBooleanStrict()) { + targets.configureEach { + compilations.configureEach { + compilerOptions.options.languageVersion.set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0, + ) + } + } + } + sourceSets { val jvmMain by getting { dependencies { diff --git a/zipline-gradle-plugin/src/test/projects/multipleJsTargets/lib/build.gradle.kts b/zipline-gradle-plugin/src/test/projects/multipleJsTargets/lib/build.gradle.kts index de45780b59..38e3667d7f 100644 --- a/zipline-gradle-plugin/src/test/projects/multipleJsTargets/lib/build.gradle.kts +++ b/zipline-gradle-plugin/src/test/projects/multipleJsTargets/lib/build.gradle.kts @@ -24,6 +24,16 @@ kotlin { } } + if (project.property("enableK2").toString().toBooleanStrict()) { + targets.configureEach { + compilations.configureEach { + compilerOptions.options.languageVersion.set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0, + ) + } + } + } + sourceSets { commonMain { dependencies { diff --git a/zipline-gradle-plugin/src/test/projects/signing/lib/build.gradle.kts b/zipline-gradle-plugin/src/test/projects/signing/lib/build.gradle.kts index aac836e4d8..8f609b433a 100644 --- a/zipline-gradle-plugin/src/test/projects/signing/lib/build.gradle.kts +++ b/zipline-gradle-plugin/src/test/projects/signing/lib/build.gradle.kts @@ -13,6 +13,16 @@ kotlin { binaries.executable() } + if (project.property("enableK2").toString().toBooleanStrict()) { + targets.configureEach { + compilations.configureEach { + compilerOptions.options.languageVersion.set( + org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0, + ) + } + } + } + sourceSets { commonMain { dependencies { From 5b0ee7cf7ba4e1b49b024de641506f05ebeef9d1 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:13:50 -0800 Subject: [PATCH 13/22] Remove. --- zipline-kotlin-plugin/build.gradle.kts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/zipline-kotlin-plugin/build.gradle.kts b/zipline-kotlin-plugin/build.gradle.kts index a13cfeb4e5..f7f8f246a6 100644 --- a/zipline-kotlin-plugin/build.gradle.kts +++ b/zipline-kotlin-plugin/build.gradle.kts @@ -34,13 +34,3 @@ configure { ) ) } - -tasks { - withType().configureEach { - compilerOptions { - freeCompilerArgs.addAll( - "-opt-in=org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI" - ) - } - } -} From 7252aaa9f2eec3c957cf97024dab403f5b87532e Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:16:47 -0800 Subject: [PATCH 14/22] Revert API. --- zipline/api/android/zipline.api | 36 ++++++++++++++------------------- zipline/api/jvm/zipline.api | 36 ++++++++++++++------------------- 2 files changed, 30 insertions(+), 42 deletions(-) diff --git a/zipline/api/android/zipline.api b/zipline/api/android/zipline.api index c773bb90d1..f752a9afd8 100644 --- a/zipline/api/android/zipline.api +++ b/zipline/api/android/zipline.api @@ -205,7 +205,6 @@ public abstract interface class app/cash/zipline/ZiplineFunction { public final class app/cash/zipline/ZiplineManifest { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Companion; - public synthetic fun (ILapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public synthetic fun (Lapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lapp/cash/zipline/ZiplineManifest$Unsigned; public final fun component2 ()Ljava/util/Map; @@ -235,16 +234,15 @@ public final class app/cash/zipline/ZiplineManifest { public final fun getVersion ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; - public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public synthetic class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public final class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$$serializer; - public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -260,7 +258,6 @@ public final class app/cash/zipline/ZiplineManifest$Companion { public final class app/cash/zipline/ZiplineManifest$Module { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Module$Companion; - public synthetic fun (ILjava/lang/String;Lokio/ByteString;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;)V public synthetic fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; @@ -274,16 +271,15 @@ public final class app/cash/zipline/ZiplineManifest$Module { public final fun getUrl ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; - public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Module;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public synthetic class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public final class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Module$$serializer; - public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -295,7 +291,6 @@ public final class app/cash/zipline/ZiplineManifest$Module$Companion { public final class app/cash/zipline/ZiplineManifest$Unsigned { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Unsigned$Companion; public fun ()V - public synthetic fun (ILjava/util/Map;Ljava/lang/Long;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;)V public synthetic fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/util/Map; @@ -309,16 +304,15 @@ public final class app/cash/zipline/ZiplineManifest$Unsigned { public final fun getSignatures ()Ljava/util/Map; public fun hashCode ()I public fun toString ()Ljava/lang/String; - public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Unsigned;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public synthetic class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public final class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Unsigned$$serializer; - public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } diff --git a/zipline/api/jvm/zipline.api b/zipline/api/jvm/zipline.api index c773bb90d1..f752a9afd8 100644 --- a/zipline/api/jvm/zipline.api +++ b/zipline/api/jvm/zipline.api @@ -205,7 +205,6 @@ public abstract interface class app/cash/zipline/ZiplineFunction { public final class app/cash/zipline/ZiplineManifest { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Companion; - public synthetic fun (ILapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public synthetic fun (Lapp/cash/zipline/ZiplineManifest$Unsigned;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lapp/cash/zipline/ZiplineManifest$Unsigned; public final fun component2 ()Ljava/util/Map; @@ -235,16 +234,15 @@ public final class app/cash/zipline/ZiplineManifest { public final fun getVersion ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; - public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public synthetic class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public final class app/cash/zipline/ZiplineManifest$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$$serializer; - public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -260,7 +258,6 @@ public final class app/cash/zipline/ZiplineManifest$Companion { public final class app/cash/zipline/ZiplineManifest$Module { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Module$Companion; - public synthetic fun (ILjava/lang/String;Lokio/ByteString;Ljava/util/List;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;)V public synthetic fun (Ljava/lang/String;Lokio/ByteString;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/lang/String; @@ -274,16 +271,15 @@ public final class app/cash/zipline/ZiplineManifest$Module { public final fun getUrl ()Ljava/lang/String; public fun hashCode ()I public fun toString ()Ljava/lang/String; - public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Module;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public synthetic class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public final class app/cash/zipline/ZiplineManifest$Module$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Module$$serializer; - public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Module; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Module;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } @@ -295,7 +291,6 @@ public final class app/cash/zipline/ZiplineManifest$Module$Companion { public final class app/cash/zipline/ZiplineManifest$Unsigned { public static final field Companion Lapp/cash/zipline/ZiplineManifest$Unsigned$Companion; public fun ()V - public synthetic fun (ILjava/util/Map;Ljava/lang/Long;Ljava/lang/String;Lkotlinx/serialization/internal/SerializationConstructorMarker;)V public fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;)V public synthetic fun (Ljava/util/Map;Ljava/lang/Long;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Ljava/util/Map; @@ -309,16 +304,15 @@ public final class app/cash/zipline/ZiplineManifest$Unsigned { public final fun getSignatures ()Ljava/util/Map; public fun hashCode ()I public fun toString ()Ljava/lang/String; - public static final synthetic fun write$Self (Lapp/cash/zipline/ZiplineManifest$Unsigned;Lkotlinx/serialization/encoding/CompositeEncoder;Lkotlinx/serialization/descriptors/SerialDescriptor;)V } -public synthetic class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { +public final class app/cash/zipline/ZiplineManifest$Unsigned$$serializer : kotlinx/serialization/internal/GeneratedSerializer { public static final field INSTANCE Lapp/cash/zipline/ZiplineManifest$Unsigned$$serializer; - public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; - public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; + public fun childSerializers ()[Lkotlinx/serialization/KSerializer; + public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lapp/cash/zipline/ZiplineManifest$Unsigned; public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; - public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; - public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V + public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; + public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lapp/cash/zipline/ZiplineManifest$Unsigned;)V public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; } From d0254fdfeced802ea46ca9be32a46a163886c8d3 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:17:17 -0800 Subject: [PATCH 15/22] Revert library updates. --- gradle/libs.versions.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ed957d10a6..e54d59b84a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,16 +1,16 @@ [versions] androidx-compose = "1.5.4" -androidx-compose-compiler = "1.5.8" +androidx-compose-compiler = "1.5.7" compileSdk = "34" http4k = "4.48.0.0" -kotlin = "1.9.22" +kotlin = "1.9.21" kotlinx-coroutines = "1.7.3" kotlinx-serialization = "1.6.2" -ksp = "1.9.22-1.0.16" +ksp = "1.9.21-1.0.16" okHttp = "4.12.0" okio = "3.7.0" minSdk = "18" -sqldelight = "2.0.1" +sqldelight = "2.0.0" [libraries] android-desugarJdkLibs = { module = "com.android.tools:desugar_jdk_libs", version = "2.0.4" } From aac0d87b6f26ad5630e0b542404c503d28ec5e3d Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:17:31 -0800 Subject: [PATCH 16/22] Remove endpoint companion object. --- .../kotlin/app/cash/zipline/internal/bridge/Endpoint.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt b/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt index 778044a352..3e5eaac356 100644 --- a/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt +++ b/zipline/src/commonMain/kotlin/app/cash/zipline/internal/bridge/Endpoint.kt @@ -233,6 +233,4 @@ internal class Endpoint internal constructor( open fun callEnd(call: Call, result: CallResult, startValue: Any?) { } } - - internal companion object } From fbeb0b960590cebdad2c0f4ae423d9551cf2d999 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:32:18 -0800 Subject: [PATCH 17/22] Revert. --- .../zipline/testing/ZiplineTestInternals.kt | 67 +++++++++---------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt b/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt index f6c42deaeb..76df5e69c1 100644 --- a/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt +++ b/zipline-testing/src/hostMain/kotlin/app/cash/zipline/testing/ZiplineTestInternals.kt @@ -27,6 +27,7 @@ package app.cash.zipline.testing import app.cash.zipline.ZiplineFunction import app.cash.zipline.ZiplineScope +import app.cash.zipline.ZiplineService import app.cash.zipline.internal.bridge.Endpoint import app.cash.zipline.internal.bridge.OutboundCallHandler import app.cash.zipline.internal.bridge.OutboundService @@ -96,40 +97,40 @@ object ZiplineTestInternals { /** Simulate a generated subclass of ZiplineServiceAdapter. */ class EchoServiceAdapter : ZiplineServiceAdapter() { - override val simpleName: String + val simpleName: String get() = "EchoService" - override val serialName: String + val serialName: String get() = "app.cash.zipline.kotlin.EchoService" - override val serializers: List> + val serializers: List> get() = emptyList() override fun ziplineFunctions( serializersModule: SerializersModule, - ): List> { + ): List> { val requestSerializer = serializersModule.serializer(echoRequestKt) as KSerializer<*> val responseSerializer = serializersModule.serializer(echoResponseKt) as KSerializer<*> val name = "fun echo(app.cash.zipline.testing.EchoRequest): app.cash.zipline.testing.EchoResponse" - return listOf>( - object : ReturningZiplineFunction( + return listOf>( + object : ReturningZiplineFunction( name.signatureHash(), name, listOf(requestSerializer), responseSerializer, ) { - override fun call(service: EchoService, args: List<*>): Any { - return service.echo(args[0] as EchoRequest) + override fun call(service: ZiplineService, args: List<*>): Any { + return (service as EchoService).echo(args[0] as EchoRequest) } }, ) } - override fun outboundService(callHandler: OutboundCallHandler): EchoService { + override fun outboundService(callHandler: OutboundCallHandler): ZiplineService { return GeneratedOutboundService(callHandler) } private class GeneratedOutboundService( - override val callHandler: OutboundCallHandler, + val callHandler: OutboundCallHandler, ) : EchoService, OutboundService { override fun echo(request: EchoRequest): EchoResponse { @@ -140,40 +141,39 @@ object ZiplineTestInternals { /** Simulate a generated subclass of ZiplineServiceAdapter. */ class GenericEchoServiceAdapter : ZiplineServiceAdapter>() { - override val simpleName: String + val simpleName: String get() = "GenericEchoService" - override val serialName: String + val serialName: String get() = "app.cash.zipline.kotlin.GenericEchoService" - override val serializers: List> + val serializers: List> get() = emptyList() override fun ziplineFunctions( serializersModule: SerializersModule, - ): List>> { + ): List> { val requestSerializer = serializersModule.serializer(stringKt) as KSerializer<*> val responseSerializer = serializersModule.serializer(listOfStringKt) as KSerializer<*> val name = "fun genericEcho(T): kotlin.collections.List" - return listOf>>( - object : ReturningZiplineFunction>( + return listOf>( + object : ReturningZiplineFunction( name.signatureHash(), name, listOf(requestSerializer), responseSerializer, ) { - override fun call(service: GenericEchoService, args: List<*>): Any { - return service.genericEcho(args[0] as String) + override fun call(service: ZiplineService, args: List<*>): Any { + return (service as GenericEchoService).genericEcho(args[0] as String) } }, ) } - override fun outboundService(callHandler: OutboundCallHandler): GenericEchoService { + override fun outboundService(callHandler: OutboundCallHandler): ZiplineService { return GeneratedOutboundService(callHandler) } - private class GeneratedOutboundService( - override val callHandler: OutboundCallHandler, - ) : GenericEchoService, OutboundService { + private class GeneratedOutboundService(val callHandler: OutboundCallHandler) : + GenericEchoService, OutboundService { override fun genericEcho(request: String): List { return callHandler.call(this, 0, request) as List @@ -183,41 +183,40 @@ object ZiplineTestInternals { /** Simulate a generated subclass of ZiplineServiceAdapter. */ class EchoZiplineServiceAdapter : ZiplineServiceAdapter() { - override val simpleName: String + val simpleName: String get() = "EchoService" - override val serialName: String + val serialName: String get() = "app.cash.zipline.kotlin.EchoZiplineService" - override val serializers: List> + val serializers: List> get() = emptyList() override fun ziplineFunctions( serializersModule: SerializersModule, - ): List> { + ): List> { val requestSerializer = serializersModule.serializer(echoRequestKt) as KSerializer<*> val responseSerializer = serializersModule.serializer(echoResponseKt) as KSerializer<*> val name = "fun echo(app.cash.zipline.testing.EchoRequest): app.cash.zipline.testing.EchoResponse" - return listOf>( - object : ReturningZiplineFunction( + return listOf>( + object : ReturningZiplineFunction( name.signatureHash(), name, listOf(requestSerializer), responseSerializer, ) { - override fun call(service: EchoZiplineService, args: List<*>): Any { - return service.echo(args[0] as EchoRequest) + override fun call(service: ZiplineService, args: List<*>): Any { + return (service as EchoZiplineService).echo(args[0] as EchoRequest) } }, ) } - override fun outboundService(callHandler: OutboundCallHandler): EchoZiplineService { + override fun outboundService(callHandler: OutboundCallHandler): ZiplineService { return GeneratedOutboundService(callHandler) } - private class GeneratedOutboundService( - override val callHandler: OutboundCallHandler, - ) : EchoZiplineService, OutboundService { + private class GeneratedOutboundService(val callHandler: OutboundCallHandler) : + EchoZiplineService, OutboundService { override fun echo(request: EchoRequest): EchoResponse { return callHandler.call(this, 0, request) as EchoResponse From f3a7743ac0d7176b91e4d068addd7e4d823e84a1 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:42:31 -0800 Subject: [PATCH 18/22] Pull into separate PR. --- build.gradle.kts | 11 ----------- gradle/libs.versions.toml | 1 + samples/world-clock/android/build.gradle.kts | 1 + zipline/build.gradle.kts | 3 +-- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 40bc09c69f..3baac810de 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -153,17 +153,6 @@ allprojects { plugins.withId("org.jetbrains.kotlin.multiplatform") { configure { jvmToolchain(11) - - targets.configureEach { - compilations.configureEach { - compilerOptions.configure { - freeCompilerArgs.addAll( - // https://youtrack.jetbrains.com/issue/KT-61573 - "-Xexpect-actual-classes", - ) - } - } - } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e54d59b84a..86b1a845af 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,6 +33,7 @@ auto-service-compiler = { module = "dev.zacsweers.autoservice:auto-service-ksp", auto-service-annotations = { module = "com.google.auto.service:auto-service-annotations", version = "1.1.1" } binary-compatibility-validator-gradle-plugin = { module = "org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin", version = "0.13.2" } cklib-gradle-plugin = { module = "co.touchlab:cklib-gradle-plugin", version = "0.3.0" } +coil-compose = { module = "io.coil-kt:coil-compose", version = "2.5.0" } dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.9.10" } duktape = { module = "com.squareup.duktape:duktape-android", version = "1.4.0" } http4k-core = { module = "org.http4k:http4k-core", version.ref = "http4k" } diff --git a/samples/world-clock/android/build.gradle.kts b/samples/world-clock/android/build.gradle.kts index 9f7bf2ff0d..7a035fca83 100644 --- a/samples/world-clock/android/build.gradle.kts +++ b/samples/world-clock/android/build.gradle.kts @@ -62,6 +62,7 @@ dependencies { implementation(libs.androidx.appCompat) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle) + implementation(libs.coil.compose) implementation(libs.androidx.compose.material) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.tooling.preview) diff --git a/zipline/build.gradle.kts b/zipline/build.gradle.kts index 7d946c949a..0c35e6eccf 100644 --- a/zipline/build.gradle.kts +++ b/zipline/build.gradle.kts @@ -91,7 +91,7 @@ kotlin { dependsOn(jniMain) } val androidInstrumentedTest by getting { - kotlin.srcDir("src/hostTest/kotlin/") + dependsOn(hostTest) dependencies { implementation(libs.assertk) implementation(libs.junit) @@ -150,7 +150,6 @@ kotlin { } } - @Suppress("DEPRECATION") targets.all { compilations.all { // Naming logic from https://github.com/JetBrains/kotlin/blob/a0e6fb03f0288f0bff12be80c402d8a62b5b045a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt#L519-L520 From e3c808d161dbbd74650bd3f1fbba669b01148d82 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:44:07 -0800 Subject: [PATCH 19/22] Replace deprecated property. --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3baac810de..1adb02ed94 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -167,7 +167,7 @@ allprojects { repositories { maven { name = "testMaven" - url = file("${rootProject.buildDir}/testMaven").toURI() + url = file("${rootProject.layout.buildDirectory.asFile.get()}/testMaven").toURI() } /* From 1565061f0a4dd3d3cdcb3790f435d06d4d79a274 Mon Sep 17 00:00:00 2001 From: Colin White Date: Mon, 15 Jan 2024 03:46:57 -0800 Subject: [PATCH 20/22] Unused import. --- zipline-kotlin-plugin/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/zipline-kotlin-plugin/build.gradle.kts b/zipline-kotlin-plugin/build.gradle.kts index f7f8f246a6..04cf0f8376 100644 --- a/zipline-kotlin-plugin/build.gradle.kts +++ b/zipline-kotlin-plugin/build.gradle.kts @@ -1,7 +1,6 @@ import com.vanniktech.maven.publish.JavadocJar import com.vanniktech.maven.publish.KotlinJvm import com.vanniktech.maven.publish.MavenPublishBaseExtension -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("jvm") From 4e01d7d47336d8346c24549117fdacecce8b81d7 Mon Sep 17 00:00:00 2001 From: Colin White Date: Tue, 16 Jan 2024 11:17:31 -0800 Subject: [PATCH 21/22] Update build.gradle.kts Co-authored-by: Jake Wharton --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1adb02ed94..89db5f162d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -167,7 +167,7 @@ allprojects { repositories { maven { name = "testMaven" - url = file("${rootProject.layout.buildDirectory.asFile.get()}/testMaven").toURI() + url = rootProject.layout.buildDirectory.dir("testMaven").get().asFile.toURI() } /* From 25a3e9a1f3130ecc4ede66e1c59c820b00249228 Mon Sep 17 00:00:00 2001 From: Colin White Date: Tue, 16 Jan 2024 11:25:48 -0800 Subject: [PATCH 22/22] Update other usage. --- zipline/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zipline/build.gradle.kts b/zipline/build.gradle.kts index 0c35e6eccf..c91fa1da77 100644 --- a/zipline/build.gradle.kts +++ b/zipline/build.gradle.kts @@ -23,7 +23,7 @@ plugins { val copyTestingJs = tasks.register("copyTestingJs") { dependsOn(":zipline-testing:compileDevelopmentLibraryKotlinJs") - destinationDir = layout.buildDirectory.asFile.get().resolve("generated/testingJs") + destinationDir = rootProject.layout.buildDirectory.dir("generated/testingJs").get().asFile from(rootDir.resolve("zipline-testing/build/compileSync/js/main/developmentLibrary/kotlin")) } tasks.withType().configureEach {