Skip to content

Commit 8feae55

Browse files
PhilGlassJakeWharton
authored andcommitted
Remove redundant preconditions from generated ProGuard rules (#1913)
1 parent 932807e commit 8feae55

File tree

3 files changed

+3
-28
lines changed

3 files changed

+3
-28
lines changed

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

Lines changed: 3 additions & 4 deletions
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/apt/JsonClassCodegenProcessorTest.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,6 @@ class JsonClassCodegenProcessorTest {
657657
when (generatedFile.nameWithoutExtension) {
658658
"moshi-testPackage.Aliases" -> assertThat(generatedFile.readText()).contains(
659659
"""
660-
-if class testPackage.Aliases
661660
-keepnames class testPackage.Aliases
662661
-if class testPackage.Aliases
663662
-keep class testPackage.AliasesJsonAdapter {
@@ -667,7 +666,6 @@ class JsonClassCodegenProcessorTest {
667666
)
668667
"moshi-testPackage.Simple" -> assertThat(generatedFile.readText()).contains(
669668
"""
670-
-if class testPackage.Simple
671669
-keepnames class testPackage.Simple
672670
-if class testPackage.Simple
673671
-keep class testPackage.SimpleJsonAdapter {
@@ -677,7 +675,6 @@ class JsonClassCodegenProcessorTest {
677675
)
678676
"moshi-testPackage.Generic" -> assertThat(generatedFile.readText()).contains(
679677
"""
680-
-if class testPackage.Generic
681678
-keepnames class testPackage.Generic
682679
-if class testPackage.Generic
683680
-keep class testPackage.GenericJsonAdapter {
@@ -688,7 +685,6 @@ class JsonClassCodegenProcessorTest {
688685
"moshi-testPackage.UsingQualifiers" -> {
689686
assertThat(generatedFile.readText()).contains(
690687
"""
691-
-if class testPackage.UsingQualifiers
692688
-keepnames class testPackage.UsingQualifiers
693689
-if class testPackage.UsingQualifiers
694690
-keep class testPackage.UsingQualifiersJsonAdapter {
@@ -699,7 +695,6 @@ class JsonClassCodegenProcessorTest {
699695
}
700696
"moshi-testPackage.MixedTypes" -> assertThat(generatedFile.readText()).contains(
701697
"""
702-
-if class testPackage.MixedTypes
703698
-keepnames class testPackage.MixedTypes
704699
-if class testPackage.MixedTypes
705700
-keep class testPackage.MixedTypesJsonAdapter {
@@ -709,15 +704,13 @@ class JsonClassCodegenProcessorTest {
709704
)
710705
"moshi-testPackage.DefaultParams" -> assertThat(generatedFile.readText()).contains(
711706
"""
712-
-if class testPackage.DefaultParams
713707
-keepnames class testPackage.DefaultParams
714708
-if class testPackage.DefaultParams
715709
-keep class testPackage.DefaultParamsJsonAdapter {
716710
public <init>(com.squareup.moshi.Moshi);
717711
}
718712
-if class testPackage.DefaultParams
719713
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
720-
-if class testPackage.DefaultParams
721714
-keepclassmembers class testPackage.DefaultParams {
722715
public synthetic <init>(java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
723716
}
@@ -726,15 +719,13 @@ class JsonClassCodegenProcessorTest {
726719
"moshi-testPackage.Complex" -> {
727720
assertThat(generatedFile.readText()).contains(
728721
"""
729-
-if class testPackage.Complex
730722
-keepnames class testPackage.Complex
731723
-if class testPackage.Complex
732724
-keep class testPackage.ComplexJsonAdapter {
733725
public <init>(com.squareup.moshi.Moshi,java.lang.reflect.Type[]);
734726
}
735727
-if class testPackage.Complex
736728
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
737-
-if class testPackage.Complex
738729
-keepclassmembers class testPackage.Complex {
739730
public synthetic <init>(java.lang.String,java.util.List,java.lang.Object,int,kotlin.jvm.internal.DefaultConstructorMarker);
740731
}
@@ -743,15 +734,13 @@ class JsonClassCodegenProcessorTest {
743734
}
744735
"moshi-testPackage.MultipleMasks" -> assertThat(generatedFile.readText()).contains(
745736
"""
746-
-if class testPackage.MultipleMasks
747737
-keepnames class testPackage.MultipleMasks
748738
-if class testPackage.MultipleMasks
749739
-keep class testPackage.MultipleMasksJsonAdapter {
750740
public <init>(com.squareup.moshi.Moshi);
751741
}
752742
-if class testPackage.MultipleMasks
753743
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
754-
-if class testPackage.MultipleMasks
755744
-keepclassmembers class testPackage.MultipleMasks {
756745
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);
757746
}
@@ -760,7 +749,6 @@ class JsonClassCodegenProcessorTest {
760749
"moshi-testPackage.NestedType.NestedSimple" -> {
761750
assertThat(generatedFile.readText()).contains(
762751
"""
763-
-if class testPackage.NestedType${'$'}NestedSimple
764752
-keepnames class testPackage.NestedType${'$'}NestedSimple
765753
-if class testPackage.NestedType${'$'}NestedSimple
766754
-keep class testPackage.NestedType_NestedSimpleJsonAdapter {

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -708,7 +708,6 @@ class JsonClassSymbolProcessorTest {
708708
when (generatedFile.nameWithoutExtension) {
709709
"moshi-testPackage.Aliases" -> assertThat(generatedFile.readText()).contains(
710710
"""
711-
-if class testPackage.Aliases
712711
-keepnames class testPackage.Aliases
713712
-if class testPackage.Aliases
714713
-keep class testPackage.AliasesJsonAdapter {
@@ -718,7 +717,6 @@ class JsonClassSymbolProcessorTest {
718717
)
719718
"moshi-testPackage.Simple" -> assertThat(generatedFile.readText()).contains(
720719
"""
721-
-if class testPackage.Simple
722720
-keepnames class testPackage.Simple
723721
-if class testPackage.Simple
724722
-keep class testPackage.SimpleJsonAdapter {
@@ -728,7 +726,6 @@ class JsonClassSymbolProcessorTest {
728726
)
729727
"moshi-testPackage.Generic" -> assertThat(generatedFile.readText()).contains(
730728
"""
731-
-if class testPackage.Generic
732729
-keepnames class testPackage.Generic
733730
-if class testPackage.Generic
734731
-keep class testPackage.GenericJsonAdapter {
@@ -739,7 +736,6 @@ class JsonClassSymbolProcessorTest {
739736
"moshi-testPackage.UsingQualifiers" -> {
740737
assertThat(generatedFile.readText()).contains(
741738
"""
742-
-if class testPackage.UsingQualifiers
743739
-keepnames class testPackage.UsingQualifiers
744740
-if class testPackage.UsingQualifiers
745741
-keep class testPackage.UsingQualifiersJsonAdapter {
@@ -750,7 +746,6 @@ class JsonClassSymbolProcessorTest {
750746
}
751747
"moshi-testPackage.MixedTypes" -> assertThat(generatedFile.readText()).contains(
752748
"""
753-
-if class testPackage.MixedTypes
754749
-keepnames class testPackage.MixedTypes
755750
-if class testPackage.MixedTypes
756751
-keep class testPackage.MixedTypesJsonAdapter {
@@ -760,15 +755,13 @@ class JsonClassSymbolProcessorTest {
760755
)
761756
"moshi-testPackage.DefaultParams" -> assertThat(generatedFile.readText()).contains(
762757
"""
763-
-if class testPackage.DefaultParams
764758
-keepnames class testPackage.DefaultParams
765759
-if class testPackage.DefaultParams
766760
-keep class testPackage.DefaultParamsJsonAdapter {
767761
public <init>(com.squareup.moshi.Moshi);
768762
}
769763
-if class testPackage.DefaultParams
770764
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
771-
-if class testPackage.DefaultParams
772765
-keepclassmembers class testPackage.DefaultParams {
773766
public synthetic <init>(java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
774767
}
@@ -777,15 +770,13 @@ class JsonClassSymbolProcessorTest {
777770
"moshi-testPackage.Complex" -> {
778771
assertThat(generatedFile.readText()).contains(
779772
"""
780-
-if class testPackage.Complex
781773
-keepnames class testPackage.Complex
782774
-if class testPackage.Complex
783775
-keep class testPackage.ComplexJsonAdapter {
784776
public <init>(com.squareup.moshi.Moshi,java.lang.reflect.Type[]);
785777
}
786778
-if class testPackage.Complex
787779
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
788-
-if class testPackage.Complex
789780
-keepclassmembers class testPackage.Complex {
790781
public synthetic <init>(java.lang.String,java.util.List,java.lang.Object,int,kotlin.jvm.internal.DefaultConstructorMarker);
791782
}
@@ -794,15 +785,13 @@ class JsonClassSymbolProcessorTest {
794785
}
795786
"moshi-testPackage.MultipleMasks" -> assertThat(generatedFile.readText()).contains(
796787
"""
797-
-if class testPackage.MultipleMasks
798788
-keepnames class testPackage.MultipleMasks
799789
-if class testPackage.MultipleMasks
800790
-keep class testPackage.MultipleMasksJsonAdapter {
801791
public <init>(com.squareup.moshi.Moshi);
802792
}
803793
-if class testPackage.MultipleMasks
804794
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
805-
-if class testPackage.MultipleMasks
806795
-keepclassmembers class testPackage.MultipleMasks {
807796
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);
808797
}
@@ -811,7 +800,6 @@ class JsonClassSymbolProcessorTest {
811800
"moshi-testPackage.NestedType.NestedSimple" -> {
812801
assertThat(generatedFile.readText()).contains(
813802
"""
814-
-if class testPackage.NestedType${'$'}NestedSimple
815803
-keepnames class testPackage.NestedType${'$'}NestedSimple
816804
-if class testPackage.NestedType${'$'}NestedSimple
817805
-keep class testPackage.NestedType_NestedSimpleJsonAdapter {

0 commit comments

Comments
 (0)