From 5c374cc2b84579d60b7ab9999c992e95e3832313 Mon Sep 17 00:00:00 2001 From: Taso Dane Date: Mon, 6 Jun 2022 23:35:56 +0200 Subject: [PATCH 1/3] Reproduce false-positive result for ViewBinding --- .../core/DisableViewBindingTest.kt | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/modulecheck-core/src/test/kotlin/modulecheck/core/DisableViewBindingTest.kt b/modulecheck-core/src/test/kotlin/modulecheck/core/DisableViewBindingTest.kt index 8959ade0d4..2b0abc1cac 100644 --- a/modulecheck-core/src/test/kotlin/modulecheck/core/DisableViewBindingTest.kt +++ b/modulecheck-core/src/test/kotlin/modulecheck/core/DisableViewBindingTest.kt @@ -278,6 +278,85 @@ class DisableViewBindingTest : RunnerTest() { logger.parsedReport() shouldBe listOf() } + @Test + fun `ViewBinding from debug & release is used in main source set`() { + + val lib1 = androidLibrary(":lib1", "com.modulecheck.lib1") { + buildFile { + """ + plugins { + id("com.android.library") + kotlin("android") + } + + android { + buildFeatures.viewBinding = true + } + """ + } + addLayoutFile( + "fragment_lib1.xml", + """ + + """, + SourceSetName.DEBUG + ) + addLayoutFile( + "fragment_lib1.xml", + """ + + + + + """, + SourceSetName.RELEASE + ) + + // Setting a debug base package, but it's never used. The inferred FqName for the generated + // binding should still reflect the main source set even though it's evaluating a file in + // debug. + platformPlugin.manifests[SourceSetName.DEBUG] = projectDir + .child("src/debug/AndroidManifest.xml") + .createSafely("") + + addKotlinSource( + """ + package com.modulecheck.lib1 + + import com.modulecheck.lib1.databinding.FragmentLib1Binding + + val binding = FragmentLib1Binding() + """ + ) + } + + run( + autoCorrect = false + ).isSuccess shouldBe true + + lib1.buildFile shouldHaveText """ + plugins { + id("com.android.library") + kotlin("android") + } + + android { + buildFeatures.viewBinding = true + } + """ + + logger.parsedReport() shouldBe listOf() + } + @Test fun `ViewBinding from debug with different base package is used in debug source set`() { From d97d8852dec4c7a0066226bf7d1725caac1d7c8a Mon Sep 17 00:00:00 2001 From: Taso Dane Date: Mon, 6 Jun 2022 23:47:18 +0200 Subject: [PATCH 2/3] Simple fix to always include main --- .../kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt b/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt index 785b30cf86..4068064da5 100644 --- a/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt +++ b/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt @@ -21,6 +21,8 @@ import modulecheck.api.context.referencesForSourceSetName import modulecheck.config.ModuleCheckSettings import modulecheck.finding.FindingName import modulecheck.finding.android.DisableViewBindingGenerationFinding +import modulecheck.parsing.gradle.model.SourceSetName +import modulecheck.parsing.gradle.model.SourceSetName.Companion import modulecheck.project.McProject import modulecheck.project.isAndroid import modulecheck.project.project @@ -52,7 +54,7 @@ class DisableViewBindingRule @Inject constructor() : DocumentedRule generatedBindings.any { generated -> From e6dbe66e1cdf36fee13df188c60f61c6ebcff76e Mon Sep 17 00:00:00 2001 From: Taso Dane Date: Mon, 6 Jun 2022 23:49:57 +0200 Subject: [PATCH 3/3] Remove unneeded import --- .../main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt b/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt index 4068064da5..df3c5faf3f 100644 --- a/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt +++ b/modulecheck-rule/impl/src/main/kotlin/modulecheck/rule/impl/DisableViewBindingRule.kt @@ -22,7 +22,6 @@ import modulecheck.config.ModuleCheckSettings import modulecheck.finding.FindingName import modulecheck.finding.android.DisableViewBindingGenerationFinding import modulecheck.parsing.gradle.model.SourceSetName -import modulecheck.parsing.gradle.model.SourceSetName.Companion import modulecheck.project.McProject import modulecheck.project.isAndroid import modulecheck.project.project