diff --git a/build.gradle b/build.gradle index c38978d64ec4..eba5484f157b 100644 --- a/build.gradle +++ b/build.gradle @@ -85,7 +85,7 @@ ext { kotlinxCoroutinesVersion = '1.7.3' lottieVersion = '6.1.0' philjayMpAndroidChartVersion = 'v3.1.0' - squareupKotlinPoetVersion = '1.6.0' + squareupKotlinPoetVersion = '1.16.0' squareupOkioVersion = '3.6.0' squareupRetrofitVersion = '2.9.0' uCropVersion = '2.2.8' diff --git a/libs/processors/src/main/java/org/wordpress/android/processor/FeaturesInDevelopmentDefaultsBuilder.kt b/libs/processors/src/main/java/org/wordpress/android/processor/FeaturesInDevelopmentDefaultsBuilder.kt index bf4dc5c4fa73..1f326017947d 100644 --- a/libs/processors/src/main/java/org/wordpress/android/processor/FeaturesInDevelopmentDefaultsBuilder.kt +++ b/libs/processors/src/main/java/org/wordpress/android/processor/FeaturesInDevelopmentDefaultsBuilder.kt @@ -28,7 +28,7 @@ class FeaturesInDevelopmentDefaultsBuilder(private val featuresInDevelopment: Li .build() return FileSpec.builder("org.wordpress.android.util.config", "FeaturesInDevelopment") .addType(remoteConfigDefaults) - .addComment("Automatically generated file. DO NOT MODIFY") + .addFileComment("Automatically generated file. DO NOT MODIFY") .indent(" ") .build() } diff --git a/libs/processors/src/main/java/org/wordpress/android/processor/RemoteConfigProcessor.kt b/libs/processors/src/main/java/org/wordpress/android/processor/RemoteConfigProcessor.kt index 225e133791cb..a8217dd7084f 100644 --- a/libs/processors/src/main/java/org/wordpress/android/processor/RemoteConfigProcessor.kt +++ b/libs/processors/src/main/java/org/wordpress/android/processor/RemoteConfigProcessor.kt @@ -1,6 +1,7 @@ package org.wordpress.android.processor import com.google.auto.service.AutoService +import com.squareup.kotlinpoet.DelicateKotlinPoetApi import com.squareup.kotlinpoet.TypeName import com.squareup.kotlinpoet.asTypeName import org.wordpress.android.annotation.Experiment @@ -26,6 +27,7 @@ import javax.tools.Diagnostic.Kind "org.wordpress.android.annotation.RemoteFieldDefaultGenerater" ) class RemoteConfigProcessor : AbstractProcessor() { + @OptIn(DelicateKotlinPoetApi::class) @Suppress("DEPRECATION") override fun process(p0: MutableSet?, roundEnvironment: RoundEnvironment?): Boolean { val experiments = roundEnvironment?.getElementsAnnotatedWith(Experiment::class.java)?.map { element -> diff --git a/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigCheckBuilder.kt b/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigCheckBuilder.kt index 6bae01db287f..d60995c5586b 100644 --- a/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigCheckBuilder.kt +++ b/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigCheckBuilder.kt @@ -42,7 +42,7 @@ class RemoteFeatureConfigCheckBuilder(private val remoteFeatures: List .build() return FileSpec.builder("org.wordpress.android.util.config", "RemoteFeatureConfigCheck") .addType(remoteFeatureConfigDefaults) - .addComment("Automatically generated file. DO NOT MODIFY") + .addFileComment("Automatically generated file. DO NOT MODIFY") .indent(" ") .build() } diff --git a/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilder.kt b/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilder.kt index 04a37de19c2e..63769cc3c254 100644 --- a/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilder.kt +++ b/libs/processors/src/main/java/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilder.kt @@ -31,7 +31,7 @@ class RemoteFeatureConfigDefaultsBuilder(private val defaults: Map .build() return FileSpec.builder("org.wordpress.android.util.config", FILE_NAME) .addType(remoteConfigDefaults) - .addComment("Automatically generated file. DO NOT MODIFY") + .addFileComment("Automatically generated file. DO NOT MODIFY") .indent(" ") .build() } diff --git a/libs/processors/src/test/kotlin/org/wordpress/android/processor/FeaturesInDevelopmentDefaultsBuilderTest.kt b/libs/processors/src/test/kotlin/org/wordpress/android/processor/FeaturesInDevelopmentDefaultsBuilderTest.kt new file mode 100644 index 000000000000..46a4847c3346 --- /dev/null +++ b/libs/processors/src/test/kotlin/org/wordpress/android/processor/FeaturesInDevelopmentDefaultsBuilderTest.kt @@ -0,0 +1,62 @@ +package org.wordpress.android.processor + +import org.assertj.core.api.Assertions +import org.junit.Test + +class FeaturesInDevelopmentDefaultsBuilderTest { + @Test + fun `given a list of features in development, when building the object, then generate the correct list`() { + // given + val featureA = "valueA" + val featureB = "valueB" + val features = listOf(featureA, featureB) + + // when + val sut = FeaturesInDevelopmentDefaultsBuilder(features) + + // then + Assertions.assertThat(sut.getContent().toString()).isEqualTo( + """ + // Automatically generated file. DO NOT MODIFY + package org.wordpress.android.util.config + + import kotlin.String + import kotlin.collections.List + + public object FeaturesInDevelopment { + public val featuresInDevelopment: List = listOf( + "$featureA", + "$featureB" + ) + } + + """.trimIndent() + ) + } + + @Test + fun `given an empty list of features in development, when building the object, then generate empty list`() { + // given + val features = emptyList() + + // when + val sut = FeaturesInDevelopmentDefaultsBuilder(features) + + // then + Assertions.assertThat(sut.getContent().toString()).isEqualTo( + """ + // Automatically generated file. DO NOT MODIFY + package org.wordpress.android.util.config + + import kotlin.String + import kotlin.collections.List + + public object FeaturesInDevelopment { + public val featuresInDevelopment: List = listOf( + ) + } + + """.trimIndent() + ) + } +} diff --git a/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFeatureConfigCheckBuilderTest.kt b/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFeatureConfigCheckBuilderTest.kt new file mode 100644 index 000000000000..ac7e2f8cab6e --- /dev/null +++ b/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFeatureConfigCheckBuilderTest.kt @@ -0,0 +1,52 @@ +package org.wordpress.android.processor + +import com.squareup.kotlinpoet.ClassName +import org.assertj.core.api.Assertions +import org.junit.Test + +class RemoteFeatureConfigCheckBuilderTest { + @Test + fun `given feature classes, when building config check, then generate the correct checks`() { + // given + val classA = "customClassA" + val classB = "customClassB" + val features = listOf( + ClassName("org.wordpress", listOf(classA)), + ClassName("org.wordpress", listOf(classB)) + ) + + // when + val sut = RemoteFeatureConfigCheckBuilder(features) + + // then + Assertions.assertThat(sut.getContent().toString()).isEqualTo( + """ + // Automatically generated file. DO NOT MODIFY + package org.wordpress.android.util.config + + import org.wordpress.$classA + import org.wordpress.$classB + + public class RemoteFeatureConfigCheck( + public val appConfig: AppConfig, + ) { + public val $classA: $classA = $classA(appConfig) + + public val $classB: $classB = $classB(appConfig) + + public fun checkRemoteFields() { + if ($classA.remoteField == null) { + throw IllegalArgumentException(""${'"'}org.wordpress.$classA needs to define + remoteField""${'"'}) + } + if ($classB.remoteField == null) { + throw IllegalArgumentException(""${'"'}org.wordpress.$classB needs to define + remoteField""${'"'}) + } + } + } + + """.trimIndent() + ) + } +} diff --git a/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilderTest.kt b/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilderTest.kt index ed1837b1d501..e8c6889aa4e6 100644 --- a/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilderTest.kt +++ b/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFeatureConfigDefaultsBuilderTest.kt @@ -24,8 +24,8 @@ class RemoteFeatureConfigDefaultsBuilderTest { import kotlin.String import kotlin.collections.Map - object RemoteFeatureConfigDefaults { - val remoteFeatureConfigDefaults: Map = mapOf( + public object RemoteFeatureConfigDefaults { + public val remoteFeatureConfigDefaults: Map = mapOf( "$keyA" to "$valueA", "$keyB" to "$valueB" ) diff --git a/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFieldConfigDefaultsBuilderTest.kt b/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFieldConfigDefaultsBuilderTest.kt new file mode 100644 index 000000000000..c173b0900059 --- /dev/null +++ b/libs/processors/src/test/kotlin/org/wordpress/android/processor/RemoteFieldConfigDefaultsBuilderTest.kt @@ -0,0 +1,65 @@ +package org.wordpress.android.processor + +import org.junit.Assert.assertEquals +import org.junit.Test + +class RemoteFieldConfigDefaultsBuilderTest { + @Test + fun `given a list of remote fields, when building the object, then generate list of remote fields`() { + // given + val keyA = "keyA" + val valueA = "valueA" + val keyB = "keyB" + val valueB = "valueB" + + // when + val sut = RemoteFieldConfigDefaultsBuilder(mapOf(keyA to valueA, keyB to valueB)) + + // then + assertEquals( + """ + // Automatically generated file. DO NOT MODIFY + package org.wordpress.android.util.config + + import kotlin.Any + import kotlin.String + import kotlin.collections.Map + + public object RemoteFieldConfigDefaults { + public val remoteFieldConfigDefaults: Map = mapOf( + "$keyA" to "$valueA", + "$keyB" to "$valueB" + ) + } + + """.trimIndent(), sut.getContent().toString() + ) + } + + @Test + fun `given an empty list of remote fields, when building the object, then generate empty list of remote fields`() { + // given + val remoteFields = emptyMap() + + // when + val sut = RemoteFieldConfigDefaultsBuilder(remoteFields) + + // then + assertEquals( + """ + // Automatically generated file. DO NOT MODIFY + package org.wordpress.android.util.config + + import kotlin.Any + import kotlin.String + import kotlin.collections.Map + + public object RemoteFieldConfigDefaults { + public val remoteFieldConfigDefaults: Map = mapOf( + ) + } + + """.trimIndent(), sut.getContent().toString() + ) + } +}