From 2d7bc14c1e6b7f44ca3087134e26dfd7848e2959 Mon Sep 17 00:00:00 2001 From: CharlieTap Date: Mon, 2 Feb 2026 18:59:01 +0000 Subject: [PATCH 1/2] add support for both agp 8 and agp 9 in the gradle plugin --- .github/workflows/publish.yml | 5 ++ chasm-gradle-plugin-agp8/build.gradle.kts | 43 ++++++++++ .../chasm/gradle/agp/Agp8AndroidConfigurer.kt | 31 +++++++ chasm-gradle-plugin-agp9/build.gradle.kts | 43 ++++++++++ .../chasm/gradle/agp/Agp9AndroidConfigurer.kt | 31 +++++++ chasm-gradle-plugin-api/build.gradle.kts | 37 +++++++++ .../charlietap/chasm/gradle/ChasmExtension.kt | 0 .../charlietap/chasm/gradle/CodegenConfig.kt | 0 .../chasm/gradle/ExportedAllocator.kt | 0 .../io/github/charlietap/chasm/gradle/Mode.kt | 0 .../chasm/gradle/StringAllocationStrategy.kt | 0 .../chasm/gradle/StringEncodingStrategy.kt | 0 .../io/github/charlietap/chasm/gradle/Type.kt | 14 ++++ .../charlietap/chasm/gradle/WasmFunction.kt | 0 .../charlietap/chasm/gradle/WasmModule.kt | 0 chasm-gradle-plugin-codegen/build.gradle.kts | 43 ++++++++++ .../gradle/ClassImplementationGenerator.kt | 1 + .../chasm/gradle/ClassInterfaceGenerator.kt | 1 + .../charlietap/chasm/gradle/CodegenTask.kt | 0 .../charlietap/chasm/gradle/CodegenTasks.kt | 37 +++++++++ .../chasm/gradle/CodegenWorkAction.kt | 1 + .../charlietap/chasm/gradle/Constants.kt | 0 .../FunctionReturnImplementationGenerator.kt | 0 .../github/charlietap/chasm/gradle/Logger.kt | 0 .../charlietap/chasm/gradle/WasmInterface.kt | 12 --- .../chasm/gradle/WasmInterfaceFactory.kt | 1 + .../chasm/gradle/WasmInterfaceGenerator.kt | 0 .../charlietap/chasm/gradle/ext/TypeExt.kt | 2 + .../chasm/gradle/ext/ValueTypeExt.kt | 0 .../chasm/gradle/WasmInterfaceFactoryTest.kt | 0 .../chasm/gradle/fixture/CodegenConfig.kt | 0 .../chasm/gradle/fixture/FakeLogger.kt | 0 .../chasm/gradle/fixture/NeverLogger.kt | 0 .../chasm/gradle/fixture/WasmFunction.kt | 0 .../chasm/gradle/fixture/WasmInterface.kt | 0 chasm-gradle-plugin-compat/build.gradle.kts | 38 +++++++++ .../chasm/gradle/AndroidConfigContext.kt | 10 +++ .../chasm/gradle/AndroidConfigurer.kt | 5 ++ chasm-gradle-plugin/build.gradle.kts | 12 ++- .../charlietap/chasm/gradle/AgpVersion.kt | 30 +++++++ .../charlietap/chasm/gradle/ChasmPlugin.kt | 82 ++++++++----------- gradle/libs.versions.toml | 6 +- settings.gradle.kts | 5 ++ 43 files changed, 423 insertions(+), 67 deletions(-) create mode 100644 chasm-gradle-plugin-agp8/build.gradle.kts create mode 100644 chasm-gradle-plugin-agp8/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp8AndroidConfigurer.kt create mode 100644 chasm-gradle-plugin-agp9/build.gradle.kts create mode 100644 chasm-gradle-plugin-agp9/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp9AndroidConfigurer.kt create mode 100644 chasm-gradle-plugin-api/build.gradle.kts rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmExtension.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenConfig.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/ExportedAllocator.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/Mode.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/StringAllocationStrategy.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/StringEncodingStrategy.kt (100%) create mode 100644 chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/Type.kt rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmFunction.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-api}/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmModule.kt (100%) create mode 100644 chasm-gradle-plugin-codegen/build.gradle.kts rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt (99%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt (96%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTask.kt (100%) create mode 100644 chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTasks.kt rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenWorkAction.kt (98%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/Constants.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/FunctionReturnImplementationGenerator.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/Logger.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterface.kt (90%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactory.kt (99%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceGenerator.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/TypeExt.kt (89%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/ValueTypeExt.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/test/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactoryTest.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/CodegenConfig.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/FakeLogger.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/NeverLogger.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmFunction.kt (100%) rename {chasm-gradle-plugin => chasm-gradle-plugin-codegen}/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmInterface.kt (100%) create mode 100644 chasm-gradle-plugin-compat/build.gradle.kts create mode 100644 chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigContext.kt create mode 100644 chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigurer.kt create mode 100644 chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/AgpVersion.kt diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 818b9b967..974dd3f09 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,6 +11,11 @@ on: options: - '' - ':chasm-gradle-plugin:' + - ':chasm-gradle-plugin-api:' + - ':chasm-gradle-plugin-compat:' + - ':chasm-gradle-plugin-codegen:' + - ':chasm-gradle-plugin-agp8:' + - ':chasm-gradle-plugin-agp9:' default: '' jobs: publish: diff --git a/chasm-gradle-plugin-agp8/build.gradle.kts b/chasm-gradle-plugin-agp8/build.gradle.kts new file mode 100644 index 000000000..8ad0207a2 --- /dev/null +++ b/chasm-gradle-plugin-agp8/build.gradle.kts @@ -0,0 +1,43 @@ +import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation + +plugins { + alias(libs.plugins.kotlin.jvm) + `kotlin-dsl` + + alias(libs.plugins.conventions.linting) + alias(libs.plugins.conventions.publishing) +} + +group = "io.github.charlietap.chasm" +version = libs.versions.plugin.version.name.get() + +configure { + name = "chasm-gradle-plugin-agp8" + description = "AGP 8 integration for the chasm Gradle plugin" +} + +kotlin { + + @OptIn(ExperimentalAbiValidation::class) + abiValidation { + enabled.set(true) + } + + compilerOptions { + freeCompilerArgs.add("-Xwhen-guards") + } + + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) + } + + dependencies { + implementation(projects.chasmGradlePluginCompat) + implementation(projects.chasmGradlePluginCodegen) + compileOnly(libs.android.gradle.plugin8) + + testImplementation(libs.kotlin.test) + testImplementation(libs.android.gradle.plugin8) + testImplementation(gradleTestKit()) + } +} diff --git a/chasm-gradle-plugin-agp8/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp8AndroidConfigurer.kt b/chasm-gradle-plugin-agp8/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp8AndroidConfigurer.kt new file mode 100644 index 000000000..c5490a5b5 --- /dev/null +++ b/chasm-gradle-plugin-agp8/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp8AndroidConfigurer.kt @@ -0,0 +1,31 @@ +package io.github.charlietap.chasm.gradle.agp + +import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.Variant +import io.github.charlietap.chasm.gradle.AndroidConfigContext +import io.github.charlietap.chasm.gradle.AndroidConfigurer +import io.github.charlietap.chasm.gradle.CodegenTask +import io.github.charlietap.chasm.gradle.Mode +import io.github.charlietap.chasm.gradle.registerCodegenTask + +class Agp8AndroidConfigurer : AndroidConfigurer { + override fun configure(androidComponents: Any, context: AndroidConfigContext) { + @Suppress("UNCHECKED_CAST") + val components = androidComponents as AndroidComponentsExtension<*, *, *> + + components.onVariants { variant: Variant -> + context.extension.modules.configureEach { + if (context.extension.mode.get() == Mode.PRODUCER) { + context.project.logger.error( + "Producer mode is only supported for Kotlin Multiplatform projects with WASM targets", + ) + return@configureEach + } + + val task = registerCodegenTask(context.project, this, variant.name, context.workerClasspath) + variant.sources.java?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory) + variant.sources.kotlin?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory) + } + } + } +} diff --git a/chasm-gradle-plugin-agp9/build.gradle.kts b/chasm-gradle-plugin-agp9/build.gradle.kts new file mode 100644 index 000000000..e0e533938 --- /dev/null +++ b/chasm-gradle-plugin-agp9/build.gradle.kts @@ -0,0 +1,43 @@ +import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation + +plugins { + alias(libs.plugins.kotlin.jvm) + `kotlin-dsl` + + alias(libs.plugins.conventions.linting) + alias(libs.plugins.conventions.publishing) +} + +group = "io.github.charlietap.chasm" +version = libs.versions.plugin.version.name.get() + +configure { + name = "chasm-gradle-plugin-agp9" + description = "AGP 9 integration for the chasm Gradle plugin" +} + +kotlin { + + @OptIn(ExperimentalAbiValidation::class) + abiValidation { + enabled.set(true) + } + + compilerOptions { + freeCompilerArgs.add("-Xwhen-guards") + } + + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) + } + + dependencies { + implementation(projects.chasmGradlePluginCompat) + implementation(projects.chasmGradlePluginCodegen) + compileOnly(libs.android.gradle.plugin) + + testImplementation(libs.kotlin.test) + testImplementation(libs.android.gradle.plugin) + testImplementation(gradleTestKit()) + } +} diff --git a/chasm-gradle-plugin-agp9/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp9AndroidConfigurer.kt b/chasm-gradle-plugin-agp9/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp9AndroidConfigurer.kt new file mode 100644 index 000000000..e51f0c56f --- /dev/null +++ b/chasm-gradle-plugin-agp9/src/main/kotlin/io/github/charlietap/chasm/gradle/agp/Agp9AndroidConfigurer.kt @@ -0,0 +1,31 @@ +package io.github.charlietap.chasm.gradle.agp + +import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.Variant +import io.github.charlietap.chasm.gradle.AndroidConfigContext +import io.github.charlietap.chasm.gradle.AndroidConfigurer +import io.github.charlietap.chasm.gradle.CodegenTask +import io.github.charlietap.chasm.gradle.Mode +import io.github.charlietap.chasm.gradle.registerCodegenTask + +class Agp9AndroidConfigurer : AndroidConfigurer { + override fun configure(androidComponents: Any, context: AndroidConfigContext) { + @Suppress("UNCHECKED_CAST") + val components = androidComponents as AndroidComponentsExtension<*, *, *> + + components.onVariants { variant: Variant -> + context.extension.modules.configureEach { + if (context.extension.mode.get() == Mode.PRODUCER) { + context.project.logger.error( + "Producer mode is only supported for Kotlin Multiplatform projects with WASM targets", + ) + return@configureEach + } + + val task = registerCodegenTask(context.project, this, variant.name, context.workerClasspath) + variant.sources.java?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory) + variant.sources.kotlin?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory) + } + } + } +} diff --git a/chasm-gradle-plugin-api/build.gradle.kts b/chasm-gradle-plugin-api/build.gradle.kts new file mode 100644 index 000000000..59892c256 --- /dev/null +++ b/chasm-gradle-plugin-api/build.gradle.kts @@ -0,0 +1,37 @@ +import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation + +plugins { + alias(libs.plugins.kotlin.jvm) + `kotlin-dsl` + + alias(libs.plugins.conventions.linting) + alias(libs.plugins.conventions.publishing) +} + +group = "io.github.charlietap.chasm" +version = libs.versions.plugin.version.name.get() + +configure { + name = "chasm-gradle-plugin-api" + description = "API surface for the chasm Gradle plugin" +} + +kotlin { + + @OptIn(ExperimentalAbiValidation::class) + abiValidation { + enabled.set(true) + } + + compilerOptions { + freeCompilerArgs.add("-Xwhen-guards") + } + + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) + } + + dependencies { + testImplementation(libs.kotlin.test) + } +} diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmExtension.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmExtension.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmExtension.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmExtension.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenConfig.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenConfig.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenConfig.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenConfig.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ExportedAllocator.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/ExportedAllocator.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ExportedAllocator.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/ExportedAllocator.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/Mode.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/Mode.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/Mode.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/Mode.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/StringAllocationStrategy.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/StringAllocationStrategy.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/StringAllocationStrategy.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/StringAllocationStrategy.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/StringEncodingStrategy.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/StringEncodingStrategy.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/StringEncodingStrategy.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/StringEncodingStrategy.kt diff --git a/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/Type.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/Type.kt new file mode 100644 index 000000000..5841102d8 --- /dev/null +++ b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/Type.kt @@ -0,0 +1,14 @@ +package io.github.charlietap.chasm.gradle + +import java.io.Serializable + +interface Type : Serializable + +enum class Scalar : Type { + Integer, + Long, + Float, + Double, + String, + Unit, +} diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmFunction.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmFunction.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmFunction.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmFunction.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmModule.kt b/chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmModule.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmModule.kt rename to chasm-gradle-plugin-api/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmModule.kt diff --git a/chasm-gradle-plugin-codegen/build.gradle.kts b/chasm-gradle-plugin-codegen/build.gradle.kts new file mode 100644 index 000000000..88cdab418 --- /dev/null +++ b/chasm-gradle-plugin-codegen/build.gradle.kts @@ -0,0 +1,43 @@ +import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation + +plugins { + alias(libs.plugins.kotlin.jvm) + `kotlin-dsl` + + alias(libs.plugins.conventions.linting) + alias(libs.plugins.conventions.publishing) +} + +group = "io.github.charlietap.chasm" +version = libs.versions.plugin.version.name.get() + +configure { + name = "chasm-gradle-plugin-codegen" + description = "Codegen implementation for the chasm Gradle plugin" +} + +kotlin { + + @OptIn(ExperimentalAbiValidation::class) + abiValidation { + enabled.set(true) + } + + compilerOptions { + freeCompilerArgs.add("-Xwhen-guards") + } + + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) + } + + dependencies { + api(projects.chasmGradlePluginApi) + implementation(projects.chasm)?.because("We use the module and moduleInfo calls during codegen") + implementation(projects.vm) + implementation(libs.kotlin.poet) + + testImplementation(libs.kotlin.test) + testImplementation(projects.test.fixture.chasm) + } +} diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt similarity index 99% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt index 8568cfe5f..4a6b58fe5 100644 --- a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt +++ b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassImplementationGenerator.kt @@ -280,6 +280,7 @@ internal class FunctionImplementationGenerator( Scalar.String -> STRING Scalar.Unit -> UNIT is Aggregate -> ClassName(packageName, type.generated.name) + else -> throw IllegalArgumentException("Unsupported return type: $type") } returns(returnType) diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt similarity index 96% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt index 993cc51ad..e92c36344 100644 --- a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt +++ b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ClassInterfaceGenerator.kt @@ -30,6 +30,7 @@ internal class FunctionGenerator { Scalar.String -> STRING Scalar.Unit -> UNIT is Aggregate -> ClassName(packageName, type.generated.name) + else -> throw IllegalArgumentException("Unsupported return type: $type") } returns(type) }.build() diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTask.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTask.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTask.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTask.kt diff --git a/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTasks.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTasks.kt new file mode 100644 index 000000000..86dd7e316 --- /dev/null +++ b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenTasks.kt @@ -0,0 +1,37 @@ +package io.github.charlietap.chasm.gradle + +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration +import org.gradle.api.tasks.TaskProvider +import org.gradle.kotlin.dsl.register +import java.io.File + +fun registerCodegenTask( + project: Project, + module: WasmModule, + sourceSetName: String, + classpath: Configuration, + moduleBinary: File? = null, +): TaskProvider { + val capitalizedSourceName = sourceSetName.replaceFirstChar { it.uppercase() } + return project.tasks.register("codegenModule$capitalizedSourceName${module.name}") { + group = "chasm" + description = "Generates a typesafe Kotlin interface from a wasm binary" + + workerClasspath.from(classpath) + + moduleBinary?.let { + binary.set(moduleBinary) + } ?: binary.set(module.binary) + allocator.set(module.allocator) + config.set(module.codegenConfig) + interfaceName.set(module.name) + packageName.set(module.packageName) + interfaceVisibility.set(module.interfaceVisibility) + implementationVisibility.set(module.implementationVisibility) + initializers.set(module.initializers) + functions.set(module.functions) + ignoredExports.set(module.ignoredExports) + outputDirectory.set(project.layout.buildDirectory.dir("generated/kotlin/$sourceSetName")) + } +} diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenWorkAction.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenWorkAction.kt similarity index 98% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenWorkAction.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenWorkAction.kt index 69d7cdd42..c1ce29785 100644 --- a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenWorkAction.kt +++ b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/CodegenWorkAction.kt @@ -150,6 +150,7 @@ internal fun Type.toSerializedTypeName(): String { Scalar.String -> "String" Scalar.Unit -> "Unit" is Aggregate -> throw IllegalArgumentException("Aggregate types not supported in WasmFunction definitions") + else -> throw IllegalArgumentException("Unknown type: $this") } } diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/Constants.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/Constants.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/Constants.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/Constants.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/FunctionReturnImplementationGenerator.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/FunctionReturnImplementationGenerator.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/FunctionReturnImplementationGenerator.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/FunctionReturnImplementationGenerator.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/Logger.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/Logger.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/Logger.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/Logger.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterface.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterface.kt similarity index 90% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterface.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterface.kt index 2c30d2246..ffabcaa71 100644 --- a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterface.kt +++ b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterface.kt @@ -1,20 +1,8 @@ package io.github.charlietap.chasm.gradle import io.github.charlietap.chasm.vm.WasmVirtualMachine -import java.io.Serializable import kotlin.reflect.KClass -sealed interface Type : Serializable - -enum class Scalar : Type { - Integer, - Long, - Float, - Double, - String, - Unit, -} - internal data class Aggregate( val generated: GeneratedType, ) : Type diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactory.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactory.kt similarity index 99% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactory.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactory.kt index af41c2241..24a6ff992 100644 --- a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactory.kt +++ b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactory.kt @@ -61,6 +61,7 @@ internal class WasmFunctionValidator { } } Scalar.Unit -> emptyList() + else -> throw IllegalArgumentException("Unknown type: $input") } } } diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceGenerator.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceGenerator.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceGenerator.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceGenerator.kt diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/TypeExt.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/TypeExt.kt similarity index 89% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/TypeExt.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/TypeExt.kt index ec76faefa..d1c54c458 100644 --- a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/TypeExt.kt +++ b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/TypeExt.kt @@ -20,6 +20,7 @@ internal fun Type.asValue() = when (this) { Scalar.Unit, is Aggregate, -> throw UnsupportedOperationException("Can't convert $this to ExecutionValue") + else -> throw UnsupportedOperationException("Unknown type: $this") } internal fun Type.asTypeName() = when (this) { @@ -30,4 +31,5 @@ internal fun Type.asTypeName() = when (this) { Scalar.String -> STRING Scalar.Unit -> UNIT is Aggregate -> throw UnsupportedOperationException("Can't convert $this to ExecutionValue") + else -> throw UnsupportedOperationException("Unknown type: $this") } diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/ValueTypeExt.kt b/chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/ValueTypeExt.kt similarity index 100% rename from chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/ValueTypeExt.kt rename to chasm-gradle-plugin-codegen/src/main/kotlin/io/github/charlietap/chasm/gradle/ext/ValueTypeExt.kt diff --git a/chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactoryTest.kt b/chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactoryTest.kt similarity index 100% rename from chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactoryTest.kt rename to chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/WasmInterfaceFactoryTest.kt diff --git a/chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/CodegenConfig.kt b/chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/CodegenConfig.kt similarity index 100% rename from chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/CodegenConfig.kt rename to chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/CodegenConfig.kt diff --git a/chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/FakeLogger.kt b/chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/FakeLogger.kt similarity index 100% rename from chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/FakeLogger.kt rename to chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/FakeLogger.kt diff --git a/chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/NeverLogger.kt b/chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/NeverLogger.kt similarity index 100% rename from chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/NeverLogger.kt rename to chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/NeverLogger.kt diff --git a/chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmFunction.kt b/chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmFunction.kt similarity index 100% rename from chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmFunction.kt rename to chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmFunction.kt diff --git a/chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmInterface.kt b/chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmInterface.kt similarity index 100% rename from chasm-gradle-plugin/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmInterface.kt rename to chasm-gradle-plugin-codegen/src/test/kotlin/io/github/charlietap/chasm/gradle/fixture/WasmInterface.kt diff --git a/chasm-gradle-plugin-compat/build.gradle.kts b/chasm-gradle-plugin-compat/build.gradle.kts new file mode 100644 index 000000000..ba82458ec --- /dev/null +++ b/chasm-gradle-plugin-compat/build.gradle.kts @@ -0,0 +1,38 @@ +import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation + +plugins { + alias(libs.plugins.kotlin.jvm) + `kotlin-dsl` + + alias(libs.plugins.conventions.linting) + alias(libs.plugins.conventions.publishing) +} + +group = "io.github.charlietap.chasm" +version = libs.versions.plugin.version.name.get() + +configure { + name = "chasm-gradle-plugin-compat" + description = "Compatibility surface for the chasm Gradle plugin" +} + +kotlin { + + @OptIn(ExperimentalAbiValidation::class) + abiValidation { + enabled.set(true) + } + + compilerOptions { + freeCompilerArgs.add("-Xwhen-guards") + } + + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) + } + + dependencies { + api(projects.chasmGradlePluginApi) + testImplementation(libs.kotlin.test) + } +} diff --git a/chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigContext.kt b/chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigContext.kt new file mode 100644 index 000000000..bb09ecc54 --- /dev/null +++ b/chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigContext.kt @@ -0,0 +1,10 @@ +package io.github.charlietap.chasm.gradle + +import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration + +data class AndroidConfigContext( + val project: Project, + val extension: ChasmExtension, + val workerClasspath: Configuration, +) diff --git a/chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigurer.kt b/chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigurer.kt new file mode 100644 index 000000000..88083b57d --- /dev/null +++ b/chasm-gradle-plugin-compat/src/main/kotlin/io/github/charlietap/chasm/gradle/AndroidConfigurer.kt @@ -0,0 +1,5 @@ +package io.github.charlietap.chasm.gradle + +interface AndroidConfigurer { + fun configure(androidComponents: Any, context: AndroidConfigContext) +} diff --git a/chasm-gradle-plugin/build.gradle.kts b/chasm-gradle-plugin/build.gradle.kts index 2aa7b7b8f..e95912e53 100644 --- a/chasm-gradle-plugin/build.gradle.kts +++ b/chasm-gradle-plugin/build.gradle.kts @@ -47,15 +47,13 @@ kotlin { } dependencies { - implementation(projects.chasm)?.because("We use the module and moduleInfo calls during codegen") - implementation(projects.vm) + api(projects.chasmGradlePluginApi) + api(projects.chasmGradlePluginCodegen) + implementation(projects.chasmGradlePluginCompat) + implementation(projects.chasmGradlePluginAgp8) + implementation(projects.chasmGradlePluginAgp9) implementation(libs.kotlin.gradle.plugin) - implementation(libs.android.gradle.plugin) - implementation(libs.kotlin.poet) - - testImplementation(libs.kotlin.test) - testImplementation(projects.test.fixture.chasm) } } diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/AgpVersion.kt b/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/AgpVersion.kt new file mode 100644 index 000000000..a2d2ff05e --- /dev/null +++ b/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/AgpVersion.kt @@ -0,0 +1,30 @@ +package io.github.charlietap.chasm.gradle + +data class AgpVersion( + val major: Int, + val minor: Int, + val patch: Int, +) { + override fun toString(): String = "$major.$minor.$patch" + + companion object { + fun detect(): AgpVersion? { + val version = runCatching { + val versionClass = Class.forName("com.android.Version") + val field = versionClass.getField("ANDROID_GRADLE_PLUGIN_VERSION") + field.get(null) as String + }.getOrNull() ?: return null + + return parse(version) + } + + private fun parse(version: String): AgpVersion? { + val sanitized = version.substringBefore('-').substringBefore('+').substringBefore('_') + val parts = sanitized.split('.') + val major = parts.getOrNull(0)?.toIntOrNull() ?: return null + val minor = parts.getOrNull(1)?.toIntOrNull() ?: 0 + val patch = parts.getOrNull(2)?.toIntOrNull() ?: 0 + return AgpVersion(major, minor, patch) + } + } +} diff --git a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmPlugin.kt b/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmPlugin.kt index 8a7e0694c..09c422535 100644 --- a/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmPlugin.kt +++ b/chasm-gradle-plugin/src/main/kotlin/io/github/charlietap/chasm/gradle/ChasmPlugin.kt @@ -1,18 +1,14 @@ package io.github.charlietap.chasm.gradle -import com.android.build.api.variant.AndroidComponentsExtension -import com.android.build.api.variant.Variant -import com.android.build.gradle.internal.tasks.factory.dependsOn import io.github.charlietap.chasm.chasm_gradle_plugin.BuildConfig +import org.gradle.api.GradleException import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.attributes.Category import org.gradle.api.attributes.Usage import org.gradle.api.tasks.Copy -import org.gradle.api.tasks.TaskProvider import org.gradle.kotlin.dsl.create -import org.gradle.kotlin.dsl.register import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompile import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension @@ -84,7 +80,9 @@ class ChasmPlugin : Plugin { val binary = File(mjsFile.parentFile, mjsFile.nameWithoutExtension + ".wasm") val task = registerCodegenTask(project, this, target.name, workerClasspath, binary) - task.dependsOn(executable.binaries.first().linkTask) + task.configure { + dependsOn(executable.binaries.first().linkTask) + } nonWasmSourceSets.forEach { nonWasmSourceSet -> nonWasmSourceSet.kotlin.srcDir(task.flatMap { it.outputDirectory }) @@ -126,22 +124,21 @@ class ChasmPlugin : Plugin { } project.plugins.withId("com.android.base") { - val androidComponents = project.extensions.getByType(AndroidComponentsExtension::class.java) + val agpVersion = AgpVersion.detect() + ?: throw GradleException("Chasm Gradle plugin requires Android Gradle Plugin on the classpath.") + val configurer = loadAndroidConfigurer(agpVersion) addVMRuntimeForJvmOrAndroid(project, extension.runtimeDependencyConfiguration.get()) - androidComponents.onVariants { variant: Variant -> - extension.modules.configureEach { - if (extension.mode.get() == Mode.PRODUCER) { - project.logger.error("Producer mode is only supported for Kotlin Multiplatform projects with WASM targets") - return@configureEach - } - - val task = registerCodegenTask(project, this, variant.name, workerClasspath) - variant.sources.java?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory) - variant.sources.kotlin?.addGeneratedSourceDirectory(task, CodegenTask::outputDirectory) - } - } + val androidComponents = project.extensions.getByName("androidComponents") + configurer.configure( + androidComponents = androidComponents, + context = AndroidConfigContext( + project = project, + extension = extension, + workerClasspath = workerClasspath, + ), + ) } project.gradle.projectsEvaluated { @@ -178,33 +175,26 @@ class ChasmPlugin : Plugin { } } - private fun registerCodegenTask( - project: Project, - module: WasmModule, - sourceSetName: String, - classpath: Configuration, - moduleBinary: File? = null, - ): TaskProvider { - val capitalizedSourceName = sourceSetName.replaceFirstChar { it.uppercase() } - return project.tasks.register("codegenModule$capitalizedSourceName${module.name}") { - group = "chasm" - description = "Generates a typesafe Kotlin interface from a wasm binary" - - workerClasspath.from(classpath) - - moduleBinary?.let { - binary.set(moduleBinary) - } ?: binary.set(module.binary) - allocator.set(module.allocator) - config.set(module.codegenConfig) - interfaceName.set(module.name) - packageName.set(module.packageName) - interfaceVisibility.set(module.interfaceVisibility) - implementationVisibility.set(module.implementationVisibility) - initializers.set(module.initializers) - functions.set(module.functions) - ignoredExports.set(module.ignoredExports) - outputDirectory.set(project.layout.buildDirectory.dir("generated/kotlin/$sourceSetName")) + private fun loadAndroidConfigurer(agpVersion: AgpVersion): AndroidConfigurer { + if (agpVersion.major < 8) { + throw GradleException("Chasm Gradle plugin requires AGP 8.x or newer. Found $agpVersion.") + } + + val implementationClass = when (agpVersion.major) { + 8 -> "io.github.charlietap.chasm.gradle.agp.Agp8AndroidConfigurer" + 9 -> "io.github.charlietap.chasm.gradle.agp.Agp9AndroidConfigurer" + else -> null + } ?: throw GradleException("Chasm Gradle plugin does not support AGP $agpVersion.") + + return runCatching { + val implClass = Class.forName(implementationClass, true, javaClass.classLoader) + implClass.getDeclaredConstructor().newInstance() as AndroidConfigurer + }.getOrElse { error -> + throw GradleException( + "Failed to load Android integration for AGP $agpVersion. " + + "Ensure the chasm Gradle plugin artifacts are on the classpath.", + error, + ) } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9fe412d10..146ad61bb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] -version-name = "1.3.0" -plugin-version-name = "2.0.1-1.3.0" +version-name = "1.3.1" +plugin-version-name = "2.0.1-1.3.1" application-id = "com.tap.chasm" application-namespace = "com.tap.chasm" @@ -13,6 +13,7 @@ java-compiler-version = "21" java-bytecode-version = "11" android-build-tools-plugin = "9.0.0" +android-build-tools-plugin-8 = "8.13.2" build-config-plugin = "5.6.7" versions-plugin = "0.51.0" @@ -144,6 +145,7 @@ sweet-lib = { module = "io.github.charlietap.sweet:lib" } androidx-test-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-junit" } android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "android-build-tools-plugin" } +android-gradle-plugin8 = { module = "com.android.tools.build:gradle", version.ref = "android-build-tools-plugin-8" } dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" } gradle-maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "gradle-maven-publish-plugin" } gradle-versions-plugin = { module = "com.github.ben-manes:gradle-versions-plugin", version.ref = "versions-plugin" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 5e01190a0..2e41d43b6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -41,6 +41,11 @@ include(":ast") include(":benchmark") include(":chasm") include(":chasm-gradle-plugin") +include(":chasm-gradle-plugin-api") +include(":chasm-gradle-plugin-compat") +include(":chasm-gradle-plugin-codegen") +include(":chasm-gradle-plugin-agp8") +include(":chasm-gradle-plugin-agp9") include(":config") include(":decoder") From 47a917eac6e55d4f778d421c0a609a7c21742817 Mon Sep 17 00:00:00 2001 From: CharlieTap Date: Mon, 2 Feb 2026 20:28:23 +0000 Subject: [PATCH 2/2] update abi --- chasm-gradle-plugin-agp8/build.gradle.kts | 9 - chasm-gradle-plugin-agp9/build.gradle.kts | 9 - .../api/chasm-gradle-plugin-api.api | 178 ++++++++++++ chasm-gradle-plugin-api/build.gradle.kts | 4 - .../api/chasm-gradle-plugin-codegen.api | 88 ++++++ chasm-gradle-plugin-codegen/build.gradle.kts | 4 - chasm-gradle-plugin-compat/build.gradle.kts | 9 - .../api/chasm-gradle-plugin.api | 273 +----------------- 8 files changed, 282 insertions(+), 292 deletions(-) create mode 100644 chasm-gradle-plugin-api/api/chasm-gradle-plugin-api.api create mode 100644 chasm-gradle-plugin-codegen/api/chasm-gradle-plugin-codegen.api diff --git a/chasm-gradle-plugin-agp8/build.gradle.kts b/chasm-gradle-plugin-agp8/build.gradle.kts index 8ad0207a2..635f151e0 100644 --- a/chasm-gradle-plugin-agp8/build.gradle.kts +++ b/chasm-gradle-plugin-agp8/build.gradle.kts @@ -18,15 +18,6 @@ configure { kotlin { - @OptIn(ExperimentalAbiValidation::class) - abiValidation { - enabled.set(true) - } - - compilerOptions { - freeCompilerArgs.add("-Xwhen-guards") - } - jvmToolchain { languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) } diff --git a/chasm-gradle-plugin-agp9/build.gradle.kts b/chasm-gradle-plugin-agp9/build.gradle.kts index e0e533938..e7830d6a2 100644 --- a/chasm-gradle-plugin-agp9/build.gradle.kts +++ b/chasm-gradle-plugin-agp9/build.gradle.kts @@ -18,15 +18,6 @@ configure { kotlin { - @OptIn(ExperimentalAbiValidation::class) - abiValidation { - enabled.set(true) - } - - compilerOptions { - freeCompilerArgs.add("-Xwhen-guards") - } - jvmToolchain { languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) } diff --git a/chasm-gradle-plugin-api/api/chasm-gradle-plugin-api.api b/chasm-gradle-plugin-api/api/chasm-gradle-plugin-api.api new file mode 100644 index 000000000..e5e150295 --- /dev/null +++ b/chasm-gradle-plugin-api/api/chasm-gradle-plugin-api.api @@ -0,0 +1,178 @@ +public abstract interface annotation class io/github/charlietap/chasm/gradle/ChasmDsl : java/lang/annotation/Annotation { +} + +public class io/github/charlietap/chasm/gradle/ChasmExtension { + public fun (Lorg/gradle/api/model/ObjectFactory;)V + public final fun getMode ()Lorg/gradle/api/provider/Property; + public final fun getModules ()Lorg/gradle/api/NamedDomainObjectContainer; + public final fun getRuntimeDependencyConfiguration ()Lorg/gradle/api/provider/Property; +} + +public final class io/github/charlietap/chasm/gradle/CodegenConfig : java/io/Serializable { + public fun ()V + public fun (Z)V + public synthetic fun (ZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Z + public final fun copy (Z)Lio/github/charlietap/chasm/gradle/CodegenConfig; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/CodegenConfig;ZILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/CodegenConfig; + public fun equals (Ljava/lang/Object;)Z + public final fun getGenerateTypesafeGlobalProperties ()Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/ExportedAllocator : java/io/Serializable { + public fun (Ljava/lang/String;Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/ExportedAllocator; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/ExportedAllocator;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/ExportedAllocator; + public fun equals (Ljava/lang/Object;)Z + public final fun getAllocationFunction ()Ljava/lang/String; + public final fun getDeallocationFunction ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/FunctionParameterDefinition : java/io/Serializable { + public fun (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;)V + public synthetic fun (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Lio/github/charlietap/chasm/gradle/Type; + public final fun component3 ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public final fun component4 ()Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; + public final fun copy (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;)Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition;Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition; + public fun equals (Ljava/lang/Object;)Z + public final fun getName ()Ljava/lang/String; + public final fun getStringAllocationStrategy ()Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; + public final fun getStringEncodingStrategy ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public final fun getType ()Lio/github/charlietap/chasm/gradle/Type; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/Mode : java/lang/Enum { + public static final field CONSUMER Lio/github/charlietap/chasm/gradle/Mode; + public static final field PRODUCER Lio/github/charlietap/chasm/gradle/Mode; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/Mode; + public static fun values ()[Lio/github/charlietap/chasm/gradle/Mode; +} + +public final class io/github/charlietap/chasm/gradle/ReturnTypeDefinition : java/io/Serializable { + public fun (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)V + public synthetic fun (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun component1 ()Lio/github/charlietap/chasm/gradle/Type; + public final fun component2 ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public final fun copy (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; + public fun equals (Ljava/lang/Object;)Z + public final fun getStringEncodingStrategy ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public final fun getType ()Lio/github/charlietap/chasm/gradle/Type; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration : java/lang/Enum { + public static final field API Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; + public static final field IMPLEMENTATION Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; + public static fun values ()[Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; +} + +public final class io/github/charlietap/chasm/gradle/Scalar : java/lang/Enum, io/github/charlietap/chasm/gradle/Type { + public static final field Double Lio/github/charlietap/chasm/gradle/Scalar; + public static final field Float Lio/github/charlietap/chasm/gradle/Scalar; + public static final field Integer Lio/github/charlietap/chasm/gradle/Scalar; + public static final field Long Lio/github/charlietap/chasm/gradle/Scalar; + public static final field String Lio/github/charlietap/chasm/gradle/Scalar; + public static final field Unit Lio/github/charlietap/chasm/gradle/Scalar; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/Scalar; + public static fun values ()[Lio/github/charlietap/chasm/gradle/Scalar; +} + +public final class io/github/charlietap/chasm/gradle/StringAllocationStrategy : java/io/Serializable { + public fun (Z)V + public final fun component1 ()Z + public final fun copy (Z)Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ZILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; + public fun equals (Ljava/lang/Object;)Z + public final fun getFreeAfterCall ()Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/StringEncodingStrategy : java/lang/Enum { + public static final field LENGTH_PREFIXED Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public static final field NULL_TERMINATED Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public static final field PACKED_POINTER_AND_LENGTH Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public static final field POINTER_AND_LENGTH Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; + public static fun values ()[Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; +} + +public abstract interface class io/github/charlietap/chasm/gradle/Type : java/io/Serializable { +} + +public final class io/github/charlietap/chasm/gradle/TypeVisibility : java/lang/Enum { + public static final field INTERNAL Lio/github/charlietap/chasm/gradle/TypeVisibility; + public static final field PUBLIC Lio/github/charlietap/chasm/gradle/TypeVisibility; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/TypeVisibility; + public static fun values ()[Lio/github/charlietap/chasm/gradle/TypeVisibility; +} + +public final class io/github/charlietap/chasm/gradle/WasmFunction : java/io/Serializable { + public fun (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; + public final fun copy (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;)Lio/github/charlietap/chasm/gradle/WasmFunction; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmFunction;Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmFunction; + public fun equals (Ljava/lang/Object;)Z + public final fun getName ()Ljava/lang/String; + public final fun getParameters ()Ljava/util/List; + public final fun getReturnType ()Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/WasmFunctionBuilder { + public fun (Ljava/lang/String;)V + public final fun build ()Lio/github/charlietap/chasm/gradle/WasmFunction; + public final fun doubleParam (Ljava/lang/String;)V + public final fun doubleReturnType ()V + public final fun floatParam (Ljava/lang/String;)V + public final fun floatReturnType ()V + public final fun getName ()Ljava/lang/String; + public final fun intParam (Ljava/lang/String;)V + public final fun intReturnType ()V + public final fun longParam (Ljava/lang/String;)V + public final fun longReturnType ()V + public final fun stringParam (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Z)V + public static synthetic fun stringParam$default (Lio/github/charlietap/chasm/gradle/WasmFunctionBuilder;Ljava/lang/String;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ZILjava/lang/Object;)V + public final fun stringReturnType (Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)V + public static synthetic fun stringReturnType$default (Lio/github/charlietap/chasm/gradle/WasmFunctionBuilder;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILjava/lang/Object;)V +} + +public abstract class io/github/charlietap/chasm/gradle/WasmModule { + public static final field DEFAULT_MODULE_FILE_PATH Ljava/lang/String; + public fun (Lorg/gradle/api/Project;Ljava/lang/String;)V + public final fun function (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V + public abstract fun getAllocator ()Lorg/gradle/api/provider/Property; + public abstract fun getBinary ()Lorg/gradle/api/file/RegularFileProperty; + public abstract fun getCodegenConfig ()Lorg/gradle/api/provider/Property; + public abstract fun getFunctions ()Lorg/gradle/api/provider/ListProperty; + public abstract fun getIgnoredExports ()Lorg/gradle/api/provider/SetProperty; + public abstract fun getImplementationVisibility ()Lorg/gradle/api/provider/Property; + public abstract fun getInitializers ()Lorg/gradle/api/provider/SetProperty; + public abstract fun getInterfaceVisibility ()Lorg/gradle/api/provider/Property; + public final fun getName ()Ljava/lang/String; + public abstract fun getPackageName ()Lorg/gradle/api/provider/Property; + public final fun getProject ()Lorg/gradle/api/Project; +} + diff --git a/chasm-gradle-plugin-api/build.gradle.kts b/chasm-gradle-plugin-api/build.gradle.kts index 59892c256..553eb8737 100644 --- a/chasm-gradle-plugin-api/build.gradle.kts +++ b/chasm-gradle-plugin-api/build.gradle.kts @@ -23,10 +23,6 @@ kotlin { enabled.set(true) } - compilerOptions { - freeCompilerArgs.add("-Xwhen-guards") - } - jvmToolchain { languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) } diff --git a/chasm-gradle-plugin-codegen/api/chasm-gradle-plugin-codegen.api b/chasm-gradle-plugin-codegen/api/chasm-gradle-plugin-codegen.api new file mode 100644 index 000000000..10591cd04 --- /dev/null +++ b/chasm-gradle-plugin-codegen/api/chasm-gradle-plugin-codegen.api @@ -0,0 +1,88 @@ +public abstract class io/github/charlietap/chasm/gradle/CodegenTask : org/gradle/api/DefaultTask { + public fun (Lorg/gradle/workers/WorkerExecutor;)V + public final fun generate ()V + public abstract fun getAllocator ()Lorg/gradle/api/provider/Property; + public abstract fun getBinary ()Lorg/gradle/api/file/RegularFileProperty; + public abstract fun getConfig ()Lorg/gradle/api/provider/Property; + public abstract fun getFunctions ()Lorg/gradle/api/provider/ListProperty; + public abstract fun getIgnoredExports ()Lorg/gradle/api/provider/SetProperty; + public abstract fun getImplementationVisibility ()Lorg/gradle/api/provider/Property; + public abstract fun getInitializers ()Lorg/gradle/api/provider/SetProperty; + public abstract fun getInterfaceName ()Lorg/gradle/api/provider/Property; + public abstract fun getInterfaceVisibility ()Lorg/gradle/api/provider/Property; + public abstract fun getOutputDirectory ()Lorg/gradle/api/file/DirectoryProperty; + public abstract fun getPackageName ()Lorg/gradle/api/provider/Property; + public abstract fun getWorkerClasspath ()Lorg/gradle/api/file/ConfigurableFileCollection; +} + +public final class io/github/charlietap/chasm/gradle/CodegenTasksKt { + public static final fun registerCodegenTask (Lorg/gradle/api/Project;Lio/github/charlietap/chasm/gradle/WasmModule;Ljava/lang/String;Lorg/gradle/api/artifacts/Configuration;Ljava/io/File;)Lorg/gradle/api/tasks/TaskProvider; + public static synthetic fun registerCodegenTask$default (Lorg/gradle/api/Project;Lio/github/charlietap/chasm/gradle/WasmModule;Ljava/lang/String;Lorg/gradle/api/artifacts/Configuration;Ljava/io/File;ILjava/lang/Object;)Lorg/gradle/api/tasks/TaskProvider; +} + +public abstract class io/github/charlietap/chasm/gradle/CodegenWorkAction : org/gradle/workers/WorkAction { + public fun ()V + public fun execute ()V +} + +public abstract interface class io/github/charlietap/chasm/gradle/CodegenWorkParameters : org/gradle/workers/WorkParameters { + public abstract fun getAllocatorAllocationFunction ()Lorg/gradle/api/provider/Property; + public abstract fun getAllocatorDeallocationFunction ()Lorg/gradle/api/provider/Property; + public abstract fun getBinaryPath ()Lorg/gradle/api/provider/Property; + public abstract fun getConfigGenerateTypesafeGlobalProperties ()Lorg/gradle/api/provider/Property; + public abstract fun getFunctions ()Lorg/gradle/api/provider/ListProperty; + public abstract fun getHasAllocator ()Lorg/gradle/api/provider/Property; + public abstract fun getIgnoredExports ()Lorg/gradle/api/provider/SetProperty; + public abstract fun getImplementationVisibility ()Lorg/gradle/api/provider/Property; + public abstract fun getInitializers ()Lorg/gradle/api/provider/SetProperty; + public abstract fun getInterfaceName ()Lorg/gradle/api/provider/Property; + public abstract fun getInterfaceVisibility ()Lorg/gradle/api/provider/Property; + public abstract fun getOutputDirectoryPath ()Lorg/gradle/api/provider/Property; + public abstract fun getPackageName ()Lorg/gradle/api/provider/Property; +} + +public final class io/github/charlietap/chasm/gradle/WasmFunctionData : java/io/Serializable { + public fun (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/util/List; + public final fun component3 ()Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; + public final fun copy (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;)Lio/github/charlietap/chasm/gradle/WasmFunctionData; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmFunctionData;Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmFunctionData; + public fun equals (Ljava/lang/Object;)Z + public final fun getName ()Ljava/lang/String; + public final fun getParameters ()Ljava/util/List; + public final fun getReturnType ()Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/WasmParameterData : java/io/Serializable { + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/Boolean; + public final fun component4 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/WasmParameterData; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmParameterData;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmParameterData; + public fun equals (Ljava/lang/Object;)Z + public final fun getName ()Ljava/lang/String; + public final fun getStringAllocationStrategyFreeAfterCall ()Ljava/lang/Boolean; + public final fun getStringEncodingStrategy ()Ljava/lang/String; + public final fun getTypeName ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class io/github/charlietap/chasm/gradle/WasmReturnTypeData : java/io/Serializable { + public fun (Ljava/lang/String;Ljava/lang/String;)V + public final fun component1 ()Ljava/lang/String; + public final fun component2 ()Ljava/lang/String; + public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; + public fun equals (Ljava/lang/Object;)Z + public final fun getStringEncodingStrategy ()Ljava/lang/String; + public final fun getTypeName ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + diff --git a/chasm-gradle-plugin-codegen/build.gradle.kts b/chasm-gradle-plugin-codegen/build.gradle.kts index 88cdab418..6dbb58a3c 100644 --- a/chasm-gradle-plugin-codegen/build.gradle.kts +++ b/chasm-gradle-plugin-codegen/build.gradle.kts @@ -23,10 +23,6 @@ kotlin { enabled.set(true) } - compilerOptions { - freeCompilerArgs.add("-Xwhen-guards") - } - jvmToolchain { languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) } diff --git a/chasm-gradle-plugin-compat/build.gradle.kts b/chasm-gradle-plugin-compat/build.gradle.kts index ba82458ec..1bca58a53 100644 --- a/chasm-gradle-plugin-compat/build.gradle.kts +++ b/chasm-gradle-plugin-compat/build.gradle.kts @@ -18,15 +18,6 @@ configure { kotlin { - @OptIn(ExperimentalAbiValidation::class) - abiValidation { - enabled.set(true) - } - - compilerOptions { - freeCompilerArgs.add("-Xwhen-guards") - } - jvmToolchain { languageVersion.set(JavaLanguageVersion.of(libs.versions.java.compiler.version.get().toInt())) } diff --git a/chasm-gradle-plugin/api/chasm-gradle-plugin.api b/chasm-gradle-plugin/api/chasm-gradle-plugin.api index d41990821..c7a9ac9c7 100644 --- a/chasm-gradle-plugin/api/chasm-gradle-plugin.api +++ b/chasm-gradle-plugin/api/chasm-gradle-plugin.api @@ -1,267 +1,26 @@ -public abstract interface annotation class io/github/charlietap/chasm/gradle/ChasmDsl : java/lang/annotation/Annotation { -} - -public class io/github/charlietap/chasm/gradle/ChasmExtension { - public fun (Lorg/gradle/api/model/ObjectFactory;)V - public final fun getMode ()Lorg/gradle/api/provider/Property; - public final fun getModules ()Lorg/gradle/api/NamedDomainObjectContainer; - public final fun getRuntimeDependencyConfiguration ()Lorg/gradle/api/provider/Property; -} - -public final class io/github/charlietap/chasm/gradle/ChasmPlugin : org/gradle/api/Plugin { - public fun ()V - public synthetic fun apply (Ljava/lang/Object;)V - public fun apply (Lorg/gradle/api/Project;)V -} - -public final class io/github/charlietap/chasm/gradle/CodegenConfig : java/io/Serializable { - public fun ()V - public fun (Z)V - public synthetic fun (ZILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Z - public final fun copy (Z)Lio/github/charlietap/chasm/gradle/CodegenConfig; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/CodegenConfig;ZILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/CodegenConfig; +public final class io/github/charlietap/chasm/gradle/AgpVersion { + public static final field Companion Lio/github/charlietap/chasm/gradle/AgpVersion$Companion; + public fun (III)V + public final fun component1 ()I + public final fun component2 ()I + public final fun component3 ()I + public final fun copy (III)Lio/github/charlietap/chasm/gradle/AgpVersion; + public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/AgpVersion;IIIILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/AgpVersion; public fun equals (Ljava/lang/Object;)Z - public final fun getGenerateTypesafeGlobalProperties ()Z + public final fun getMajor ()I + public final fun getMinor ()I + public final fun getPatch ()I public fun hashCode ()I public fun toString ()Ljava/lang/String; } -public abstract class io/github/charlietap/chasm/gradle/CodegenTask : org/gradle/api/DefaultTask { - public fun (Lorg/gradle/workers/WorkerExecutor;)V - public final fun generate ()V - public abstract fun getAllocator ()Lorg/gradle/api/provider/Property; - public abstract fun getBinary ()Lorg/gradle/api/file/RegularFileProperty; - public abstract fun getConfig ()Lorg/gradle/api/provider/Property; - public abstract fun getFunctions ()Lorg/gradle/api/provider/ListProperty; - public abstract fun getIgnoredExports ()Lorg/gradle/api/provider/SetProperty; - public abstract fun getImplementationVisibility ()Lorg/gradle/api/provider/Property; - public abstract fun getInitializers ()Lorg/gradle/api/provider/SetProperty; - public abstract fun getInterfaceName ()Lorg/gradle/api/provider/Property; - public abstract fun getInterfaceVisibility ()Lorg/gradle/api/provider/Property; - public abstract fun getOutputDirectory ()Lorg/gradle/api/file/DirectoryProperty; - public abstract fun getPackageName ()Lorg/gradle/api/provider/Property; - public abstract fun getWorkerClasspath ()Lorg/gradle/api/file/ConfigurableFileCollection; +public final class io/github/charlietap/chasm/gradle/AgpVersion$Companion { + public final fun detect ()Lio/github/charlietap/chasm/gradle/AgpVersion; } -public abstract class io/github/charlietap/chasm/gradle/CodegenWorkAction : org/gradle/workers/WorkAction { +public final class io/github/charlietap/chasm/gradle/ChasmPlugin : org/gradle/api/Plugin { public fun ()V - public fun execute ()V -} - -public abstract interface class io/github/charlietap/chasm/gradle/CodegenWorkParameters : org/gradle/workers/WorkParameters { - public abstract fun getAllocatorAllocationFunction ()Lorg/gradle/api/provider/Property; - public abstract fun getAllocatorDeallocationFunction ()Lorg/gradle/api/provider/Property; - public abstract fun getBinaryPath ()Lorg/gradle/api/provider/Property; - public abstract fun getConfigGenerateTypesafeGlobalProperties ()Lorg/gradle/api/provider/Property; - public abstract fun getFunctions ()Lorg/gradle/api/provider/ListProperty; - public abstract fun getHasAllocator ()Lorg/gradle/api/provider/Property; - public abstract fun getIgnoredExports ()Lorg/gradle/api/provider/SetProperty; - public abstract fun getImplementationVisibility ()Lorg/gradle/api/provider/Property; - public abstract fun getInitializers ()Lorg/gradle/api/provider/SetProperty; - public abstract fun getInterfaceName ()Lorg/gradle/api/provider/Property; - public abstract fun getInterfaceVisibility ()Lorg/gradle/api/provider/Property; - public abstract fun getOutputDirectoryPath ()Lorg/gradle/api/provider/Property; - public abstract fun getPackageName ()Lorg/gradle/api/provider/Property; -} - -public final class io/github/charlietap/chasm/gradle/ExportedAllocator : java/io/Serializable { - public fun (Ljava/lang/String;Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/ExportedAllocator; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/ExportedAllocator;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/ExportedAllocator; - public fun equals (Ljava/lang/Object;)Z - public final fun getAllocationFunction ()Ljava/lang/String; - public final fun getDeallocationFunction ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/github/charlietap/chasm/gradle/FunctionParameterDefinition : java/io/Serializable { - public fun (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;)V - public synthetic fun (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Lio/github/charlietap/chasm/gradle/Type; - public final fun component3 ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public final fun component4 ()Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; - public final fun copy (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;)Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition;Ljava/lang/String;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/FunctionParameterDefinition; - public fun equals (Ljava/lang/Object;)Z - public final fun getName ()Ljava/lang/String; - public final fun getStringAllocationStrategy ()Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; - public final fun getStringEncodingStrategy ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public final fun getType ()Lio/github/charlietap/chasm/gradle/Type; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/github/charlietap/chasm/gradle/Mode : java/lang/Enum { - public static final field CONSUMER Lio/github/charlietap/chasm/gradle/Mode; - public static final field PRODUCER Lio/github/charlietap/chasm/gradle/Mode; - public static fun getEntries ()Lkotlin/enums/EnumEntries; - public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/Mode; - public static fun values ()[Lio/github/charlietap/chasm/gradle/Mode; -} - -public final class io/github/charlietap/chasm/gradle/ReturnTypeDefinition : java/io/Serializable { - public fun (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)V - public synthetic fun (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Lio/github/charlietap/chasm/gradle/Type; - public final fun component2 ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public final fun copy (Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;Lio/github/charlietap/chasm/gradle/Type;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; - public fun equals (Ljava/lang/Object;)Z - public final fun getStringEncodingStrategy ()Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public final fun getType ()Lio/github/charlietap/chasm/gradle/Type; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration : java/lang/Enum { - public static final field API Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; - public static final field IMPLEMENTATION Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; - public static fun getEntries ()Lkotlin/enums/EnumEntries; - public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; - public static fun values ()[Lio/github/charlietap/chasm/gradle/RuntimeDependencyConfiguration; -} - -public final class io/github/charlietap/chasm/gradle/Scalar : java/lang/Enum, io/github/charlietap/chasm/gradle/Type { - public static final field Double Lio/github/charlietap/chasm/gradle/Scalar; - public static final field Float Lio/github/charlietap/chasm/gradle/Scalar; - public static final field Integer Lio/github/charlietap/chasm/gradle/Scalar; - public static final field Long Lio/github/charlietap/chasm/gradle/Scalar; - public static final field String Lio/github/charlietap/chasm/gradle/Scalar; - public static final field Unit Lio/github/charlietap/chasm/gradle/Scalar; - public static fun getEntries ()Lkotlin/enums/EnumEntries; - public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/Scalar; - public static fun values ()[Lio/github/charlietap/chasm/gradle/Scalar; -} - -public final class io/github/charlietap/chasm/gradle/StringAllocationStrategy : java/io/Serializable { - public fun (Z)V - public final fun component1 ()Z - public final fun copy (Z)Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/StringAllocationStrategy;ZILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/StringAllocationStrategy; - public fun equals (Ljava/lang/Object;)Z - public final fun getFreeAfterCall ()Z - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/github/charlietap/chasm/gradle/StringEncodingStrategy : java/lang/Enum { - public static final field LENGTH_PREFIXED Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public static final field NULL_TERMINATED Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public static final field PACKED_POINTER_AND_LENGTH Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public static final field POINTER_AND_LENGTH Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public static fun getEntries ()Lkotlin/enums/EnumEntries; - public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; - public static fun values ()[Lio/github/charlietap/chasm/gradle/StringEncodingStrategy; -} - -public abstract interface class io/github/charlietap/chasm/gradle/Type : java/io/Serializable { -} - -public final class io/github/charlietap/chasm/gradle/TypeVisibility : java/lang/Enum { - public static final field INTERNAL Lio/github/charlietap/chasm/gradle/TypeVisibility; - public static final field PUBLIC Lio/github/charlietap/chasm/gradle/TypeVisibility; - public static fun getEntries ()Lkotlin/enums/EnumEntries; - public static fun valueOf (Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/TypeVisibility; - public static fun values ()[Lio/github/charlietap/chasm/gradle/TypeVisibility; -} - -public final class io/github/charlietap/chasm/gradle/WasmFunction : java/io/Serializable { - public fun (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Ljava/util/List; - public final fun component3 ()Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; - public final fun copy (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;)Lio/github/charlietap/chasm/gradle/WasmFunction; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmFunction;Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmFunction; - public fun equals (Ljava/lang/Object;)Z - public final fun getName ()Ljava/lang/String; - public final fun getParameters ()Ljava/util/List; - public final fun getReturnType ()Lio/github/charlietap/chasm/gradle/ReturnTypeDefinition; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/github/charlietap/chasm/gradle/WasmFunctionBuilder { - public fun (Ljava/lang/String;)V - public final fun build ()Lio/github/charlietap/chasm/gradle/WasmFunction; - public final fun doubleParam (Ljava/lang/String;)V - public final fun doubleReturnType ()V - public final fun floatParam (Ljava/lang/String;)V - public final fun floatReturnType ()V - public final fun getName ()Ljava/lang/String; - public final fun intParam (Ljava/lang/String;)V - public final fun intReturnType ()V - public final fun longParam (Ljava/lang/String;)V - public final fun longReturnType ()V - public final fun stringParam (Ljava/lang/String;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;Z)V - public static synthetic fun stringParam$default (Lio/github/charlietap/chasm/gradle/WasmFunctionBuilder;Ljava/lang/String;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ZILjava/lang/Object;)V - public final fun stringReturnType (Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;)V - public static synthetic fun stringReturnType$default (Lio/github/charlietap/chasm/gradle/WasmFunctionBuilder;Lio/github/charlietap/chasm/gradle/StringEncodingStrategy;ILjava/lang/Object;)V -} - -public final class io/github/charlietap/chasm/gradle/WasmFunctionData : java/io/Serializable { - public fun (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Ljava/util/List; - public final fun component3 ()Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; - public final fun copy (Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;)Lio/github/charlietap/chasm/gradle/WasmFunctionData; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmFunctionData;Ljava/lang/String;Ljava/util/List;Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmFunctionData; - public fun equals (Ljava/lang/Object;)Z - public final fun getName ()Ljava/lang/String; - public final fun getParameters ()Ljava/util/List; - public final fun getReturnType ()Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public abstract class io/github/charlietap/chasm/gradle/WasmModule { - public static final field DEFAULT_MODULE_FILE_PATH Ljava/lang/String; - public fun (Lorg/gradle/api/Project;Ljava/lang/String;)V - public final fun function (Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V - public abstract fun getAllocator ()Lorg/gradle/api/provider/Property; - public abstract fun getBinary ()Lorg/gradle/api/file/RegularFileProperty; - public abstract fun getCodegenConfig ()Lorg/gradle/api/provider/Property; - public abstract fun getFunctions ()Lorg/gradle/api/provider/ListProperty; - public abstract fun getIgnoredExports ()Lorg/gradle/api/provider/SetProperty; - public abstract fun getImplementationVisibility ()Lorg/gradle/api/provider/Property; - public abstract fun getInitializers ()Lorg/gradle/api/provider/SetProperty; - public abstract fun getInterfaceVisibility ()Lorg/gradle/api/provider/Property; - public final fun getName ()Ljava/lang/String; - public abstract fun getPackageName ()Lorg/gradle/api/provider/Property; - public final fun getProject ()Lorg/gradle/api/Project; -} - -public final class io/github/charlietap/chasm/gradle/WasmParameterData : java/io/Serializable { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Ljava/lang/String; - public final fun component3 ()Ljava/lang/Boolean; - public final fun component4 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/WasmParameterData; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmParameterData;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/String;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmParameterData; - public fun equals (Ljava/lang/Object;)Z - public final fun getName ()Ljava/lang/String; - public final fun getStringAllocationStrategyFreeAfterCall ()Ljava/lang/Boolean; - public final fun getStringEncodingStrategy ()Ljava/lang/String; - public final fun getTypeName ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/github/charlietap/chasm/gradle/WasmReturnTypeData : java/io/Serializable { - public fun (Ljava/lang/String;Ljava/lang/String;)V - public final fun component1 ()Ljava/lang/String; - public final fun component2 ()Ljava/lang/String; - public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; - public static synthetic fun copy$default (Lio/github/charlietap/chasm/gradle/WasmReturnTypeData;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/github/charlietap/chasm/gradle/WasmReturnTypeData; - public fun equals (Ljava/lang/Object;)Z - public final fun getStringEncodingStrategy ()Ljava/lang/String; - public final fun getTypeName ()Ljava/lang/String; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; + public synthetic fun apply (Ljava/lang/Object;)V + public fun apply (Lorg/gradle/api/Project;)V }