diff --git a/moshi-kotlin-codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/ProguardRules.kt b/moshi-kotlin-codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/ProguardRules.kt index 76806fc..c7d682c 100644 --- a/moshi-kotlin-codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/ProguardRules.kt +++ b/moshi-kotlin-codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/ProguardRules.kt @@ -26,7 +26,8 @@ import com.squareup.kotlinpoet.ClassName * constructor as well as the DefaultConstructorMarker type Kotlin adds to it. * * Each rule is intended to be as specific and targeted as possible to reduce footprint, and each is - * conditioned on usage of the original target type. + * conditioned on usage of the original target type (implicitly for keepnames and keepclassmembers, + * which have no effect if the target type was removed in the shrinking phase). * * To keep this processor as an ISOLATING incremental processor, we generate one file per target * class with a deterministic name (see [outputFilePathWithoutExtension]) with an appropriate @@ -46,7 +47,6 @@ public data class ProguardConfig( public fun writeTo(out: Appendable): Unit = out.run { // - // -if class {the target class} // -keepnames class {the target class} // -if class {the target class} // -keep class {the generated adapter} { @@ -57,7 +57,6 @@ public data class ProguardConfig( val targetName = targetClass.reflectionName() val adapterCanonicalName = ClassName(targetClass.packageName, adapterName).canonicalName // Keep the class name for Moshi's reflective lookup based on it - appendLine("-if class $targetName") appendLine("-keepnames class $targetName") appendLine("-if class $targetName") @@ -70,6 +69,7 @@ public data class ProguardConfig( if (targetConstructorHasDefaults) { // If the target class has default parameter values, keep its synthetic constructor // + // -if class {the target class} // -keepnames class kotlin.jvm.internal.DefaultConstructorMarker // -keepclassmembers @com.squareup.moshi.JsonClass @kotlin.Metadata class * { // synthetic (...); @@ -77,7 +77,6 @@ public data class ProguardConfig( // appendLine("-if class $targetName") appendLine("-keepnames class kotlin.jvm.internal.DefaultConstructorMarker") - appendLine("-if class $targetName") appendLine("-keepclassmembers class $targetName {") val allParams = targetConstructorParams.toMutableList() val maskCount = if (targetConstructorParams.isEmpty()) { diff --git a/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt b/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt index 1d8cc48..d1a8e79 100644 --- a/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt +++ b/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt @@ -727,7 +727,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { when (generatedFile.nameWithoutExtension) { "moshi-testPackage.Aliases" -> assertThat(generatedFile.readText()).contains( """ - -if class testPackage.Aliases -keepnames class testPackage.Aliases -if class testPackage.Aliases -keep class testPackage.AliasesJsonAdapter { @@ -738,7 +737,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.Simple" -> assertThat(generatedFile.readText()).contains( """ - -if class testPackage.Simple -keepnames class testPackage.Simple -if class testPackage.Simple -keep class testPackage.SimpleJsonAdapter { @@ -749,7 +747,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.Generic" -> assertThat(generatedFile.readText()).contains( """ - -if class testPackage.Generic -keepnames class testPackage.Generic -if class testPackage.Generic -keep class testPackage.GenericJsonAdapter { @@ -761,7 +758,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.UsingQualifiers" -> { assertThat(generatedFile.readText()).contains( """ - -if class testPackage.UsingQualifiers -keepnames class testPackage.UsingQualifiers -if class testPackage.UsingQualifiers -keep class testPackage.UsingQualifiersJsonAdapter { @@ -773,7 +769,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.MixedTypes" -> assertThat(generatedFile.readText()).contains( """ - -if class testPackage.MixedTypes -keepnames class testPackage.MixedTypes -if class testPackage.MixedTypes -keep class testPackage.MixedTypesJsonAdapter { @@ -784,7 +779,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.DefaultParams" -> assertThat(generatedFile.readText()).contains( """ - -if class testPackage.DefaultParams -keepnames class testPackage.DefaultParams -if class testPackage.DefaultParams -keep class testPackage.DefaultParamsJsonAdapter { @@ -792,7 +786,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { } -if class testPackage.DefaultParams -keepnames class kotlin.jvm.internal.DefaultConstructorMarker - -if class testPackage.DefaultParams -keepclassmembers class testPackage.DefaultParams { public synthetic (java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker); } @@ -802,7 +795,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.Complex" -> { assertThat(generatedFile.readText()).contains( """ - -if class testPackage.Complex -keepnames class testPackage.Complex -if class testPackage.Complex -keep class testPackage.ComplexJsonAdapter { @@ -810,7 +802,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { } -if class testPackage.Complex -keepnames class kotlin.jvm.internal.DefaultConstructorMarker - -if class testPackage.Complex -keepclassmembers class testPackage.Complex { public synthetic (java.lang.String,java.util.List,java.lang.Object,int,kotlin.jvm.internal.DefaultConstructorMarker); } @@ -820,7 +811,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.MultipleMasks" -> assertThat(generatedFile.readText()).contains( """ - -if class testPackage.MultipleMasks -keepnames class testPackage.MultipleMasks -if class testPackage.MultipleMasks -keep class testPackage.MultipleMasksJsonAdapter { @@ -828,7 +818,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { } -if class testPackage.MultipleMasks -keepnames class kotlin.jvm.internal.DefaultConstructorMarker - -if class testPackage.MultipleMasks -keepclassmembers class testPackage.MultipleMasks { public synthetic (long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,long,int,int,int,kotlin.jvm.internal.DefaultConstructorMarker); } @@ -838,7 +827,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) { "moshi-testPackage.NestedType.NestedSimple" -> { assertThat(generatedFile.readText()).contains( """ - -if class testPackage.NestedType${'$'}NestedSimple -keepnames class testPackage.NestedType${'$'}NestedSimple -if class testPackage.NestedType${'$'}NestedSimple -keep class testPackage.NestedType_NestedSimpleJsonAdapter {