From 89e95c900df75cb6f88577eb144c766fad2c8d6e Mon Sep 17 00:00:00 2001 From: Taso Dane Date: Sun, 27 Mar 2022 18:04:09 +0200 Subject: [PATCH 1/2] Support the alternative usage of kapt plugin --- .../modulecheck/core/UnusedPluginFinding.kt | 8 +- .../modulecheck/core/rule/UnusedKaptRule.kt | 2 + .../core/UnusedKaptProcessorTest.kt | 106 ++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) diff --git a/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt b/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt index 9b96185203..c609ee2759 100644 --- a/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt +++ b/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt @@ -35,6 +35,7 @@ data class UnusedPluginFinding( override val buildFile: File, override val findingName: String, val pluginId: String, + val alternatePluginId: String = "", val kotlinPluginFunction: String = "" ) : Finding, Problem, Fixable, Deletable { @@ -53,8 +54,10 @@ data class UnusedPluginFinding( val row = lines .indexOfFirst { line -> line.contains("id(\"$pluginId\")") || + line.contains("id(\"$alternatePluginId\")") || line.contains(kotlinPluginFunction) || - line.contains("plugin = \"$pluginId\")") + line.contains("plugin = \"$pluginId\")") || + line.contains("plugin = \"$alternatePluginId\")") } if (row < 0) return@lazyDeferred null @@ -71,6 +74,9 @@ data class UnusedPluginFinding( "id(\"$pluginId\")", "id \"$pluginId\"", "id '$pluginId'", + "id(\"$alternatePluginId\")", + "id \"$alternatePluginId\"", + "id '$alternatePluginId'", kotlinPluginFunction ).firstNotNullOfOrNull { id -> dependentProject.buildFileParser.pluginsBlock()?.getById(id) diff --git a/modulecheck-core/src/main/kotlin/modulecheck/core/rule/UnusedKaptRule.kt b/modulecheck-core/src/main/kotlin/modulecheck/core/rule/UnusedKaptRule.kt index 3241bbcaad..faa7defd31 100644 --- a/modulecheck-core/src/main/kotlin/modulecheck/core/rule/UnusedKaptRule.kt +++ b/modulecheck-core/src/main/kotlin/modulecheck/core/rule/UnusedKaptRule.kt @@ -32,6 +32,7 @@ import modulecheck.utils.LazySet import modulecheck.utils.any const val KAPT_PLUGIN_ID = "org.jetbrains.kotlin.kapt" +const val KAPT_ALTERNATE_PLUGIN_ID = "kotlin-kapt" private const val KAPT_PLUGIN_FUN = "kotlin(\"kapt\")" class UnusedKaptRule( @@ -91,6 +92,7 @@ class UnusedKaptRule( buildFile = project.buildFile, findingName = "unusedKaptPlugin", pluginId = KAPT_PLUGIN_ID, + alternatePluginId = KAPT_ALTERNATE_PLUGIN_ID, kotlinPluginFunction = KAPT_PLUGIN_FUN ) } else { diff --git a/modulecheck-core/src/test/kotlin/modulecheck/core/UnusedKaptProcessorTest.kt b/modulecheck-core/src/test/kotlin/modulecheck/core/UnusedKaptProcessorTest.kt index 5159db65e2..64452ca636 100644 --- a/modulecheck-core/src/test/kotlin/modulecheck/core/UnusedKaptProcessorTest.kt +++ b/modulecheck-core/src/test/kotlin/modulecheck/core/UnusedKaptProcessorTest.kt @@ -81,6 +81,60 @@ class UnusedKaptProcessorTest : RunnerTest() { ) } + @Test + fun `unused from kapt configuration with alternate plugin id without autoCorrect should fail`() { + + val app = kotlinProject(":app") { + hasKapt = true + + addExternalDependency(ConfigurationName.kapt, dagger) + + buildFile { + """ + plugins { + id("kotlin-jvm") + id("kotlin-kapt") + } + + dependencies { + kapt("$dagger") + } + """ + } + } + + run( + autoCorrect = false + ).isSuccess shouldBe false + + app.buildFile shouldHaveText """ + plugins { + id("kotlin-jvm") + id("kotlin-kapt") + } + + dependencies { + kapt("$dagger") + } + """ + + logger.parsedReport() shouldBe listOf( + ":app" to listOf( + unusedKaptProcessor( + fixed = false, + configuration = "kapt", + dependency = "com.google.dagger:dagger-compiler", + position = "7, 3" + ), + unusedKaptPlugin( + fixed = false, + dependency = "org.jetbrains.kotlin.kapt", + position = "3, 3" + ) + ) + ) + } + @Test fun `unused from non-kapt configuration without autoCorrect should pass without changes`() { @@ -273,4 +327,56 @@ class UnusedKaptProcessorTest : RunnerTest() { ) ) } + + @Test + fun `unused with main kapt with alternate plugin id with autoCorrect and no other processors should remove processor and plugin`() { + + val app = kotlinProject(":app") { + hasKapt = true + + addExternalDependency(ConfigurationName.kapt, dagger) + + buildFile { + """ + plugins { + id("kotlin-jvm") + id("kotlin-kapt") + } + + dependencies { + kapt("$dagger") + } + """ + } + } + + run().isSuccess shouldBe true + + app.buildFile shouldHaveText """ + plugins { + id("kotlin-jvm") + // id("kotlin-kapt") // ModuleCheck finding [unusedKaptPlugin] + } + + dependencies { + // kapt("com.google.dagger:dagger-compiler:2.40.5") // ModuleCheck finding [unusedKaptProcessor] + } + """ + + logger.parsedReport() shouldBe listOf( + ":app" to listOf( + unusedKaptProcessor( + fixed = true, + configuration = "kapt", + dependency = "com.google.dagger:dagger-compiler", + position = "7, 3" + ), + unusedKaptPlugin( + fixed = true, + dependency = "org.jetbrains.kotlin.kapt", + position = "3, 3" + ) + ) + ) + } } From 313dd5e1edb723351641c7fbf258982714a0907a Mon Sep 17 00:00:00 2001 From: Taso Dane Date: Sun, 27 Mar 2022 22:54:26 +0200 Subject: [PATCH 2/2] fix formatting --- .../src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt b/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt index c609ee2759..5b41b48ace 100644 --- a/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt +++ b/modulecheck-core/src/main/kotlin/modulecheck/core/UnusedPluginFinding.kt @@ -54,7 +54,7 @@ data class UnusedPluginFinding( val row = lines .indexOfFirst { line -> line.contains("id(\"$pluginId\")") || - line.contains("id(\"$alternatePluginId\")") || + line.contains("id(\"$alternatePluginId\")") || line.contains(kotlinPluginFunction) || line.contains("plugin = \"$pluginId\")") || line.contains("plugin = \"$alternatePluginId\")")