diff --git a/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java b/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java index cce4bd81..a0c70196 100644 --- a/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java +++ b/src/main/java/org/sonarqube/gradle/SonarPropertyComputer.java @@ -107,17 +107,13 @@ private void computeSonarProperties(Project project, Map propert if (isAndroidProject(project)) { AndroidUtils.configureForAndroid(project, SonarQubePlugin.getConfiguredAndroidVariant(project), rawProperties); } - - ActionBroadcast actionBroadcast = actionBroadcastMap.get(project.getPath()); - if (actionBroadcast != null) { - evaluateSonarPropertiesBlocks(actionBroadcast, rawProperties); - } - if (project.equals(targetProject)) { - addEnvironmentProperties(rawProperties); - addSystemProperties(rawProperties); + if (isRootProject(project)) { addKotlinBuildScriptsToSources(project, rawProperties); } + overrideWithUserDefinedProperties(project, rawProperties); + + // This is required if "sonar.sources" are neither found nor defined by user rawProperties.putIfAbsent(SONAR_SOURCES_PROP, ""); if (project.equals(targetProject)) { @@ -156,6 +152,20 @@ private void computeSonarProperties(Project project, Map propert properties.put(convertKey("sonar.modules", prefix), String.join(",", moduleIds)); } + private void overrideWithUserDefinedProperties(Project project, Map rawProperties) { + ActionBroadcast actionBroadcast = actionBroadcastMap.get(project.getPath()); + if (actionBroadcast != null) { + evaluateSonarPropertiesBlocks(actionBroadcast, rawProperties); + } + if (isRootProject(project)) { + addEnvironmentProperties(rawProperties); + addSystemProperties(rawProperties); + } + } + + private boolean isRootProject(Project project) { + return project.equals(targetProject); + } private static void evaluateSonarPropertiesBlocks(ActionBroadcast propertiesActions, Map properties) { SonarProperties sqProperties = new SonarProperties(properties); diff --git a/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy b/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy index 199e3c8a..ef04c7ee 100644 --- a/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy +++ b/src/test/groovy/org/sonarqube/gradle/GradleKtsTests.groovy @@ -199,6 +199,27 @@ class GradleKtsTests extends Specification { } + def "don't add .gradle.kts files if sources are overridden"() { + given: + addBuildKtsWithCustomSources() + addSettingsKts() + + when: + GradleRunner.create() + .withProjectDir(testProjectDir.toFile()) + .forwardOutput() + .withArguments('sonarqube', '--info', '-Dsonar.scanner.dumpToFile=' + outFile.toAbsolutePath()) + .withPluginClasspath() + .build() + + def props = new Properties() + props.load(outFile.newDataInputStream()) + + then: + props["sonar.sources"] == "src/main/custom" + + } + private def addSettings() { settingsFile = testProjectDir.resolve('settings.gradle') settingsFile << "rootProject.name = 'java-task-toolchains'" @@ -230,6 +251,22 @@ class GradleKtsTests extends Specification { """ } + private def addBuildKtsWithCustomSources() { + buildFile = testProjectDir.resolve('build.gradle.kts') + buildFile << """ + plugins { + java + id("org.sonarqube") + } + + sonar { + properties { + property("sonar.sources", "src/main/custom") + } + } + """ + } + private def addSubProject() { settingsFile << """ include("subproject")