Skip to content

Commit 7aea91d

Browse files
authored
Remove redundant preconditions from generated ProGuard rules (#1913)
1 parent 67bd5f5 commit 7aea91d

File tree

2 files changed

+3
-16
lines changed

2 files changed

+3
-16
lines changed

moshi-kotlin-codegen/src/main/java/com/squareup/moshi/kotlin/codegen/api/ProguardRules.kt

+3-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ import com.squareup.kotlinpoet.ClassName
2626
* constructor as well as the DefaultConstructorMarker type Kotlin adds to it.
2727
*
2828
* Each rule is intended to be as specific and targeted as possible to reduce footprint, and each is
29-
* conditioned on usage of the original target type.
29+
* conditioned on usage of the original target type (implicitly for keepnames and keepclassmembers,
30+
* which have no effect if the target type was removed in the shrinking phase).
3031
*
3132
* To keep this processor as an ISOLATING incremental processor, we generate one file per target
3233
* class with a deterministic name (see [outputFilePathWithoutExtension]) with an appropriate
@@ -46,7 +47,6 @@ public data class ProguardConfig(
4647

4748
public fun writeTo(out: Appendable): Unit = out.run {
4849
//
49-
// -if class {the target class}
5050
// -keepnames class {the target class}
5151
// -if class {the target class}
5252
// -keep class {the generated adapter} {
@@ -57,7 +57,6 @@ public data class ProguardConfig(
5757
val targetName = targetClass.reflectionName()
5858
val adapterCanonicalName = ClassName(targetClass.packageName, adapterName).canonicalName
5959
// Keep the class name for Moshi's reflective lookup based on it
60-
appendLine("-if class $targetName")
6160
appendLine("-keepnames class $targetName")
6261

6362
appendLine("-if class $targetName")
@@ -70,14 +69,14 @@ public data class ProguardConfig(
7069
if (targetConstructorHasDefaults) {
7170
// If the target class has default parameter values, keep its synthetic constructor
7271
//
72+
// -if class {the target class}
7373
// -keepnames class kotlin.jvm.internal.DefaultConstructorMarker
7474
// -keepclassmembers @com.squareup.moshi.JsonClass @kotlin.Metadata class * {
7575
// synthetic <init>(...);
7676
// }
7777
//
7878
appendLine("-if class $targetName")
7979
appendLine("-keepnames class kotlin.jvm.internal.DefaultConstructorMarker")
80-
appendLine("-if class $targetName")
8180
appendLine("-keepclassmembers class $targetName {")
8281
val allParams = targetConstructorParams.toMutableList()
8382
val maskCount = if (targetConstructorParams.isEmpty()) {

moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt

-12
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
727727
when (generatedFile.nameWithoutExtension) {
728728
"moshi-testPackage.Aliases" -> assertThat(generatedFile.readText()).contains(
729729
"""
730-
-if class testPackage.Aliases
731730
-keepnames class testPackage.Aliases
732731
-if class testPackage.Aliases
733732
-keep class testPackage.AliasesJsonAdapter {
@@ -738,7 +737,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
738737

739738
"moshi-testPackage.Simple" -> assertThat(generatedFile.readText()).contains(
740739
"""
741-
-if class testPackage.Simple
742740
-keepnames class testPackage.Simple
743741
-if class testPackage.Simple
744742
-keep class testPackage.SimpleJsonAdapter {
@@ -749,7 +747,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
749747

750748
"moshi-testPackage.Generic" -> assertThat(generatedFile.readText()).contains(
751749
"""
752-
-if class testPackage.Generic
753750
-keepnames class testPackage.Generic
754751
-if class testPackage.Generic
755752
-keep class testPackage.GenericJsonAdapter {
@@ -761,7 +758,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
761758
"moshi-testPackage.UsingQualifiers" -> {
762759
assertThat(generatedFile.readText()).contains(
763760
"""
764-
-if class testPackage.UsingQualifiers
765761
-keepnames class testPackage.UsingQualifiers
766762
-if class testPackage.UsingQualifiers
767763
-keep class testPackage.UsingQualifiersJsonAdapter {
@@ -773,7 +769,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
773769

774770
"moshi-testPackage.MixedTypes" -> assertThat(generatedFile.readText()).contains(
775771
"""
776-
-if class testPackage.MixedTypes
777772
-keepnames class testPackage.MixedTypes
778773
-if class testPackage.MixedTypes
779774
-keep class testPackage.MixedTypesJsonAdapter {
@@ -784,15 +779,13 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
784779

785780
"moshi-testPackage.DefaultParams" -> assertThat(generatedFile.readText()).contains(
786781
"""
787-
-if class testPackage.DefaultParams
788782
-keepnames class testPackage.DefaultParams
789783
-if class testPackage.DefaultParams
790784
-keep class testPackage.DefaultParamsJsonAdapter {
791785
public <init>(com.squareup.moshi.Moshi);
792786
}
793787
-if class testPackage.DefaultParams
794788
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
795-
-if class testPackage.DefaultParams
796789
-keepclassmembers class testPackage.DefaultParams {
797790
public synthetic <init>(java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
798791
}
@@ -802,15 +795,13 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
802795
"moshi-testPackage.Complex" -> {
803796
assertThat(generatedFile.readText()).contains(
804797
"""
805-
-if class testPackage.Complex
806798
-keepnames class testPackage.Complex
807799
-if class testPackage.Complex
808800
-keep class testPackage.ComplexJsonAdapter {
809801
public <init>(com.squareup.moshi.Moshi,java.lang.reflect.Type[]);
810802
}
811803
-if class testPackage.Complex
812804
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
813-
-if class testPackage.Complex
814805
-keepclassmembers class testPackage.Complex {
815806
public synthetic <init>(java.lang.String,java.util.List,java.lang.Object,int,kotlin.jvm.internal.DefaultConstructorMarker);
816807
}
@@ -820,15 +811,13 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
820811

821812
"moshi-testPackage.MultipleMasks" -> assertThat(generatedFile.readText()).contains(
822813
"""
823-
-if class testPackage.MultipleMasks
824814
-keepnames class testPackage.MultipleMasks
825815
-if class testPackage.MultipleMasks
826816
-keep class testPackage.MultipleMasksJsonAdapter {
827817
public <init>(com.squareup.moshi.Moshi);
828818
}
829819
-if class testPackage.MultipleMasks
830820
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
831-
-if class testPackage.MultipleMasks
832821
-keepclassmembers class testPackage.MultipleMasks {
833822
public synthetic <init>(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);
834823
}
@@ -838,7 +827,6 @@ class JsonClassSymbolProcessorTest(private val useKSP2: Boolean) {
838827
"moshi-testPackage.NestedType.NestedSimple" -> {
839828
assertThat(generatedFile.readText()).contains(
840829
"""
841-
-if class testPackage.NestedType${'$'}NestedSimple
842830
-keepnames class testPackage.NestedType${'$'}NestedSimple
843831
-if class testPackage.NestedType${'$'}NestedSimple
844832
-keep class testPackage.NestedType_NestedSimpleJsonAdapter {

0 commit comments

Comments
 (0)