From 27d257c8a900ae45e656fc44816717851a35fe92 Mon Sep 17 00:00:00 2001 From: Angelo Buono Date: Tue, 2 Jul 2024 16:29:55 +0200 Subject: [PATCH 1/2] SCANGRADLE-152 Fix issue with child modules copying the "sonar.tests" property from the parent when it is not defined --- .../org/sonarqube/gradle/SonarPropertyComputer.java | 3 ++- .../groovy/org/sonarqube/gradle/GradleKtsTests.groovy | 10 +++++----- .../org/sonarqube/gradle/SonarQubePluginTest.groovy | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java b/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java index d02b4ab5..7322f1de 100644 --- a/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java +++ b/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java @@ -136,8 +136,9 @@ private void computeDefaultProperties(Project project, Map prope overrideWithUserDefinedProperties(project, rawProperties); - // This is required if "sonar.sources" are neither found nor defined by user + // This is required if "sonar.sources" or "sonar.tests" are neither found nor defined by user; possible undesired behaviors due to the copy of those properties from the parent rawProperties.putIfAbsent(ScanProperties.PROJECT_SOURCE_DIRS, ""); + rawProperties.putIfAbsent(ScanProperties.PROJECT_TEST_DIRS, ""); if (project.equals(targetProject)) { rawProperties.putIfAbsent("sonar.projectKey", computeProjectKey()); diff --git a/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy b/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy index 22326139..21a179d8 100644 --- a/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy +++ b/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy @@ -83,7 +83,7 @@ class GradleKtsTests extends Specification { then: props["sonar.sources"] == buildFile.toRealPath().toString() - !props.containsKey("sonar.tests") + props["sonar.tests"] == "" } def "add only settings file to sources when only settings file is in kotlin dsl"() { @@ -104,7 +104,7 @@ class GradleKtsTests extends Specification { then: props["sonar.sources"] == settingsFile.toRealPath().toString() - !props.containsKey("sonar.tests") + props["sonar.tests"] == "" } def "add only build file to sources when no settings found"() { @@ -124,7 +124,7 @@ class GradleKtsTests extends Specification { then: props["sonar.sources"] == buildFile.toRealPath().toString() - !props.containsKey("sonar.tests") + props["sonar.tests"] == "" } def "add nothing to sources when Groovy dsl is used"() { @@ -145,7 +145,7 @@ class GradleKtsTests extends Specification { then: props["sonar.sources"] == "" - !props.containsKey("sonar.tests") + props["sonar.tests"] == "" } def "add nothing to sources when Groovy dsl is used and no settings"() { @@ -165,7 +165,7 @@ class GradleKtsTests extends Specification { then: props["sonar.sources"] == "" - !props.containsKey("sonar.tests") + props["sonar.tests"] == "" } def "add .gradle.kts files to sources only once"() { diff --git a/src/test/groovy/org/sonarqube/gradle/SonarQubePluginTest.groovy b/src/test/groovy/org/sonarqube/gradle/SonarQubePluginTest.groovy index 4339cb24..f0e2081c 100644 --- a/src/test/groovy/org/sonarqube/gradle/SonarQubePluginTest.groovy +++ b/src/test/groovy/org/sonarqube/gradle/SonarQubePluginTest.groovy @@ -485,7 +485,7 @@ class SonarQubePluginTest extends Specification { def properties = parentSonarTask().properties.get() then: - !properties.containsKey("sonar.tests") + properties["sonar.tests"].isEmpty() !properties.containsKey("sonar.surefire.reportsPath") !properties.containsKey("sonar.junit.reportsPath") } From 4154267e9e270a28cb6464f403809f0c22cca529 Mon Sep 17 00:00:00 2001 From: Angelo Buono Date: Tue, 2 Jul 2024 16:49:27 +0200 Subject: [PATCH 2/2] Update src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java Co-authored-by: Dorian Burihabwa <75226315+dorian-burihabwa-sonarsource@users.noreply.github.com> --- src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java b/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java index 7322f1de..c7039f48 100644 --- a/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java +++ b/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java @@ -136,7 +136,8 @@ private void computeDefaultProperties(Project project, Map prope overrideWithUserDefinedProperties(project, rawProperties); - // This is required if "sonar.sources" or "sonar.tests" are neither found nor defined by user; possible undesired behaviors due to the copy of those properties from the parent + // These empty assignments are required because modules with no `sonar.sources` or `sonar.tests` value inherit the value from their parent module. + // This can eventually lead to a double indexing issue in the scanner-engine. rawProperties.putIfAbsent(ScanProperties.PROJECT_SOURCE_DIRS, ""); rawProperties.putIfAbsent(ScanProperties.PROJECT_TEST_DIRS, "");