diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3229a5d..ec69797 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -24,7 +24,7 @@ android { buildTypes { release { - isMinifyEnabled = false + isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" diff --git a/wisp-processor/src/test/java/com/angrypodo/wisp/generator/RegistryGeneratorTest.kt b/wisp-processor/src/test/java/com/angrypodo/wisp/generator/RegistryGeneratorTest.kt index e47e003..0e1f665 100644 --- a/wisp-processor/src/test/java/com/angrypodo/wisp/generator/RegistryGeneratorTest.kt +++ b/wisp-processor/src/test/java/com/angrypodo/wisp/generator/RegistryGeneratorTest.kt @@ -10,9 +10,9 @@ import org.junit.jupiter.api.Test internal class RegistryGeneratorTest { @Test - @DisplayName("RouteInfo를 받아 WispModuleRegistry 오브젝트와 맵을 생성한다") + @DisplayName("Should generate WispModuleRegistry object and map from RouteInfo") fun `generate_registry_with_multiple_routes`() { - // Given: RouteInfo 데이터 2개 + // Given: Two RouteInfo objects val homeRoute = ObjectRouteInfo( routeClassName = ClassName("com.example", "Home"), factoryClassName = ClassName("com.example", "HomeRouteFactory"), @@ -28,20 +28,22 @@ internal class RegistryGeneratorTest { val routes = listOf(homeRoute, profileRoute) - // When: 코드 생성 실행 + // When: Code generation is executed val generatedRegistry = WispRegistryGenerator().generate(routes) val generatedCode = generatedRegistry.fileSpec.toString() - // Then: 생성된 WispModuleRegistry 객체를 반환 (해시값이 포함된 이름) - assertTrue(generatedCode.contains("object WispModuleRegistry_")) - // SPI 인터페이스 구현 확인 + // Then: Return the generated WispModuleRegistry object (with a hash in its name) + assertTrue(generatedCode.contains("class WispModuleRegistry_")) + // Check for SPI interface implementation assertTrue(generatedCode.contains(": WispModuleRegistry")) - // 맵 생성 확인 - assertTrue(generatedCode.contains("val factories: Map = mapOf(")) - // getRoutes 메서드 확인 - assertTrue(generatedCode.contains("override fun getRoutes")) - - // 라우트 팩토리 매핑 확인 + // Check for map creation + assertTrue(generatedCode.contains("private val factories:")) + assertTrue(generatedCode.contains("Map")) + assertTrue(generatedCode.contains("= mapOf(")) + // Check for getRoutes method + assertTrue(generatedCode.contains("override fun getRoutes(): Map")) + + // Check for route factory mappings assertTrue(generatedCode.contains("import com.example.HomeRouteFactory")) assertTrue(generatedCode.contains("\"home\" to HomeRouteFactory")) diff --git a/wisp-runtime/consumer-rules.pro b/wisp-runtime/consumer-rules.pro index e69de29..032a844 100644 --- a/wisp-runtime/consumer-rules.pro +++ b/wisp-runtime/consumer-rules.pro @@ -0,0 +1,17 @@ +# Keep Wisp-generated classes from being removed or obfuscated by ProGuard. + +# Keep the WispModuleRegistry implementation for ServiceLoader. +# ServiceLoader requires a public class with a public no-argument constructor. +-keep public class com.angrypodo.wisp.generated.WispModuleRegistry_* { + public (); +} + +# Keep the generated RouteFactory implementations. These are instantiated by the registry. +-keep class com.angrypodo.wisp.generated.*RouteFactory { + *; +} + +# The following rule is generally not needed because kotlinx-serialization-json +# includes its own consumer proguard rules that keep @Serializable classes. +# However, it can be added for extra safety if you encounter issues. +# -keep @kotlinx.serialization.Serializable class * { *; }