From 8d8d6a8c085e9809ce0d9ab14183b6c286721dcb Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sun, 19 Nov 2023 17:01:25 -0500 Subject: [PATCH 01/36] Updates --- gradle/libs.versions.toml | 4 ++-- .../kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt | 3 +++ .../moshix/ir/compiler/MoshiIrGenerationExtension.kt | 2 ++ .../kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrUtil.kt | 3 +++ .../kotlin/dev/zacsweers/moshix/ir/compiler/MoshiSymbols.kt | 3 +++ .../dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt | 3 +++ .../moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt | 1 + .../sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt | 1 + 8 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dc1e9e0e..f40c862b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,10 +19,10 @@ gjf = "1.13.0" incap = "1.0.0" jdk = "20" jvmTarget = "11" -kotlin = "1.9.20" +kotlin = "2.0.0-Beta1" kotlinCompileTesting = "0.4.0" kotlinpoet = "1.15.0" -ksp = "1.9.20-1.0.14" +ksp = "2.0.0-Beta1-1.0.14" ktfmt = "0.46" moshi = "1.15.0" okhttp = "4.12.0" diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt index 9ebcef3d..6b6d05ca 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt @@ -1,3 +1,5 @@ +@file:OptIn(UnsafeDuringIrConstructionAPI::class) + package dev.zacsweers.moshix.ir.compiler import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext @@ -23,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classFqName import org.jetbrains.kotlin.ir.types.classifierOrNull diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrGenerationExtension.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrGenerationExtension.kt index a91fcaef..03b947cf 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrGenerationExtension.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrGenerationExtension.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.name.ClassId internal class MoshiIrGenerationExtension( @@ -29,6 +30,7 @@ internal class MoshiIrGenerationExtension( private val debug: Boolean ) : IrGenerationExtension { + @OptIn(UnsafeDuringIrConstructionAPI::class) override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { val generatedAnnotation = generatedAnnotationName?.let { name -> diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrUtil.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrUtil.kt index a4323e5e..ae97b896 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrUtil.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrUtil.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrGetEnumValue +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.classOrNull import org.jetbrains.kotlin.ir.util.file import org.jetbrains.kotlin.ir.util.getAnnotation @@ -38,6 +39,7 @@ import org.jetbrains.kotlin.name.FqName internal val JSON_ANNOTATION = FqName("com.squareup.moshi.Json") internal val JSON_QUALIFIER_ANNOTATION = FqName("com.squareup.moshi.JsonQualifier") +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun IrAnnotationContainer?.jsonQualifiers(): Set { if (this == null) return emptySet() return annotations.filterTo(LinkedHashSet()) { @@ -81,6 +83,7 @@ private val TargetProperty.isVisible: Boolean * Returns a generator for this property, or null if either there is an error and this property * cannot be used with code gen, or if no codegen is necessary for this property. */ +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun TargetProperty.generator( originalType: IrClass, errors: MutableList<(logger: MessageCollector) -> Unit> diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiSymbols.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiSymbols.kt index 6a999506..d88b96b4 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiSymbols.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiSymbols.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:OptIn(UnsafeDuringIrConstructionAPI::class) + package dev.zacsweers.moshix.ir.compiler import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext @@ -28,6 +30,7 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrPackageFragment import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.types.makeNotNull import org.jetbrains.kotlin.ir.types.makeNullable diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt index 77d1e80e..4b78d7eb 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +@file:OptIn(UnsafeDuringIrConstructionAPI::class) + package dev.zacsweers.moshix.ir.compiler.util import java.util.Locale @@ -87,6 +89,7 @@ import org.jetbrains.kotlin.ir.expressions.IrWhen import org.jetbrains.kotlin.ir.expressions.IrWhileLoop import org.jetbrains.kotlin.ir.expressions.impl.IrIfThenElseImpl import org.jetbrains.kotlin.ir.symbols.IrTypeAliasSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.IrDynamicType import org.jetbrains.kotlin.ir.types.IrErrorType import org.jetbrains.kotlin.ir.types.IrSimpleType diff --git a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt index 8f4106ef..f3d84fa6 100644 --- a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt +++ b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt @@ -177,6 +177,7 @@ class MoshiSealedSymbolProcessorProviderTest { sources = sourceFiles.toList() inheritClassPath = true symbolProcessorProviders = listOf(MoshiProguardGenSymbolProcessor.Provider()) + languageVersion = "1.9" block() } diff --git a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt index 9f888ed3..3103b47a 100644 --- a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt +++ b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt @@ -512,6 +512,7 @@ class MoshiSealedSymbolProcessorProviderTest { sources = sourceFiles.toList() inheritClassPath = true symbolProcessorProviders = listOf(MoshiSealedSymbolProcessorProvider()) + languageVersion = "1.9" } private fun compile( From 7cfb278fa330d5e6bba0ae2ba128bf7a1b8d971a Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 20 Nov 2023 14:31:30 -0500 Subject: [PATCH 02/36] Update KCT --- gradle/libs.versions.toml | 2 +- .../dev/zacsweers/moshix/ir/compiler/MoshiIrVisitorTest.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f40c862b..49f33576 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ incap = "1.0.0" jdk = "20" jvmTarget = "11" kotlin = "2.0.0-Beta1" -kotlinCompileTesting = "0.4.0" +kotlinCompileTesting = "0.5.0-alpha01" kotlinpoet = "1.15.0" ksp = "2.0.0-Beta1-1.0.14" ktfmt = "0.46" diff --git a/moshi-ir/moshi-compiler-plugin/src/test/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrVisitorTest.kt b/moshi-ir/moshi-compiler-plugin/src/test/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrVisitorTest.kt index 73f8b1db..e77d7f72 100644 --- a/moshi-ir/moshi-compiler-plugin/src/test/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrVisitorTest.kt +++ b/moshi-ir/moshi-compiler-plugin/src/test/kotlin/dev/zacsweers/moshix/ir/compiler/MoshiIrVisitorTest.kt @@ -1052,7 +1052,6 @@ class MoshiIrVisitorTest(private val useK2: Boolean) { sources = sourceFiles.asList() verbose = false jvmTarget = JvmTarget.fromString(System.getProperty("moshix.jvmTarget"))!!.description - supportsK2 = true // Necessary for K2 testing, even if useK2 itself isn't part of this test! kotlincArguments += listOf("-Xskip-prerelease-check", "-Xallow-unstable-dependencies") if (this@MoshiIrVisitorTest.useK2) { From a72d55429d5f509cccca4fb293e2570aa5cbdc05 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 20 Nov 2023 14:34:08 -0500 Subject: [PATCH 03/36] Cleanups --- build.gradle.kts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d55eba09..7f27c370 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import com.google.devtools.ksp.gradle.KspTask import com.vanniktech.maven.publish.MavenPublishBaseExtension import java.net.URI import org.jetbrains.dokka.gradle.DokkaTask @@ -87,15 +88,19 @@ subprojects { project.tasks.withType().configureEach { options.release.set(jvmTargetProvider) } } pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { - tasks.withType().configureEach { - compilerOptions { - jvmTarget.set(libs.versions.jvmTarget.map(JvmTarget::fromTarget)) - freeCompilerArgs.addAll("-Xjsr305=strict", "-progressive") - // TODO disabled because Gradle's Kotlin handling is silly - // https://github.com/gradle/gradle/issues/16779 - // allWarningsAsErrors = true + tasks + .withType() + .matching { it !is KspTask } + .configureEach { + compilerOptions { + jvmTarget.set(libs.versions.jvmTarget.map(JvmTarget::fromTarget)) + freeCompilerArgs.addAll("-Xjsr305=strict") + progressiveMode.set(true) + // TODO disabled because Gradle's Kotlin handling is silly + // https://github.com/gradle/gradle/issues/16779 + // allWarningsAsErrors = true + } } - } if ( project.name != "sample" && !project.path.contains("sample") && !project.path.contains("test") ) { From aad6d234b31051f516307fa452eac9f8e4ba93b6 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 20 Nov 2023 14:38:12 -0500 Subject: [PATCH 04/36] Update CI --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e3ddfcd9..5a224dfc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,18 +4,16 @@ on: [ push, pull_request ] jobs: build: - name: 'JDK ${{ matrix.java }} - KSP ${{ matrix.ksp_enabled }} - Kotlin ${{ matrix.kotlin }} - K2 ${{ matrix.k2_enabled }}' + name: 'JDK ${{ matrix.java }} - KSP ${{ matrix.ksp_enabled }} - K2 ${{ matrix.k2_enabled }}' runs-on: ubuntu-latest strategy: matrix: java: [ '20' ] - kotlin: [ '1.9.20' ] ksp_enabled: [ true, false ] k2_enabled: [ true, false ] fail-fast: false env: - DEP_OVERRIDE_kotlin: ${{ matrix.kotlin }} DEP_OVERRIDE_java: ${{ matrix.java }} steps: From dadd17551ac0014c918422e65e7bb4e4a9c4d390 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 00:39:28 -0500 Subject: [PATCH 05/36] Add .kotlin to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index fc1317f4..5a917282 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ gen/ .gradle/ .gradletasknamecache build/ +.kotlin/ # Local configuration file (sdk path, etc) local.properties From aa7bca40e37c41550b1dbae6258b0563fe1dc52c Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 00:45:46 -0500 Subject: [PATCH 06/36] Misc opt-ins and beta3 fixes --- .../kotlin/dev/zacsweers/moshix/ir/compiler/TargetTypes.kt | 3 +++ .../dev/zacsweers/moshix/ir/compiler/api/DelegateKey.kt | 4 ++++ .../moshix/ir/compiler/api/MoshiAdapterGenerator.kt | 6 ++++++ .../dev/zacsweers/moshix/ir/compiler/api/MoshiOrigin.kt | 4 +++- .../moshix/ir/compiler/sealed/MoshiSealedOrigin.kt | 4 +++- .../moshix/ir/compiler/sealed/MoshiSealedSymbols.kt | 2 ++ .../moshix/ir/compiler/sealed/SealedAdapterGenerator.kt | 6 ++++++ .../zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt | 2 +- .../main/kotlin/dev/zacsweers/moshix/ir/compiler/util/ir.kt | 6 ++++++ 9 files changed, 34 insertions(+), 3 deletions(-) diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/TargetTypes.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/TargetTypes.kt index b19898d6..3b9588e4 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/TargetTypes.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/TargetTypes.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.hasDefaultValue @@ -163,6 +164,7 @@ internal fun targetType( ) } +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun primaryConstructor(targetType: IrClass): TargetConstructor? { val primaryConstructor = targetType.primaryConstructor ?: return null @@ -185,6 +187,7 @@ internal fun primaryConstructor(targetType: IrClass): TargetConstructor? { return TargetConstructor(primaryConstructor, parameters, primaryConstructor.visibility) } +@OptIn(UnsafeDuringIrConstructionAPI::class) private fun declaredProperties( constructor: TargetConstructor, classDecl: IrClass, diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/DelegateKey.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/DelegateKey.kt index 3b032102..008768a2 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/DelegateKey.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/DelegateKey.kt @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrTypeProjection @@ -66,6 +67,7 @@ internal data class DelegateKey( get() = delegateType.isNullable() /** Returns an adapter to use when encoding and decoding this property. */ + @OptIn(UnsafeDuringIrConstructionAPI::class) internal fun generateProperty( pluginContext: IrPluginContext, moshiSymbols: MoshiSymbols, @@ -203,6 +205,7 @@ private fun IrBuilderWithScope.addAnnotationsParam( private fun List.toVariableNames() = joinToString("") { it.toVariableName() } /** Returns a suggested variable name derived from a type name, like nullableListOfString. */ +@OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrType.toVariableName(): String { val base = when (val classifier = classifierOrNull) { @@ -234,6 +237,7 @@ private fun IrType.toVariableName(): String { * are too late to properly use it hear, and also avoids some possible conflicts with * kotlin-reflect. */ +@OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrBuilderWithScope.renderType( moshiSymbols: MoshiSymbols, delegateType: IrType, diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt index 82789614..f91d1c16 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt @@ -85,6 +85,7 @@ import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall import org.jetbrains.kotlin.ir.expressions.addArgument import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrTypeArgument import org.jetbrains.kotlin.ir.types.classifierOrFail @@ -306,6 +307,7 @@ internal class MoshiAdapterGenerator( } } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrClass.generateToJsonFun(adapterProperties: Map): IrFunction { return addOverride( FqName("com.squareup.moshi.JsonAdapter"), @@ -384,6 +386,7 @@ internal class MoshiAdapterGenerator( } } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrClass.generateFromJsonFun( adapterProperties: Map, optionsField: IrField, @@ -639,6 +642,7 @@ internal class MoshiAdapterGenerator( } } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrBuilderWithScope.buildWhileHasNextLoop( fieldsHolder: IrValueParameter, optionsField: IrField, @@ -801,6 +805,7 @@ internal class MoshiAdapterGenerator( // TODO currently this creates an exception and just steals its message, // would be nice if we had a separate utility? Not a big deal regardless // since we're gonna error at the end anyway + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrBuilderWithScope.addError( errors: IrVariable, property: PropertyGenerator, @@ -872,6 +877,7 @@ internal class MoshiAdapterGenerator( } } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrBuilderWithScope.generateJsonAdapterSuperConstructorCall(): IrDelegatingConstructorCall { return IrDelegatingConstructorCallImpl.fromSymbolOwner( diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiOrigin.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiOrigin.kt index c5f7750f..49daddbc 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiOrigin.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiOrigin.kt @@ -15,6 +15,8 @@ */ package dev.zacsweers.moshix.ir.compiler.api +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl -internal object MoshiOrigin : IrDeclarationOriginImpl("GENERATED_MOSHI_ADAPTER_CLASS") +internal val MoshiOrigin: IrDeclarationOrigin = + IrDeclarationOriginImpl("GENERATED_MOSHI_ADAPTER_CLASS") diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedOrigin.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedOrigin.kt index f4864294..b1ca4185 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedOrigin.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedOrigin.kt @@ -15,6 +15,8 @@ */ package dev.zacsweers.moshix.ir.compiler.sealed +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl -internal object MoshiSealedOrigin : IrDeclarationOriginImpl("GENERATED_MOSHI_SEALED_ADAPTER_CLASS") +internal val MoshiSealedOrigin: IrDeclarationOrigin = + IrDeclarationOriginImpl("GENERATED_MOSHI_SEALED_ADAPTER_CLASS") diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedSymbols.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedSymbols.kt index 69fb38cd..a1a128c0 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedSymbols.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/MoshiSealedSymbols.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.builders.declarations.addFunction import org.jetbrains.kotlin.ir.builders.declarations.addTypeParameter import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter import org.jetbrains.kotlin.ir.declarations.IrPackageFragment +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.defaultType import org.jetbrains.kotlin.ir.types.makeNullable import org.jetbrains.kotlin.ir.types.typeWith @@ -34,6 +35,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.Variance +@OptIn(UnsafeDuringIrConstructionAPI::class) internal class MoshiSealedSymbols(private val moshiSymbols: MoshiSymbols) : BaseSymbols(moshiSymbols) { diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/SealedAdapterGenerator.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/SealedAdapterGenerator.kt index adc3d02b..4657ef1f 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/SealedAdapterGenerator.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/sealed/SealedAdapterGenerator.kt @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl import org.jetbrains.kotlin.ir.interpreter.hasAnnotation import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.createType @@ -84,6 +85,7 @@ private constructor( private val target: IrClass, private val labelKey: String, ) : AdapterGenerator { + @OptIn(UnsafeDuringIrConstructionAPI::class) override fun prepare(): PreparedAdapter? { // If this is a nested sealed type of a moshi-sealed parent, defer to the parent val sealedParent = @@ -222,6 +224,7 @@ private constructor( } } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun walkTypeLabels( rootType: IrClass, subtype: IrClass, @@ -512,6 +515,7 @@ private constructor( return PreparedAdapter(adapterCls) } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrClass.generateToJsonFun(delegateField: IrField): IrFunction { return addOverride( FqName("com.squareup.moshi.JsonAdapter"), @@ -544,6 +548,7 @@ private constructor( } } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrClass.generateFromJsonFun(delegateField: IrField): IrFunction { return addOverride( FqName("com.squareup.moshi.JsonAdapter"), @@ -594,6 +599,7 @@ private constructor( return ctor } + @OptIn(UnsafeDuringIrConstructionAPI::class) private fun IrBuilderWithScope.generateJsonAdapterSuperConstructorCall(): IrDelegatingConstructorCall { return IrDelegatingConstructorCallImpl.fromSymbolOwner( diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt index d8495bfc..ef65a499 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/IrSourcePrinter.kt @@ -453,7 +453,7 @@ internal class IrSourcePrinterVisitor(out: Appendable, indentUnit: String = " " print(".") } - val prop = (function as? IrSimpleFunction)?.correspondingPropertySymbol?.owner + val prop = function.correspondingPropertySymbol?.owner if (prop != null) { val propName = prop.name.asString() diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/ir.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/ir.kt index cffc1466..3f16a695 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/ir.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/util/ir.kt @@ -59,6 +59,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol +import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType @@ -158,6 +159,7 @@ internal fun IrSimpleFunction.overridesFunctionIn(fqName: FqName): Boolean = parentClassOrNull?.fqNameWhenAvailable == fqName || allOverridden().any { it.parentClassOrNull?.fqNameWhenAvailable == fqName } +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun IrPluginContext.createIrBuilder(symbol: IrSymbol): DeclarationIrBuilder { return DeclarationIrBuilder(this, symbol, symbol.owner.startOffset, symbol.owner.endOffset) } @@ -212,6 +214,7 @@ internal fun IrType.rawType(): IrClass { } /** Returns the raw [IrClass] of this [IrType] or null. */ +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun IrType.rawTypeOrNull(): IrClass? { return when (val classifier = classifierOrNull) { is IrClassSymbol -> classifier.owner @@ -219,6 +222,7 @@ internal fun IrType.rawTypeOrNull(): IrClass? { } } +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun IrClass.addOverride( baseFqName: FqName, name: String, @@ -246,6 +250,7 @@ internal fun IrClass.addOverride( } } +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun IrBuilderWithScope.irBinOp( pluginContext: IrPluginContext, name: Name, @@ -258,6 +263,7 @@ internal fun IrBuilderWithScope.irBinOp( return irInvoke(lhs, symbol, rhs) } +@OptIn(UnsafeDuringIrConstructionAPI::class) internal fun IrBuilderWithScope.irInvoke( dispatchReceiver: IrExpression? = null, callee: IrFunctionSymbol, From 169a16269e7408c018cc197406aa82dc913865ab Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 13:48:01 -0500 Subject: [PATCH 07/36] Update KCT to alpha02 --- gradle/libs.versions.toml | 2 +- .../proguardgen/MoshiProguardGenSymbolProcessorTest.kt | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2343a8d7..278ea2a1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ incap = "1.0.0" jdk = "21" jvmTarget = "11" kotlin = "2.0.0-Beta3" -kotlinCompileTesting = "0.5.0-alpha01" +kotlinCompileTesting = "0.5.0-alpha02" kotlinpoet = "1.16.0" ksp = "2.0.0-Beta3-1.0.17" ktfmt = "0.47" diff --git a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt index 5c1892d5..87530671 100644 --- a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt +++ b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt @@ -103,7 +103,7 @@ class MoshiSealedSymbolProcessorProviderTest { ) val compilation = - prepareCompilation(source) { kspArgs[OPTION_GENERATE_PROGUARD_RULES] = "false" } + prepareCompilation(source) { kspArgs += mapOf(OPTION_GENERATE_PROGUARD_RULES to "false") } val result = compilation.compile() assertThat(result.exitCode).isEqualTo(ExitCode.OK) assertThat(result.generatedFiles.filter { it.extension == "pro" }).isEmpty() @@ -136,7 +136,9 @@ class MoshiSealedSymbolProcessorProviderTest { ) val compilation = - prepareCompilation(source) { kspArgs[OPTION_GENERATE_MOSHI_CORE_PROGUARD_RULES] = "true" } + prepareCompilation(source) { + kspArgs += mapOf(OPTION_GENERATE_MOSHI_CORE_PROGUARD_RULES to "true") + } val result = compilation.compile() assertThat(result.exitCode).isEqualTo(ExitCode.OK) val generatedSourcesDir = compilation.kspSourcesDir From a6e2c0443b2f77ceeffac5047806999b260c72cc Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:36:21 -0500 Subject: [PATCH 08/36] Update KCT + add KSP2 testing --- .github/workflows/ci.yml | 16 +++++- gradle/libs.versions.toml | 7 ++- moshi-proguard-rule-gen/build.gradle.kts | 17 +++++- .../MoshiProguardGenSymbolProcessorTest.kt | 57 +++++++++++-------- moshi-sealed/codegen/build.gradle.kts | 18 +++++- .../ksp/MoshiSealedSymbolProcessorTest.kt | 12 +++- 6 files changed, 92 insertions(+), 35 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8b5de8b3..3e4a948f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,16 +1,26 @@ name: CI -on: [ push, pull_request ] +on: + # Only run push on main + push: + branches: + - main + paths-ignore: + - '**/*.md' + # Always run on PRs + pull_request: + branches: [ main ] jobs: build: - name: 'JDK ${{ matrix.java }} - KSP ${{ matrix.ksp_enabled }} - K2 ${{ matrix.k2_enabled }}' + name: 'JDK ${{ matrix.java }} / KSP ${{ matrix.ksp_enabled }} / K2 ${{ matrix.k2_enabled }} / KSP2 ${{ matrix.ksp2_enabled }}' runs-on: ubuntu-latest strategy: matrix: java: [ '21' ] ksp_enabled: [ true, false ] k2_enabled: [ true, false ] + ksp2_enabled: [ true, false ] fail-fast: false env: @@ -30,7 +40,7 @@ jobs: java-version: ${{ matrix.java }} - name: Build project - run: ./gradlew build check -Pmoshix.useKsp=${{ matrix.ksp_enabled }} -Pkotlin.experimental.tryK2=${{ matrix.k2_enabled }} --stacktrace + run: ./gradlew build check -Pmoshix.useKsp=${{ matrix.ksp_enabled }} -Pkotlin.experimental.tryK2=${{ matrix.k2_enabled }} -D kct.test.useKsp2=${{ matrix.ksp2_enabled }} --quiet publish-snapshot: needs: 'build' diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 278ea2a1..27c7d8b0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ incap = "1.0.0" jdk = "21" jvmTarget = "11" kotlin = "2.0.0-Beta3" -kotlinCompileTesting = "0.5.0-alpha02" +kotlinCompileTesting = "0.5.0-alpha03" kotlinpoet = "1.16.0" ksp = "2.0.0-Beta3-1.0.17" ktfmt = "0.47" @@ -63,8 +63,11 @@ kotlinpoet-metadata = { module = "com.squareup:kotlinpoet-metadata", version.ref kotlinpoet-ksp = { module = "com.squareup:kotlinpoet-ksp", version.ref = "kotlinpoet" } ksp = { module = "com.google.devtools.ksp:symbol-processing", version.ref = "ksp" } -ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" } ksp-gradlePlugin = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "ksp" } +ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" } +ksp-cli = { module = "com.google.devtools.ksp:symbol-processing-cmdline", version.ref = "ksp" } +ksp-aa-embeddable = { module = "com.google.devtools.ksp:symbol-processing-aa-embeddable", version.ref = "ksp" } +ksp-commonDeps = { module = "com.google.devtools.ksp:symbol-processing-common-deps", version.ref = "ksp" } # Only present to trigger automatic renovate updates ktfmt = { module = "com.facebook:ktfmt", version.ref = "ktfmt" } diff --git a/moshi-proguard-rule-gen/build.gradle.kts b/moshi-proguard-rule-gen/build.gradle.kts index 4eef2fca..0539fd98 100644 --- a/moshi-proguard-rule-gen/build.gradle.kts +++ b/moshi-proguard-rule-gen/build.gradle.kts @@ -24,12 +24,15 @@ plugins { tasks.withType().configureEach { compilerOptions { - freeCompilerArgs.addAll("-opt-in=org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") + optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerAp") } } -tasks.withType().configureEach { +// It's not possible to test both KSP 1 and KSP 2 in the same compilation unit +val testKsp2 = providers.systemProperty("kct.test.useKsp2").getOrElse("false").toBoolean() +tasks.test { systemProperty("moshix.jvmTarget", libs.versions.jvmTarget.get()) + systemProperty("kct.test.useKsp2", testKsp2) } dependencies { @@ -46,7 +49,15 @@ dependencies { ksp(libs.autoService.ksp) testImplementation(libs.ksp.api) - testImplementation(libs.ksp) + if (testKsp2) { + testImplementation(libs.ksp.aa.embeddable) { + exclude(group = "com.google.devtools.ksp", module = "common-deps") + } + testImplementation(libs.ksp.commonDeps) + testImplementation(libs.ksp.cli) + } else { + testImplementation(libs.ksp) + } testImplementation(libs.truth) testImplementation(libs.junit) testImplementation(libs.kotlinCompileTesting) diff --git a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt index 87530671..0b604cf2 100644 --- a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt +++ b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt @@ -20,16 +20,22 @@ import com.tschuchort.compiletesting.KotlinCompilation import com.tschuchort.compiletesting.KotlinCompilation.ExitCode import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.SourceFile.Companion.kotlin +import com.tschuchort.compiletesting.configureKsp import com.tschuchort.compiletesting.kspArgs +import com.tschuchort.compiletesting.kspProcessorOptions import com.tschuchort.compiletesting.kspSourcesDir -import com.tschuchort.compiletesting.symbolProcessorProviders +import com.tschuchort.compiletesting.useKsp2 import dev.zacsweers.moshix.proguardgen.MoshiProguardGenSymbolProcessor.Companion.OPTION_GENERATE_MOSHI_CORE_PROGUARD_RULES import dev.zacsweers.moshix.proguardgen.MoshiProguardGenSymbolProcessor.Companion.OPTION_GENERATE_PROGUARD_RULES +import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import java.io.File import org.junit.Test +@OptIn(ExperimentalCompilerApi::class) class MoshiSealedSymbolProcessorProviderTest { + private val useKSP2 = System.getProperty("kct.test.useKsp2", "false").toBoolean() + @Test fun `standard test with only sealed enabled`() { val source = @@ -103,7 +109,7 @@ class MoshiSealedSymbolProcessorProviderTest { ) val compilation = - prepareCompilation(source) { kspArgs += mapOf(OPTION_GENERATE_PROGUARD_RULES to "false") } + prepareCompilation(source) { kspProcessorOptions += mapOf(OPTION_GENERATE_PROGUARD_RULES to "false") } val result = compilation.compile() assertThat(result.exitCode).isEqualTo(ExitCode.OK) assertThat(result.generatedFiles.filter { it.extension == "pro" }).isEmpty() @@ -114,30 +120,29 @@ class MoshiSealedSymbolProcessorProviderTest { val source = kotlin( "BaseType.kt", - """ - package test - import com.squareup.moshi.JsonClass - import dev.zacsweers.moshix.sealed.annotations.TypeLabel - import dev.zacsweers.moshix.sealed.annotations.NestedSealed + """package test - @JsonClass(generateAdapter = true, generator = "sealed:type") - sealed class BaseType { - @TypeLabel("a", ["aa"]) - class TypeA : BaseType() - @TypeLabel("b") - class TypeB : BaseType() - @NestedSealed - sealed class TypeC : BaseType() { - @TypeLabel("c") - class TypeCImpl : TypeC() - } - } - """, +import com.squareup.moshi.JsonClass +import dev.zacsweers.moshix.sealed.annotations.NestedSealed +import dev.zacsweers.moshix.sealed.annotations.TypeLabel + +@JsonClass(generateAdapter = true, generator = "sealed:type") +sealed class BaseType { + @TypeLabel("a", ["aa"]) class TypeA : BaseType() + + @TypeLabel("b") class TypeB : BaseType() + + @NestedSealed + sealed class TypeC : BaseType() { + @TypeLabel("c") class TypeCImpl : TypeC() + } +} +""", ) val compilation = prepareCompilation(source) { - kspArgs += mapOf(OPTION_GENERATE_MOSHI_CORE_PROGUARD_RULES to "true") + kspProcessorOptions += mapOf(OPTION_GENERATE_MOSHI_CORE_PROGUARD_RULES to "true") } val result = compilation.compile() assertThat(result.exitCode).isEqualTo(ExitCode.OK) @@ -178,8 +183,14 @@ class MoshiSealedSymbolProcessorProviderTest { KotlinCompilation().apply { sources = sourceFiles.toList() inheritClassPath = true - symbolProcessorProviders = listOf(MoshiProguardGenSymbolProcessor.Provider()) - languageVersion = "1.9" + if (useKSP2) { + useKsp2() + } else { + languageVersion = "1.9" + } + configureKsp { + symbolProcessorProviders += MoshiProguardGenSymbolProcessor.Provider() + } block() } diff --git a/moshi-sealed/codegen/build.gradle.kts b/moshi-sealed/codegen/build.gradle.kts index ff4be18f..03d64028 100644 --- a/moshi-sealed/codegen/build.gradle.kts +++ b/moshi-sealed/codegen/build.gradle.kts @@ -40,10 +40,16 @@ tasks.withType().configureEach { tasks.withType().configureEach { compilerOptions { - freeCompilerArgs.addAll("-opt-in=org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") + optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } } +// It's not possible to test both KSP 1 and KSP 2 in the same compilation unit +val testKsp2 = providers.systemProperty("kct.test.useKsp2").getOrElse("false").toBoolean() +tasks.test { + systemProperty("kct.test.useKsp2", testKsp2) +} + dependencies { implementation(libs.autoService) implementation(project(":moshi-proguard-rule-gen")) @@ -61,8 +67,16 @@ dependencies { implementation(libs.moshi) implementation(project(":moshi-sealed:runtime")) + if (testKsp2) { + testImplementation(libs.ksp.aa.embeddable) { + exclude(group = "com.google.devtools.ksp", module = "common-deps") + } + testImplementation(libs.ksp.commonDeps) + testImplementation(libs.ksp.cli) + } else { + testImplementation(libs.ksp) + } testImplementation(libs.ksp.api) - testImplementation(libs.ksp) testImplementation(libs.truth) testImplementation(libs.junit) testImplementation(libs.kotlinCompileTesting) diff --git a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt index 36accad5..77a9e810 100644 --- a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt +++ b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt @@ -21,13 +21,17 @@ import com.tschuchort.compiletesting.KotlinCompilation import com.tschuchort.compiletesting.KotlinCompilation.ExitCode import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.SourceFile.Companion.kotlin +import com.tschuchort.compiletesting.configureKsp import com.tschuchort.compiletesting.kspSourcesDir import com.tschuchort.compiletesting.symbolProcessorProviders +import com.tschuchort.compiletesting.useKsp2 import java.io.File import org.junit.Test class MoshiSealedSymbolProcessorProviderTest { + private val useKSP2 = System.getProperty("kct.test.useKsp2", "false").toBoolean() + @Test fun smokeTest() { val source = @@ -509,8 +513,12 @@ class MoshiSealedSymbolProcessorProviderTest { KotlinCompilation().apply { sources = sourceFiles.toList() inheritClassPath = true - symbolProcessorProviders = listOf(MoshiSealedSymbolProcessorProvider()) - languageVersion = "1.9" + if (useKSP2) { + useKsp2() + } else { + languageVersion = "1.9" + } + configureKsp { symbolProcessorProviders += MoshiSealedSymbolProcessorProvider() } } private fun compile(vararg sourceFiles: SourceFile): CompilationResult { From bda91502d5eedc2b6fc1195e648ddf53c250b43b Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:38:44 -0500 Subject: [PATCH 09/36] Add exclusions --- .github/workflows/ci.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3e4a948f..97314e3a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,6 +21,14 @@ jobs: ksp_enabled: [ true, false ] k2_enabled: [ true, false ] ksp2_enabled: [ true, false ] + # Need to exclude any k2/ksp2 combo where ksp2 is enabled but k2 is not + exclude: + - k2_enabled: false + ksp2_enabled: true + - ksp_enabled: false + ksp2_enabled: true + - ksp_enabled: false + ksp2_enabled: false fail-fast: false env: From be85d1935ccf99d779b72a7e497c212b503833c7 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:39:33 -0500 Subject: [PATCH 10/36] Spotless --- moshi-proguard-rule-gen/build.gradle.kts | 5 ++--- .../MoshiProguardGenSymbolProcessorTest.kt | 11 +++++------ moshi-sealed/codegen/build.gradle.kts | 9 +++------ 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/moshi-proguard-rule-gen/build.gradle.kts b/moshi-proguard-rule-gen/build.gradle.kts index 0539fd98..5d51b2c0 100644 --- a/moshi-proguard-rule-gen/build.gradle.kts +++ b/moshi-proguard-rule-gen/build.gradle.kts @@ -23,13 +23,12 @@ plugins { } tasks.withType().configureEach { - compilerOptions { - optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerAp") - } + compilerOptions { optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerAp") } } // It's not possible to test both KSP 1 and KSP 2 in the same compilation unit val testKsp2 = providers.systemProperty("kct.test.useKsp2").getOrElse("false").toBoolean() + tasks.test { systemProperty("moshix.jvmTarget", libs.versions.jvmTarget.get()) systemProperty("kct.test.useKsp2", testKsp2) diff --git a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt index 0b604cf2..f6c3a6c0 100644 --- a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt +++ b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt @@ -21,14 +21,13 @@ import com.tschuchort.compiletesting.KotlinCompilation.ExitCode import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.SourceFile.Companion.kotlin import com.tschuchort.compiletesting.configureKsp -import com.tschuchort.compiletesting.kspArgs import com.tschuchort.compiletesting.kspProcessorOptions import com.tschuchort.compiletesting.kspSourcesDir import com.tschuchort.compiletesting.useKsp2 import dev.zacsweers.moshix.proguardgen.MoshiProguardGenSymbolProcessor.Companion.OPTION_GENERATE_MOSHI_CORE_PROGUARD_RULES import dev.zacsweers.moshix.proguardgen.MoshiProguardGenSymbolProcessor.Companion.OPTION_GENERATE_PROGUARD_RULES -import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import java.io.File +import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import org.junit.Test @OptIn(ExperimentalCompilerApi::class) @@ -109,7 +108,9 @@ class MoshiSealedSymbolProcessorProviderTest { ) val compilation = - prepareCompilation(source) { kspProcessorOptions += mapOf(OPTION_GENERATE_PROGUARD_RULES to "false") } + prepareCompilation(source) { + kspProcessorOptions += mapOf(OPTION_GENERATE_PROGUARD_RULES to "false") + } val result = compilation.compile() assertThat(result.exitCode).isEqualTo(ExitCode.OK) assertThat(result.generatedFiles.filter { it.extension == "pro" }).isEmpty() @@ -188,9 +189,7 @@ sealed class BaseType { } else { languageVersion = "1.9" } - configureKsp { - symbolProcessorProviders += MoshiProguardGenSymbolProcessor.Provider() - } + configureKsp { symbolProcessorProviders += MoshiProguardGenSymbolProcessor.Provider() } block() } diff --git a/moshi-sealed/codegen/build.gradle.kts b/moshi-sealed/codegen/build.gradle.kts index 03d64028..5dfed3a9 100644 --- a/moshi-sealed/codegen/build.gradle.kts +++ b/moshi-sealed/codegen/build.gradle.kts @@ -39,16 +39,13 @@ tasks.withType().configureEach { } tasks.withType().configureEach { - compilerOptions { - optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") - } + compilerOptions { optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } } // It's not possible to test both KSP 1 and KSP 2 in the same compilation unit val testKsp2 = providers.systemProperty("kct.test.useKsp2").getOrElse("false").toBoolean() -tasks.test { - systemProperty("kct.test.useKsp2", testKsp2) -} + +tasks.test { systemProperty("kct.test.useKsp2", testKsp2) } dependencies { implementation(libs.autoService) From 6be1472ee2a4b9915efa56e4b23a91204864f78f Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:41:03 -0500 Subject: [PATCH 11/36] Oops one too many --- .github/workflows/ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97314e3a..12d21c0c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,8 +27,6 @@ jobs: ksp2_enabled: true - ksp_enabled: false ksp2_enabled: true - - ksp_enabled: false - ksp2_enabled: false fail-fast: false env: From 06a2077679b555440a50beed5634d04f12f2c835 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:41:18 -0500 Subject: [PATCH 12/36] concurrency --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 12d21c0c..690d375b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,10 @@ on: pull_request: branches: [ main ] +concurrency: + group: 'ci-${{ github.event.merge_group.head_ref || github.head_ref }}-${{ github.workflow }}' + cancel-in-progress: true + jobs: build: name: 'JDK ${{ matrix.java }} / KSP ${{ matrix.ksp_enabled }} / K2 ${{ matrix.k2_enabled }} / KSP2 ${{ matrix.ksp2_enabled }}' From c0edb9a3280609cf60ef7540fe0833a7149d4636 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:43:00 -0500 Subject: [PATCH 13/36] Remove JDK from matrix --- .github/workflows/ci.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c40ed13e..a56852b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,11 +17,10 @@ concurrency: jobs: build: - name: 'JDK ${{ matrix.java }} / KSP ${{ matrix.ksp_enabled }} / K2 ${{ matrix.k2_enabled }} / KSP2 ${{ matrix.ksp2_enabled }}' + name: 'KSP ${{ matrix.ksp_enabled }} / K2 ${{ matrix.k2_enabled }} / KSP2 ${{ matrix.ksp2_enabled }}' runs-on: ubuntu-latest strategy: matrix: - java: [ '21' ] ksp_enabled: [ true, false ] k2_enabled: [ true, false ] ksp2_enabled: [ true, false ] @@ -33,9 +32,6 @@ jobs: ksp2_enabled: true fail-fast: false - env: - DEP_OVERRIDE_java: ${{ matrix.java }} - steps: - name: Checkout uses: actions/checkout@v4 @@ -47,7 +43,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: ${{ matrix.java }} + java-version: '21' - name: Build project run: ./gradlew build check -Pmoshix.useKsp=${{ matrix.ksp_enabled }} -Pkotlin.experimental.tryK2=${{ matrix.k2_enabled }} -D kct.test.useKsp2=${{ matrix.ksp2_enabled }} --quiet From 8cc135857b5f4677cb187f6230949ed785748844 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:45:13 -0500 Subject: [PATCH 14/36] Typo --- moshi-proguard-rule-gen/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/moshi-proguard-rule-gen/build.gradle.kts b/moshi-proguard-rule-gen/build.gradle.kts index 5d51b2c0..e6b2392e 100644 --- a/moshi-proguard-rule-gen/build.gradle.kts +++ b/moshi-proguard-rule-gen/build.gradle.kts @@ -22,8 +22,8 @@ plugins { alias(libs.plugins.ksp) } -tasks.withType().configureEach { - compilerOptions { optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerAp") } +kotlin { + compilerOptions { optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } } // It's not possible to test both KSP 1 and KSP 2 in the same compilation unit From 399b895f10d54cdb04854b4e5874658ee6560b81 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:46:24 -0500 Subject: [PATCH 15/36] Spotless --- moshi-proguard-rule-gen/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/moshi-proguard-rule-gen/build.gradle.kts b/moshi-proguard-rule-gen/build.gradle.kts index e6b2392e..3f57399d 100644 --- a/moshi-proguard-rule-gen/build.gradle.kts +++ b/moshi-proguard-rule-gen/build.gradle.kts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { alias(libs.plugins.kotlinJvm) From 085830219e3cf819b8f92d538d09c3167d0a606d Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:51:37 -0500 Subject: [PATCH 16/36] Enable CC --- gradle.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle.properties b/gradle.properties index 19b4e75a..5370a72f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,6 +33,7 @@ SONATYPE_STAGING_PROFILE=dev.zacsweers RELEASE_SIGNING_ENABLED=true org.gradle.configureondemand=false +org.gradle.configuration-cache=true kapt.include.compile.classpath=false From d700886b33ec318fad036efb53653f56fe634d6b Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:52:20 -0500 Subject: [PATCH 17/36] Enable caching and COD --- gradle.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5370a72f..4b3ac735 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,7 +32,8 @@ POM_DEVELOPER_NAME=Zac Sweers SONATYPE_STAGING_PROFILE=dev.zacsweers RELEASE_SIGNING_ENABLED=true -org.gradle.configureondemand=false +org.gradle.caching=true +org.gradle.configureondemand=true org.gradle.configuration-cache=true kapt.include.compile.classpath=false From 020b7d9aa2350af58e52bf281e6d170774b6906f Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:52:24 -0500 Subject: [PATCH 18/36] Fixes --- .../moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt | 4 +++- .../sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt index f6c3a6c0..3d0d0e4f 100644 --- a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt +++ b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt @@ -189,7 +189,9 @@ sealed class BaseType { } else { languageVersion = "1.9" } - configureKsp { symbolProcessorProviders += MoshiProguardGenSymbolProcessor.Provider() } + configureKsp(useKSP2) { + symbolProcessorProviders += MoshiProguardGenSymbolProcessor.Provider() + } block() } diff --git a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt index 77a9e810..cfd47df3 100644 --- a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt +++ b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt @@ -518,7 +518,7 @@ class MoshiSealedSymbolProcessorProviderTest { } else { languageVersion = "1.9" } - configureKsp { symbolProcessorProviders += MoshiSealedSymbolProcessorProvider() } + configureKsp(useKSP2) { symbolProcessorProviders += MoshiSealedSymbolProcessorProvider() } } private fun compile(vararg sourceFiles: SourceFile): CompilationResult { From cb9ae2e8b97df755f309994f55628f61765c06c9 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:55:47 -0500 Subject: [PATCH 19/36] Disable CC in publishing --- publish.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/publish.sh b/publish.sh index 2af4dd18..c6bd7aa7 100755 --- a/publish.sh +++ b/publish.sh @@ -3,8 +3,8 @@ if [[ "$1" = "--local" ]]; then local=true; fi if ! [[ ${local} ]]; then - ./gradlew -p moshi-ir/moshi-gradle-plugin publish -x dokkaHtml - ./gradlew publish -x dokkaHtml + ./gradlew -p moshi-ir/moshi-gradle-plugin publish -x dokkaHtml --no-configuration-cache + ./gradlew publish -x dokkaHtml --no-configuration-cache else ./gradlew -p moshi-ir/moshi-gradle-plugin publishToMavenLocal -x dokkaHtml ./gradlew publishToMavenLocal -x dokkaHtml From 5875041b006ad3a8f087abd70e00bc6838413769 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Sat, 3 Feb 2024 15:57:55 -0500 Subject: [PATCH 20/36] Mark validateProguardRules as not CC compatible --- moshi-ir/moshi-kotlin-tests/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/moshi-ir/moshi-kotlin-tests/build.gradle.kts b/moshi-ir/moshi-kotlin-tests/build.gradle.kts index cb530a29..2ddcf2ed 100644 --- a/moshi-ir/moshi-kotlin-tests/build.gradle.kts +++ b/moshi-ir/moshi-kotlin-tests/build.gradle.kts @@ -27,6 +27,7 @@ moshi { enableSealed.set(true) } val proguardRuleValidator = tasks.register("validateProguardRules") { doNotTrackState("This is a validation task that should always run") + notCompatibleWithConfigurationCache("This task always runs") doLast { logger.lifecycle("Validating proguard rules") val proguardRulesDir = project.file("build/generated/ksp/test/resources/META-INF/proguard") From 3820d9e225bd30efbb3d01bc46804cbd74c4d60c Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Tue, 13 Feb 2024 22:00:12 -0500 Subject: [PATCH 21/36] Beta4 --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fa2d0e6d..9c91eec8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,10 +19,10 @@ gjf = "1.17.0" incap = "1.0.0" jdk = "21" jvmTarget = "11" -kotlin = "2.0.0-Beta3" +kotlin = "2.0.0-Beta4" kotlinCompileTesting = "0.5.0-alpha03" kotlinpoet = "1.16.0" -ksp = "2.0.0-Beta3-1.0.17" +ksp = "2.0.0-Beta4-1.0.17" ktfmt = "0.47" moshi = "1.15.1" okhttp = "4.12.0" From bc3b493798179d6037688aebba5a01bd667344bd Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Tue, 5 Mar 2024 16:14:37 -0500 Subject: [PATCH 22/36] Update KSP2 and KCT bits --- build.gradle.kts | 2 +- gradle/libs.versions.toml | 2 +- moshi-proguard-rule-gen/build.gradle.kts | 23 +++---------- .../MoshiProguardGenSymbolProcessorTest.kt | 15 +++++++-- moshi-sealed/codegen/build.gradle.kts | 33 ++++--------------- .../ksp/MoshiSealedSymbolProcessorTest.kt | 14 ++++++-- 6 files changed, 36 insertions(+), 53 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 25b73a82..7a81c693 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import com.google.devtools.ksp.gradle.KspTask import com.android.build.api.dsl.Lint +import com.google.devtools.ksp.gradle.KspTask import com.vanniktech.maven.publish.MavenPublishBaseExtension import java.net.URI import org.jetbrains.dokka.gradle.DokkaTask diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3c203ff9..239697a1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ incap = "1.0.0" jdk = "21" jvmTarget = "11" kotlin = "2.0.0-Beta4" -kotlinCompileTesting = "0.5.0-alpha03" +kotlinCompileTesting = "0.5.0-alpha05" kotlinpoet = "1.16.0" ksp = "2.0.0-Beta4-1.0.18" ktfmt = "0.47" diff --git a/moshi-proguard-rule-gen/build.gradle.kts b/moshi-proguard-rule-gen/build.gradle.kts index 3f57399d..de3fb6cf 100644 --- a/moshi-proguard-rule-gen/build.gradle.kts +++ b/moshi-proguard-rule-gen/build.gradle.kts @@ -21,21 +21,17 @@ plugins { alias(libs.plugins.ksp) } -kotlin { - compilerOptions { optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } -} - -// It's not possible to test both KSP 1 and KSP 2 in the same compilation unit -val testKsp2 = providers.systemProperty("kct.test.useKsp2").getOrElse("false").toBoolean() +kotlin { compilerOptions.optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } tasks.test { systemProperty("moshix.jvmTarget", libs.versions.jvmTarget.get()) - systemProperty("kct.test.useKsp2", testKsp2) + // KSP2 needs more memory to run + minHeapSize = "1024m" + maxHeapSize = "1024m" } dependencies { compileOnly(libs.kotlin.compilerEmbeddable) - compileOnly(libs.ksp) compileOnly(libs.ksp.api) implementation(libs.autoService) @@ -46,20 +42,9 @@ dependencies { ksp(libs.autoService.ksp) - testImplementation(libs.ksp.api) - if (testKsp2) { - testImplementation(libs.ksp.aa.embeddable) { - exclude(group = "com.google.devtools.ksp", module = "common-deps") - } - testImplementation(libs.ksp.commonDeps) - testImplementation(libs.ksp.cli) - } else { - testImplementation(libs.ksp) - } testImplementation(libs.truth) testImplementation(libs.junit) testImplementation(libs.kotlinCompileTesting) testImplementation(libs.kotlinCompileTesting.ksp) - testImplementation(libs.kotlin.compilerEmbeddable) testImplementation(project(":moshi-sealed:runtime")) } diff --git a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt index 3d0d0e4f..7ad818f1 100644 --- a/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt +++ b/moshi-proguard-rule-gen/src/test/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessorTest.kt @@ -29,11 +29,20 @@ import dev.zacsweers.moshix.proguardgen.MoshiProguardGenSymbolProcessor.Companio import java.io.File import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized @OptIn(ExperimentalCompilerApi::class) -class MoshiSealedSymbolProcessorProviderTest { - - private val useKSP2 = System.getProperty("kct.test.useKsp2", "false").toBoolean() +@RunWith(Parameterized::class) +class MoshiProguardGenSymbolProcessorTest(private val useKSP2: Boolean) { + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "useKSP2={0}") + fun data(): Collection> { + return listOf(arrayOf(true), arrayOf(false)) + } + } @Test fun `standard test with only sealed enabled`() { diff --git a/moshi-sealed/codegen/build.gradle.kts b/moshi-sealed/codegen/build.gradle.kts index 5dfed3a9..7e1fe922 100644 --- a/moshi-sealed/codegen/build.gradle.kts +++ b/moshi-sealed/codegen/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - /* * Copyright (C) 2020 Zac Sweers * @@ -22,8 +20,13 @@ plugins { alias(libs.plugins.mavenPublish) } -// --add-opens for kapt to work. KGP covers this for us but local JVMs in tests do not -tasks.withType().configureEach { +kotlin { compilerOptions.optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } + +tasks.test { + // KSP2 needs more memory to run + minHeapSize = "1024m" + maxHeapSize = "1024m" + // --add-opens for kapt to work. KGP covers this for us but local JVMs in tests do not jvmArgs( "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", "--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", @@ -38,21 +41,10 @@ tasks.withType().configureEach { ) } -tasks.withType().configureEach { - compilerOptions { optIn.add("org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi") } -} - -// It's not possible to test both KSP 1 and KSP 2 in the same compilation unit -val testKsp2 = providers.systemProperty("kct.test.useKsp2").getOrElse("false").toBoolean() - -tasks.test { systemProperty("kct.test.useKsp2", testKsp2) } - dependencies { implementation(libs.autoService) implementation(project(":moshi-proguard-rule-gen")) ksp(libs.autoService.ksp) - // For access to MessageCollectorBasedKSPLogger - compileOnly(libs.ksp) compileOnly(libs.ksp.api) compileOnly(libs.kotlin.compilerEmbeddable) @@ -64,19 +56,8 @@ dependencies { implementation(libs.moshi) implementation(project(":moshi-sealed:runtime")) - if (testKsp2) { - testImplementation(libs.ksp.aa.embeddable) { - exclude(group = "com.google.devtools.ksp", module = "common-deps") - } - testImplementation(libs.ksp.commonDeps) - testImplementation(libs.ksp.cli) - } else { - testImplementation(libs.ksp) - } - testImplementation(libs.ksp.api) testImplementation(libs.truth) testImplementation(libs.junit) testImplementation(libs.kotlinCompileTesting) testImplementation(libs.kotlinCompileTesting.ksp) - testImplementation(libs.kotlin.compilerEmbeddable) } diff --git a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt index cfd47df3..a859954d 100644 --- a/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt +++ b/moshi-sealed/codegen/src/test/kotlin/dev/zacsweers/moshix/sealed/codegen/ksp/MoshiSealedSymbolProcessorTest.kt @@ -23,14 +23,22 @@ import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.SourceFile.Companion.kotlin import com.tschuchort.compiletesting.configureKsp import com.tschuchort.compiletesting.kspSourcesDir -import com.tschuchort.compiletesting.symbolProcessorProviders import com.tschuchort.compiletesting.useKsp2 import java.io.File import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized -class MoshiSealedSymbolProcessorProviderTest { +@RunWith(Parameterized::class) +class MoshiSealedSymbolProcessorProviderTest(private val useKSP2: Boolean) { - private val useKSP2 = System.getProperty("kct.test.useKsp2", "false").toBoolean() + companion object { + @JvmStatic + @Parameterized.Parameters(name = "useKSP2={0}") + fun data(): Collection> { + return listOf(arrayOf(true), arrayOf(false)) + } + } @Test fun smokeTest() { From 588b88e1ed2d455148c047aa135980606613d807 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 20 Mar 2024 22:47:45 -0400 Subject: [PATCH 23/36] Update to beta5 --- gradle/libs.versions.toml | 4 ++-- .../kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt | 7 ++----- .../moshix/ir/compiler/api/MoshiAdapterGenerator.kt | 4 ++-- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 239697a1..fe5e2ac7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,10 +19,10 @@ gjf = "1.17.0" incap = "1.0.0" jdk = "21" jvmTarget = "11" -kotlin = "2.0.0-Beta4" +kotlin = "2.0.0-Beta5" kotlinCompileTesting = "0.5.0-alpha05" kotlinpoet = "1.16.0" -ksp = "2.0.0-Beta4-1.0.18" +ksp = "2.0.0-Beta5-1.0.19" ktfmt = "0.47" moshi = "1.15.1" okhttp = "4.12.0" diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt index d8c1c0ed..bcd8707e 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/BaseSymbols.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrPackageFragment import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl +import org.jetbrains.kotlin.ir.declarations.createEmptyExternalPackageFragment import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.IrClassReferenceImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -139,10 +139,7 @@ internal open class BaseSymbols( .symbol protected fun createPackage(packageName: String): IrPackageFragment = - IrExternalPackageFragmentImpl.createEmptyExternalPackageFragment( - moduleFragment.descriptor, - FqName(packageName), - ) + createEmptyExternalPackageFragment(moduleFragment.descriptor, FqName(packageName)) protected fun createClass( irParent: IrDeclarationParent, diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt index f91d1c16..06843d13 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt @@ -80,7 +80,6 @@ import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.declarations.IrVariable -import org.jetbrains.kotlin.ir.deepCopyWithVariables import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall import org.jetbrains.kotlin.ir.expressions.addArgument import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl @@ -94,6 +93,7 @@ import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.types.makeNotNull import org.jetbrains.kotlin.ir.types.typeWith import org.jetbrains.kotlin.ir.util.constructors +import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.getPropertyGetter @@ -536,7 +536,7 @@ internal class MoshiAdapterGenerator( // one to compile against val defaultsConstructor = target.constructor.irConstructor - .deepCopyWithVariables() + .deepCopyWithSymbols() .apply { parent = target.irClass repeat(maskCount) { From d749f28d3e2f099344083ec540007d04c415f801 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 20 Mar 2024 22:53:53 -0400 Subject: [PATCH 24/36] kct 0.5.0-alpha06 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 456038da..ed5b4c35 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,7 +20,7 @@ incap = "1.0.0" jdk = "21" jvmTarget = "11" kotlin = "2.0.0-Beta5" -kotlinCompileTesting = "0.5.0-alpha05" +kotlinCompileTesting = "0.5.0-alpha06" kotlinpoet = "1.16.0" ksp = "2.0.0-Beta5-1.0.19" ktfmt = "0.47" From b7444fbf6df2d4a5499be6255f3ef69253e7d551 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 20 Mar 2024 23:04:16 -0400 Subject: [PATCH 25/36] Try raising --- moshi-sealed/codegen/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/moshi-sealed/codegen/build.gradle.kts b/moshi-sealed/codegen/build.gradle.kts index 7e1fe922..9008cc46 100644 --- a/moshi-sealed/codegen/build.gradle.kts +++ b/moshi-sealed/codegen/build.gradle.kts @@ -24,8 +24,8 @@ kotlin { compilerOptions.optIn.add("org.jetbrains.kotlin.compiler.plugin.Experim tasks.test { // KSP2 needs more memory to run - minHeapSize = "1024m" - maxHeapSize = "1024m" + minHeapSize = "2096m" + maxHeapSize = "2096m" // --add-opens for kapt to work. KGP covers this for us but local JVMs in tests do not jvmArgs( "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", From 36a017fca5cd5d07cb7970e2a3c1eede121bbcf6 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 20 Mar 2024 23:06:56 -0400 Subject: [PATCH 26/36] Use correct rename --- .../zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt index 06843d13..00ff2ee1 100644 --- a/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt +++ b/moshi-ir/moshi-compiler-plugin/src/main/kotlin/dev/zacsweers/moshix/ir/compiler/api/MoshiAdapterGenerator.kt @@ -93,7 +93,7 @@ import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl import org.jetbrains.kotlin.ir.types.makeNotNull import org.jetbrains.kotlin.ir.types.typeWith import org.jetbrains.kotlin.ir.util.constructors -import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols +import org.jetbrains.kotlin.ir.util.deepCopyWithoutPatchingParents import org.jetbrains.kotlin.ir.util.defaultType import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.getPropertyGetter @@ -536,7 +536,7 @@ internal class MoshiAdapterGenerator( // one to compile against val defaultsConstructor = target.constructor.irConstructor - .deepCopyWithSymbols() + .deepCopyWithoutPatchingParents() .apply { parent = target.irClass repeat(maskCount) { From ad76c34534520cda2dbe60cd5ce93b088d79848c Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 20 Mar 2024 23:14:39 -0400 Subject: [PATCH 27/36] Update CI --- .github/workflows/ci.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a56852b0..41263131 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,19 +17,12 @@ concurrency: jobs: build: - name: 'KSP ${{ matrix.ksp_enabled }} / K2 ${{ matrix.k2_enabled }} / KSP2 ${{ matrix.ksp2_enabled }}' + name: 'KSP ${{ matrix.ksp_enabled }} / K2 ${{ matrix.k2_enabled }}' runs-on: ubuntu-latest strategy: matrix: ksp_enabled: [ true, false ] k2_enabled: [ true, false ] - ksp2_enabled: [ true, false ] - # Need to exclude any k2/ksp2 combo where ksp2 is enabled but k2 is not - exclude: - - k2_enabled: false - ksp2_enabled: true - - ksp_enabled: false - ksp2_enabled: true fail-fast: false steps: @@ -46,7 +39,7 @@ jobs: java-version: '21' - name: Build project - run: ./gradlew build check -Pmoshix.useKsp=${{ matrix.ksp_enabled }} -Pkotlin.experimental.tryK2=${{ matrix.k2_enabled }} -D kct.test.useKsp2=${{ matrix.ksp2_enabled }} --quiet + run: ./gradlew build check -Pmoshix.useKsp=${{ matrix.ksp_enabled }} -Pkotlin.experimental.tryK2=${{ matrix.k2_enabled }} --quiet publish-snapshot: needs: 'build' From 6ebab3cfc9c4a332cf7b93122df392b46196b796 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Fri, 5 Apr 2024 13:32:15 -0400 Subject: [PATCH 28/36] KSP 1.0.20 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ed5b4c35..8fdfad9a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,7 +22,7 @@ jvmTarget = "11" kotlin = "2.0.0-Beta5" kotlinCompileTesting = "0.5.0-alpha06" kotlinpoet = "1.16.0" -ksp = "2.0.0-Beta5-1.0.19" +ksp = "2.0.0-Beta5-1.0.20" ktfmt = "0.47" moshi = "1.15.1" okhttp = "4.12.0" From 302f6f0e03cb13f53636bb67e5a7775451259963 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 10 Apr 2024 17:59:34 -0400 Subject: [PATCH 29/36] RC1 --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c5e30320..66ecd468 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,10 +19,10 @@ gjf = "1.17.0" incap = "1.0.0" jdk = "21" jvmTarget = "11" -kotlin = "2.0.0-Beta5" -kotlinCompileTesting = "0.5.0-alpha06" +kotlin = "2.0.0-RC1" +kotlinCompileTesting = "0.5.0-alpha07" kotlinpoet = "1.16.0" -ksp = "2.0.0-Beta5-1.0.20" +ksp = "2.0.0-RC1-1.0.20" ktfmt = "0.47" moshi = "1.15.1" okhttp = "4.12.0" From 010cbcc90d76568c82f3171e12bb4c9f72050a4b Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 10 Apr 2024 18:03:29 -0400 Subject: [PATCH 30/36] Migrate to kotlin-metadata --- gradle/libs.versions.toml | 2 +- .../moshix/reflect/JvmDescriptors.kt | 2 +- .../dev/zacsweers/moshix/reflect/KtTypes.kt | 28 ++++++------ .../MetadataKotlinJsonAdapterFactory.kt | 45 +++++++++---------- .../moshix/reflect/JvmDescriptorsTest.kt | 2 +- .../MetadataMoshiSealedJsonAdapterFactory.kt | 16 +++---- 6 files changed, 47 insertions(+), 48 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 66ecd468..b7937069 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -54,7 +54,7 @@ incap = { module = "net.ltgt.gradle.incap:incap", version.ref = "incap" } incap-processor = { module = "net.ltgt.gradle.incap:incap-processor", version.ref = "incap" } kotlin-compilerEmbeddable = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlin" } -kotlin-metadata = { module = "org.jetbrains.kotlinx:kotlinx-metadata-jvm", version = "0.9.0" } +kotlin-metadata = { module = "org.jetbrains.kotlin:kotlin-metadata-jvm", version.ref = "kotlin" } kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlin-gradlePlugin-api = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api", version.ref = "kotlin" } diff --git a/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptors.kt b/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptors.kt index 22a1d3df..44291a1f 100644 --- a/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptors.kt +++ b/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptors.kt @@ -16,7 +16,7 @@ package dev.zacsweers.moshix.reflect import java.lang.reflect.Constructor -import kotlinx.metadata.jvm.JvmMethodSignature +import kotlin.metadata.jvm.JvmMethodSignature private val PRIMITIVE_CLASS_TO_DESC = mapOf( diff --git a/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/KtTypes.kt b/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/KtTypes.kt index 474f46ba..f9236618 100644 --- a/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/KtTypes.kt +++ b/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/KtTypes.kt @@ -20,19 +20,19 @@ import java.lang.reflect.Constructor import java.lang.reflect.Field import java.lang.reflect.Method import java.lang.reflect.Type -import kotlinx.metadata.KmClass -import kotlinx.metadata.KmClassifier -import kotlinx.metadata.KmClassifier.TypeAlias -import kotlinx.metadata.KmClassifier.TypeParameter -import kotlinx.metadata.KmConstructor -import kotlinx.metadata.KmProperty -import kotlinx.metadata.KmType -import kotlinx.metadata.KmValueParameter -import kotlinx.metadata.declaresDefaultValue -import kotlinx.metadata.isLocalClassName -import kotlinx.metadata.isNullable -import kotlinx.metadata.isSecondary -import kotlinx.metadata.jvm.signature +import kotlin.metadata.KmClass +import kotlin.metadata.KmClassifier +import kotlin.metadata.KmClassifier.TypeAlias +import kotlin.metadata.KmClassifier.TypeParameter +import kotlin.metadata.KmConstructor +import kotlin.metadata.KmProperty +import kotlin.metadata.KmType +import kotlin.metadata.KmValueParameter +import kotlin.metadata.declaresDefaultValue +import kotlin.metadata.isLocalClassName +import kotlin.metadata.isNullable +import kotlin.metadata.isSecondary +import kotlin.metadata.jvm.signature private fun defaultPrimitiveValue(type: Type): Any? = if (type is Class<*> && type.isPrimitive) { @@ -75,7 +75,7 @@ internal val KmType.canonicalName: String } /** - * Creates a canonical class name as represented in Metadata's [kotlinx.metadata.ClassName], where + * Creates a canonical class name as represented in Metadata's [kotlin.metadata.ClassName], where * package names in this name are separated by '/' and class names are separated by '.'. * * Example ClassName that we want to canonicalize: `"java/util/Map.Entry"`. diff --git a/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/MetadataKotlinJsonAdapterFactory.kt b/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/MetadataKotlinJsonAdapterFactory.kt index 99965a08..724f74f9 100644 --- a/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/MetadataKotlinJsonAdapterFactory.kt +++ b/moshi-metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/reflect/MetadataKotlinJsonAdapterFactory.kt @@ -29,28 +29,28 @@ import java.lang.reflect.Field import java.lang.reflect.Method import java.lang.reflect.Modifier import java.lang.reflect.Type -import kotlinx.metadata.ClassKind -import kotlinx.metadata.KmClass -import kotlinx.metadata.KmFlexibleTypeUpperBound -import kotlinx.metadata.KmProperty -import kotlinx.metadata.KmType -import kotlinx.metadata.KmTypeProjection -import kotlinx.metadata.Modality -import kotlinx.metadata.Visibility -import kotlinx.metadata.isInner -import kotlinx.metadata.isNullable -import kotlinx.metadata.isVar -import kotlinx.metadata.jvm.JvmFieldSignature -import kotlinx.metadata.jvm.JvmMethodSignature -import kotlinx.metadata.jvm.KotlinClassMetadata -import kotlinx.metadata.jvm.Metadata -import kotlinx.metadata.jvm.fieldSignature -import kotlinx.metadata.jvm.getterSignature -import kotlinx.metadata.jvm.setterSignature -import kotlinx.metadata.jvm.syntheticMethodForAnnotations -import kotlinx.metadata.kind -import kotlinx.metadata.modality -import kotlinx.metadata.visibility +import kotlin.metadata.ClassKind +import kotlin.metadata.KmClass +import kotlin.metadata.KmFlexibleTypeUpperBound +import kotlin.metadata.KmProperty +import kotlin.metadata.KmType +import kotlin.metadata.KmTypeProjection +import kotlin.metadata.Modality +import kotlin.metadata.Visibility +import kotlin.metadata.isInner +import kotlin.metadata.isNullable +import kotlin.metadata.isVar +import kotlin.metadata.jvm.JvmFieldSignature +import kotlin.metadata.jvm.JvmMethodSignature +import kotlin.metadata.jvm.KotlinClassMetadata +import kotlin.metadata.jvm.Metadata +import kotlin.metadata.jvm.fieldSignature +import kotlin.metadata.jvm.getterSignature +import kotlin.metadata.jvm.setterSignature +import kotlin.metadata.jvm.syntheticMethodForAnnotations +import kotlin.metadata.kind +import kotlin.metadata.modality +import kotlin.metadata.visibility /** Classes annotated with this are eligible for this adapter. */ private val KOTLIN_METADATA = Metadata::class.java @@ -338,7 +338,6 @@ public class MetadataKotlinJsonAdapterFactory : JsonAdapter.Factory { this != null && other != null -> { // Note we don't check abbreviatedType because typealiases and their backing types are equal // for our purposes. - @Suppress("DEPRECATION") arguments valueEquals other.arguments && classifier == other.classifier && isNullable == other.isNullable && diff --git a/moshi-metadata-reflect/src/test/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptorsTest.kt b/moshi-metadata-reflect/src/test/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptorsTest.kt index 38f12d87..82701675 100644 --- a/moshi-metadata-reflect/src/test/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptorsTest.kt +++ b/moshi-metadata-reflect/src/test/kotlin/dev/zacsweers/moshix/reflect/JvmDescriptorsTest.kt @@ -16,7 +16,7 @@ package dev.zacsweers.moshix.reflect import com.google.common.truth.Truth.assertThat -import kotlinx.metadata.jvm.JvmMethodSignature +import kotlin.metadata.jvm.JvmMethodSignature import org.junit.Test class JvmDescriptorsTest { diff --git a/moshi-sealed/metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/sealed/reflect/MetadataMoshiSealedJsonAdapterFactory.kt b/moshi-sealed/metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/sealed/reflect/MetadataMoshiSealedJsonAdapterFactory.kt index 4664f2a0..8ad24441 100644 --- a/moshi-sealed/metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/sealed/reflect/MetadataMoshiSealedJsonAdapterFactory.kt +++ b/moshi-sealed/metadata-reflect/src/main/kotlin/dev/zacsweers/moshix/sealed/reflect/MetadataMoshiSealedJsonAdapterFactory.kt @@ -28,14 +28,14 @@ import dev.zacsweers.moshix.sealed.annotations.TypeLabel import dev.zacsweers.moshix.sealed.runtime.internal.ObjectJsonAdapter import dev.zacsweers.moshix.sealed.runtime.internal.Util.fallbackAdapter import java.lang.reflect.Type -import kotlinx.metadata.ClassKind -import kotlinx.metadata.ClassName -import kotlinx.metadata.KmClass -import kotlinx.metadata.Modality -import kotlinx.metadata.jvm.KotlinClassMetadata -import kotlinx.metadata.jvm.Metadata -import kotlinx.metadata.kind -import kotlinx.metadata.modality +import kotlin.metadata.ClassKind +import kotlin.metadata.ClassName +import kotlin.metadata.KmClass +import kotlin.metadata.Modality +import kotlin.metadata.jvm.KotlinClassMetadata +import kotlin.metadata.jvm.Metadata +import kotlin.metadata.kind +import kotlin.metadata.modality /** Classes annotated with this are eligible for this adapter. */ private val KOTLIN_METADATA = Metadata::class.java From 000c299fcf3f7ab5beabe407e30cba7e91e4bdfa Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 29 Apr 2024 15:44:47 -0400 Subject: [PATCH 31/36] RC2 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f10a1c37..97fb5b48 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ gjf = "1.17.0" incap = "1.0.0" jdk = "21" jvmTarget = "11" -kotlin = "2.0.0-RC1" +kotlin = "2.0.0-RC2" kotlinCompileTesting = "0.5.0-alpha07" kotlinpoet = "1.16.0" ksp = "2.0.0-RC1-1.0.20" From 88a36cc7e1068c59ba2a72514ceaaca9640556fc Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 29 Apr 2024 23:24:24 -0400 Subject: [PATCH 32/36] KSP RC2 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 97fb5b48..c9b74f7e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,7 +22,7 @@ jvmTarget = "11" kotlin = "2.0.0-RC2" kotlinCompileTesting = "0.5.0-alpha07" kotlinpoet = "1.16.0" -ksp = "2.0.0-RC1-1.0.20" +ksp = "2.0.0-RC2-1.0.20" ktfmt = "0.49" moshi = "1.15.1" okhttp = "4.12.0" From c1fcde7b005c9abe88b64648067126ce8e0d1083 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Fri, 10 May 2024 13:06:59 -0400 Subject: [PATCH 33/36] RC3 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c9b74f7e..e11bbd2c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ gjf = "1.17.0" incap = "1.0.0" jdk = "21" jvmTarget = "11" -kotlin = "2.0.0-RC2" +kotlin = "2.0.0-RC3" kotlinCompileTesting = "0.5.0-alpha07" kotlinpoet = "1.16.0" ksp = "2.0.0-RC2-1.0.20" From c1e01361672dd93da34ba0db5f00fbc30f7b3ab3 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 13 May 2024 14:36:00 -0400 Subject: [PATCH 34/36] KSP RC3 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6301e4d7..b34626c3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,7 +22,7 @@ jvmTarget = "11" kotlin = "2.0.0-RC3" kotlinCompileTesting = "0.5.0-alpha07" kotlinpoet = "1.16.0" -ksp = "2.0.0-RC2-1.0.20" +ksp = "2.0.0-RC3-1.0.20" ktfmt = "0.49" moshi = "1.15.1" okhttp = "4.12.0" From 60e65f1d588edec5a73e9878bdf1453c2ae8bc22 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Tue, 21 May 2024 11:13:14 -0400 Subject: [PATCH 35/36] 2.0.0 final --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b34626c3..e76705e2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ gjf = "1.17.0" incap = "1.0.0" jdk = "21" jvmTarget = "11" -kotlin = "2.0.0-RC3" +kotlin = "2.0.0" kotlinCompileTesting = "0.5.0-alpha07" kotlinpoet = "1.16.0" ksp = "2.0.0-RC3-1.0.20" From fb769a6d98669c9d011e744a93097a0f67802f34 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Wed, 22 May 2024 16:05:22 -0400 Subject: [PATCH 36/36] KSP final + lint alpha --- gradle/libs.versions.toml | 4 +- .../moshi-compiler-plugin/lint-baseline.xml | 217 ++++++++---------- 2 files changed, 94 insertions(+), 127 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e76705e2..a525ff4f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,7 +22,7 @@ jvmTarget = "11" kotlin = "2.0.0" kotlinCompileTesting = "0.5.0-alpha07" kotlinpoet = "1.16.0" -ksp = "2.0.0-RC3-1.0.20" +ksp = "2.0.0-1.0.21" ktfmt = "0.49" moshi = "1.15.1" okhttp = "4.12.0" @@ -33,7 +33,7 @@ dokka = { id = "org.jetbrains.dokka", version = "1.9.20" } kotlinBinaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.14.0" } kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -lint = { id = "com.android.lint", version = "8.5.0-beta01" } +lint = { id = "com.android.lint", version = "8.6.0-alpha02" } mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.28.0" } mavenShadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" } moshix = { id = "dev.zacsweers.moshix", version = "0.25.1" } # Always replaced by the local plugin diff --git a/moshi-ir/moshi-compiler-plugin/lint-baseline.xml b/moshi-ir/moshi-compiler-plugin/lint-baseline.xml index 21468ef3..c9a512d0 100644 --- a/moshi-ir/moshi-compiler-plugin/lint-baseline.xml +++ b/moshi-ir/moshi-compiler-plugin/lint-baseline.xml @@ -1,5 +1,5 @@ - + + errorLine1=" createEmptyExternalPackageFragment(moduleFragment.descriptor, FqName(packageName))" + errorLine2=" ~~~~~~~~~~"> + line="142" + column="55"/> @@ -85,7 +85,7 @@ errorLine2=" ~~~~~~~~"> @@ -96,7 +96,7 @@ errorLine2=" ~~~~~~~~"> @@ -107,7 +107,7 @@ errorLine2=" ~~~~~~~~"> @@ -118,7 +118,7 @@ errorLine2=" ~~~~~~~~"> @@ -129,7 +129,7 @@ errorLine2=" ~~~~~~~~"> @@ -140,7 +140,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -151,7 +151,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -162,7 +162,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -173,7 +173,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -184,7 +184,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -195,21 +195,10 @@ errorLine2=" ~~~~~~~~~~~~~~~~"> - - - - @@ -228,21 +217,10 @@ errorLine2=" ~~~~"> - - - - @@ -261,7 +239,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -272,7 +250,7 @@ errorLine2=" ~~~~"> @@ -283,7 +261,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -294,7 +272,7 @@ errorLine2=" ~~~~"> @@ -305,7 +283,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -316,7 +294,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -327,7 +305,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -338,7 +316,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -349,7 +327,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -360,7 +338,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -371,7 +349,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -382,7 +360,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -393,7 +371,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -404,7 +382,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -415,21 +393,10 @@ errorLine2=" ~~~~~~~~~~~~~~~~"> - - - - @@ -448,7 +415,7 @@ errorLine2=" ~~~~"> @@ -459,7 +426,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -470,7 +437,7 @@ errorLine2=" ~~~~"> @@ -481,7 +448,7 @@ errorLine2=" ~~~~~~~~"> @@ -492,7 +459,7 @@ errorLine2=" ~~~~~~~~"> @@ -503,7 +470,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -514,7 +481,7 @@ errorLine2=" ~~~~~~~~~"> @@ -525,7 +492,7 @@ errorLine2=" ~~~~~~~~"> @@ -536,7 +503,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -547,7 +514,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -558,7 +525,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -569,7 +536,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -580,7 +547,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -591,7 +558,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -602,7 +569,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -613,7 +580,7 @@ errorLine2=" ~~~~~~~~~"> @@ -624,7 +591,7 @@ errorLine2=" ~~~~~~~~"> @@ -635,7 +602,7 @@ errorLine2=" ~~~~~~~~"> @@ -646,7 +613,7 @@ errorLine2=" ~~~~~~~~~"> @@ -657,7 +624,7 @@ errorLine2=" ~~~~~~~~~"> @@ -668,7 +635,7 @@ errorLine2=" ~~~~~~~~~"> @@ -679,7 +646,7 @@ errorLine2=" ~~~~~~~~~"> @@ -690,7 +657,7 @@ errorLine2=" ~~~~~~~~~"> @@ -701,7 +668,7 @@ errorLine2=" ~~~~~~~~~"> @@ -712,7 +679,7 @@ errorLine2=" ~~~~~~~~~"> @@ -723,7 +690,7 @@ errorLine2=" ~~~~~~~~~"> @@ -734,7 +701,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -745,7 +712,7 @@ errorLine2=" ~~~~"> @@ -756,7 +723,7 @@ errorLine2=" ~~~~~~~~~"> @@ -767,7 +734,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -778,7 +745,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -789,7 +756,7 @@ errorLine2=" ~~~~"> @@ -877,7 +844,7 @@ errorLine2=" ~~~~"> @@ -888,7 +855,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -899,7 +866,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -910,7 +877,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -921,7 +888,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -932,7 +899,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -943,7 +910,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -954,7 +921,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -965,7 +932,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -976,7 +943,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -987,7 +954,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -998,7 +965,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -1009,7 +976,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -1020,7 +987,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -1031,7 +998,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -1042,7 +1009,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -1053,7 +1020,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -1064,7 +1031,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~"> @@ -1075,7 +1042,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -1086,7 +1053,7 @@ errorLine2=" ~~~~~~~~~~"> @@ -1097,7 +1064,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> @@ -1108,7 +1075,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -1119,7 +1086,7 @@ errorLine2=" ~~~~">