From 8bc4b08c542b434f96be6471f5e1c2b66002afc3 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Thu, 20 Jul 2023 12:42:44 -0400 Subject: [PATCH] Fix proguard rule output location (#463) Resolves #461 --- .../MoshiProguardGenSymbolProcessor.kt | 9 ++-- .../MoshiProguardGenSymbolProcessorTest.kt | 51 +++++++++++-------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/moshi-proguard-rule-gen/src/main/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessor.kt b/moshi-proguard-rule-gen/src/main/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessor.kt index 84f5a07d..3204b676 100644 --- a/moshi-proguard-rule-gen/src/main/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessor.kt +++ b/moshi-proguard-rule-gen/src/main/kotlin/dev/zacsweers/moshix/proguardgen/MoshiProguardGenSymbolProcessor.kt @@ -100,8 +100,11 @@ public class MoshiProguardGenSymbolProcessor( targetConstructorHasDefaults = false, targetConstructorParams = emptyList() ) - val fileName = "moshi-${targetType.canonicalName}.pro" - environment.logger.info("MOSHI: Writing rules for $fileName: $config", clazz) + environment.logger.info( + "MOSHI: Writing proguard rules for ${targetType.canonicalName}: $config", + clazz + ) + val fileName = config.outputFilePathWithoutExtension(targetType.canonicalName) environment.codeGenerator .createNewFile( Dependencies( @@ -110,7 +113,7 @@ public class MoshiProguardGenSymbolProcessor( ), packageName = "", fileName = fileName, - extensionName = "", + extensionName = "pro", ) .bufferedWriter() .use { writer -> 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 e0797785..8f4106ef 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 @@ -25,6 +25,7 @@ import com.tschuchort.compiletesting.kspSourcesDir import com.tschuchort.compiletesting.symbolProcessorProviders 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 java.io.File import org.junit.Test class MoshiSealedSymbolProcessorProviderTest { @@ -61,18 +62,19 @@ class MoshiSealedSymbolProcessorProviderTest { val generatedSourcesDir = compilation.kspSourcesDir val proguardFiles = generatedSourcesDir.walkTopDown().filter { it.extension == "pro" }.toList() check(proguardFiles.isNotEmpty()) - proguardFiles.forEach { generatedFile -> + for (generatedFile in proguardFiles) { + generatedFile.assertInCorrectPath() when (generatedFile.nameWithoutExtension) { "moshi-test.BaseType" -> assertThat(generatedFile.readText()) .contains( """ - # Conditionally keep this adapter for every possible nested subtype that uses it. - -if class test.BaseType.TypeC - -keep class test.BaseTypeJsonAdapter { - public (com.squareup.moshi.Moshi); - } - """ + # Conditionally keep this adapter for every possible nested subtype that uses it. + -if class test.BaseType.TypeC + -keep class test.BaseTypeJsonAdapter { + public (com.squareup.moshi.Moshi); + } + """ .trimIndent() ) else -> error("Unrecognized proguard file: $generatedFile") @@ -139,26 +141,27 @@ class MoshiSealedSymbolProcessorProviderTest { assertThat(result.exitCode).isEqualTo(ExitCode.OK) val generatedSourcesDir = compilation.kspSourcesDir val proguardFiles = generatedSourcesDir.walkTopDown().filter { it.extension == "pro" }.toList() - check(proguardFiles.isNotEmpty()) - proguardFiles.forEach { generatedFile -> + check(proguardFiles.isNotEmpty()) { "No generated proguard files found" } + for (generatedFile in proguardFiles) { + generatedFile.assertInCorrectPath() when (generatedFile.nameWithoutExtension) { "moshi-test.BaseType" -> assertThat(generatedFile.readText()) .contains( """ - -if class test.BaseType - -keepnames class test.BaseType - -if class test.BaseType - -keep class test.BaseTypeJsonAdapter { - public (com.squareup.moshi.Moshi); - } + -if class test.BaseType + -keepnames class test.BaseType + -if class test.BaseType + -keep class test.BaseTypeJsonAdapter { + public (com.squareup.moshi.Moshi); + } - # Conditionally keep this adapter for every possible nested subtype that uses it. - -if class test.BaseType.TypeC - -keep class test.BaseTypeJsonAdapter { - public (com.squareup.moshi.Moshi); - } - """ + # Conditionally keep this adapter for every possible nested subtype that uses it. + -if class test.BaseType.TypeC + -keep class test.BaseTypeJsonAdapter { + public (com.squareup.moshi.Moshi); + } + """ .trimIndent() ) else -> error("Unrecognized proguard file: $generatedFile") @@ -176,4 +179,10 @@ class MoshiSealedSymbolProcessorProviderTest { symbolProcessorProviders = listOf(MoshiProguardGenSymbolProcessor.Provider()) block() } + + private fun File.assertInCorrectPath() { + // Ensure the proguard file is in the right place + // https://github.com/ZacSweers/MoshiX/issues/461 + check(absolutePath.contains("META-INF/proguard/")) + } }