Browse Source

SONAR-11449 Drop deprecated property sonar.language

tags/7.7
Benoît Gianinetti 5 years ago
parent
commit
0bc8757a16
16 changed files with 10 additions and 97 deletions
  1. 1
    2
      server/sonar-docs/src/pages/analysis/analysis-parameters.md
  2. 0
    6
      sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java
  3. 0
    1
      sonar-plugin-api/test-resources/org/sonar/api/filesystem/sample-with-symlink/sonar-project.properties
  4. 0
    1
      sonar-plugin-api/test-resources/org/sonar/api/filesystem/sample/sonar-project.properties
  5. 1
    4
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/FileIndexer.java
  6. 2
    31
      sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/LanguageDetection.java
  7. 6
    1
      sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java
  8. 0
    41
      sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/LanguageDetectionTest.java
  9. 0
    2
      sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/multi-language-definitions-all-in-root/sonar-project.properties
  10. 0
    2
      sonar-scanner-engine/test-resources/mediumtest/xoo/multi-modules-sample/sonar-project.properties
  11. 0
    1
      sonar-scanner-engine/test-resources/mediumtest/xoo/sample-generic-coverage/sonar-project.properties
  12. 0
    1
      sonar-scanner-engine/test-resources/mediumtest/xoo/sample-generic-test-exec/sonar-project.properties
  13. 0
    1
      sonar-scanner-engine/test-resources/mediumtest/xoo/sample-with-empty-file/sonar-project.properties
  14. 0
    1
      sonar-scanner-engine/test-resources/mediumtest/xoo/sample-with-ignored-file/sonar-project.properties
  15. 0
    1
      sonar-scanner-engine/test-resources/mediumtest/xoo/sample-with-symlink/sonar-project.properties
  16. 0
    1
      sonar-scanner-engine/test-resources/mediumtest/xoo/sample/sonar-project.properties

+ 1
- 2
server/sonar-docs/src/pages/analysis/analysis-parameters.md View File

@@ -99,7 +99,6 @@ Key | Description | Default
Key | Description
---|----|---
`sonar.branch` **![](/images/cross.svg)Deprecated since SQ 6.7** | _The Developer Edition provides fuller-featured branch functionality._ Manage SCM branches. Two branches of the same project are considered to be different projects in SonarQube. As a consequence issues found in a project A in a branch B1 are not linked to issues found for this project A in a branch B2. There is no way to automatically resolve issues from B2 when they are resolved in B1 as again A-B1 & A-B2 are considered separated projects.
`sonar.language` **![](/images/cross.svg)Deprecated since SQ 4.5** | Set the language of the source code to analyze. Browse the Plugin Library page to get the list of all available languages. If not set, a multi-language analysis will be triggered.
`sonar.profile` **![](/images/cross.svg)Deprecated since SQ 4.5** | Override the profile to be used. This should be set on a per-language basis through the UI instead.
`sonar.profile` **![](/images/cross.svg)Deprecated since SQ 4.5** | Override the profile to be used. This should be set on a per-langauge basis through the UI instead.
`sonar.links.scm_dev` **![](/images/cross.svg)Deprecated since SQ 7.1** | Developer connection. | `<scm><developerConnection>` for Maven projects
<!-- /sonarqube -->

+ 0
- 6
sonar-plugin-api/src/main/java/org/sonar/api/CoreProperties.java View File

@@ -180,12 +180,6 @@ public interface CoreProperties {
*/
String LONG_LIVED_BRANCHES_REGEX = "sonar.branch.longLivedBranches.regex";

/**
* @deprecated since 4.2 projects are now multi-language
*/
@Deprecated
String PROJECT_LANGUAGE_PROPERTY = "sonar.language";

/* Exclusions */
String PROJECT_INCLUSIONS_PROPERTY = "sonar.inclusions";
String PROJECT_EXCLUSIONS_PROPERTY = "sonar.exclusions";

+ 0
- 1
sonar-plugin-api/test-resources/org/sonar/api/filesystem/sample-with-symlink/sonar-project.properties View File

@@ -3,4 +3,3 @@ sonar.projectName=Sample
sonar.projectVersion=0.1-SNAPSHOT
sonar.sources=xources
sonar.tests=testx
sonar.language=xoo

+ 0
- 1
sonar-plugin-api/test-resources/org/sonar/api/filesystem/sample/sonar-project.properties View File

@@ -3,4 +3,3 @@ sonar.projectName=Sample
sonar.projectVersion=0.1-SNAPSHOT
sonar.sources=xources
sonar.tests=testx
sonar.language=xoo

+ 1
- 4
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/FileIndexer.java View File

@@ -118,11 +118,8 @@ public class FileIndexer {
exclusionCounter.increaseByPatternsCount();
return;
}

String language = langDetection.language(realAbsoluteFile, projectRelativePath);
if (language == null && langDetection.getForcedLanguage() != null) {
LOG.warn("File '{}' is ignored because it doesn't belong to the forced language '{}'", realAbsoluteFile.toAbsolutePath(), langDetection.getForcedLanguage());
return;
}

if (ignoreCommand != null && ignoreCommand.isIgnored(realAbsoluteFile)) {
LOG.debug("File '{}' is excluded by the scm ignore settings.", realAbsoluteFile);

+ 2
- 31
sonar-scanner-engine/src/main/java/org/sonar/scanner/scan/filesystem/LanguageDetection.java View File

@@ -32,7 +32,6 @@ import javax.annotation.concurrent.ThreadSafe;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.fs.internal.PathPattern;
import org.sonar.api.config.Configuration;
import org.sonar.api.utils.MessageException;
@@ -52,7 +51,6 @@ public class LanguageDetection {
*/
private final Map<String, PathPattern[]> patternsByLanguage;
private final List<String> languagesToConsider;
private final String forcedLanguage;

public LanguageDetection(Configuration settings, LanguagesRepository languages) {
Map<String, PathPattern[]> patternsByLanguageBuilder = new LinkedHashMap<>();
@@ -75,29 +73,10 @@ public class LanguageDetection {
}
}

forcedLanguage = StringUtils.defaultIfBlank(settings.get(CoreProperties.PROJECT_LANGUAGE_PROPERTY).orElse(null), null);
// First try with lang patterns
if (forcedLanguage != null) {
if (!patternsByLanguageBuilder.containsKey(forcedLanguage)) {
throw MessageException.of("You must install a plugin that supports the language '" + forcedLanguage + "'");
}
LOG.info("Language is forced to {}", forcedLanguage);
languagesToConsider = Collections.singletonList(forcedLanguage);
} else {
languagesToConsider = Collections.unmodifiableList(new ArrayList<>(patternsByLanguageBuilder.keySet()));
}

languagesToConsider = Collections.unmodifiableList(new ArrayList<>(patternsByLanguageBuilder.keySet()));
patternsByLanguage = Collections.unmodifiableMap(patternsByLanguageBuilder);
}

public String getForcedLanguage() {
return forcedLanguage;
}

Map<String, PathPattern[]> patternsByLanguage() {
return patternsByLanguage;
}

@CheckForNull
String language(Path absolutePath, Path relativePath) {
String detectedLanguage = null;
@@ -112,16 +91,8 @@ public class LanguageDetection {
}
}
}
if (detectedLanguage != null) {
return detectedLanguage;
}

// Check if deprecated sonar.language is used and we are on a language without declared extensions.
// Languages without declared suffixes match everything.
if (forcedLanguage != null && patternsByLanguage.get(forcedLanguage).length == 0) {
return forcedLanguage;
}
return null;
return detectedLanguage;
}

private boolean isCandidateForLanguage(Path absolutePath, Path relativePath, String languageKey) {

+ 6
- 1
sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java View File

@@ -789,6 +789,8 @@ public class FileSystemMediumTest {
File projectDir = new File("test-resources/mediumtest/xoo/sample-with-symlink");
AnalysisResult result = tester
.newAnalysis(new File(projectDir, "sonar-project.properties"))
.property("sonar.exclusions", "**/*.xoo.measures,**/*.xoo.scm")
.property("sonar.test.exclusions", "**/*.xoo.measures,**/*.xoo.scm")
.execute();

assertThat(result.inputFiles()).hasSize(3);
@@ -1071,9 +1073,10 @@ public class FileSystemMediumTest {
File projectDir = new File("test-resources/mediumtest/xoo/sample-with-ignored-file");
AnalysisResult result = tester
.newAnalysis(new File(projectDir, "sonar-project.properties"))
.property("sonar.exclusions", "**/*.xoo.ignore")
.property("sonar.test.exclusions", "**/*.xoo.ignore")
.execute();

assertThat(result.inputFiles()).hasSize(2);
assertThat(result.inputFile("xources/hello/ClassTwo.xoo")).isNull();
assertThat(result.inputFile("testx/ClassTwoTest.xoo")).isNull();

@@ -1087,6 +1090,8 @@ public class FileSystemMediumTest {
AnalysisResult result = tester
.newAnalysis(new File(projectDir, "sonar-project.properties"))
.property("sonar.scm.exclusions.disabled", "true")
.property("sonar.exclusions", "**/*.xoo.ignore")
.property("sonar.test.exclusions", "**/*.xoo.ignore")
.execute();

assertThat(result.inputFiles()).hasSize(4);

+ 0
- 41
sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/LanguageDetectionTest.java View File

@@ -94,47 +94,6 @@ public class LanguageDetectionTest {
assertThat(detectLanguage(detection, "abc.abap")).isEqualTo("abap");
}

@Test
public void language_with_no_extension() throws Exception {
// abap does not declare any file extensions.
// When analyzing an ABAP project, then all source files must be parsed.
LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("java", "java"), new MockLanguage("abap")));

// No side-effect on non-ABAP projects
LanguageDetection detection = new LanguageDetection(settings.asConfig(), languages);
assertThat(detectLanguage(detection, "abc")).isNull();
assertThat(detectLanguage(detection, "abc.abap")).isNull();
assertThat(detectLanguage(detection, "abc.java")).isEqualTo("java");

settings.setProperty(CoreProperties.PROJECT_LANGUAGE_PROPERTY, "abap");
detection = new LanguageDetection(settings.asConfig(), languages);
assertThat(detectLanguage(detection, "abc")).isEqualTo("abap");
assertThat(detectLanguage(detection, "abc.txt")).isEqualTo("abap");
assertThat(detectLanguage(detection, "abc.java")).isEqualTo("abap");
}

@Test
public void force_language_using_deprecated_property() throws Exception {
LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("java", "java"), new MockLanguage("php", "php")));

settings.setProperty(CoreProperties.PROJECT_LANGUAGE_PROPERTY, "java");
LanguageDetection detection = new LanguageDetection(settings.asConfig(), languages);
assertThat(detectLanguage(detection, "abc")).isNull();
assertThat(detectLanguage(detection, "abc.php")).isNull();
assertThat(detectLanguage(detection, "abc.java")).isEqualTo("java");
assertThat(detectLanguage(detection, "src/abc.java")).isEqualTo("java");
}

@Test
public void fail_if_invalid_language() {
thrown.expect(MessageException.class);
thrown.expectMessage("You must install a plugin that supports the language 'unknown'");

LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("java", "java"), new MockLanguage("php", "php")));
settings.setProperty(CoreProperties.PROJECT_LANGUAGE_PROPERTY, "unknown");
new LanguageDetection(settings.asConfig(), languages);
}

@Test
public void fail_if_conflicting_language_suffix() throws Exception {
LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("xml", "xhtml"), new MockLanguage("web", "xhtml")));

+ 0
- 2
sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/multi-language-definitions-all-in-root/sonar-project.properties View File

@@ -4,10 +4,8 @@ sonar.projectVersion=1.0

sonar.modules=java-module,groovy-module

java-module.sonar.language=java
java-module.sonar.projectBaseDir=.
java-module.sonar.sources=src/main/java

groovy-module.sonar.language=groovy
groovy-module.sonar.projectBaseDir=.
groovy-module.sonar.sources=src/main/groovy

+ 0
- 2
sonar-scanner-engine/test-resources/mediumtest/xoo/multi-modules-sample/sonar-project.properties View File

@@ -3,8 +3,6 @@ sonar.projectKey=com.sonarsource.it.samples:multi-modules-sample
sonar.projectName=Sonar :: Integration Tests :: Multi-modules Sample
sonar.projectVersion=1.0-SNAPSHOT

sonar.language=xoo
# Some properties that will be inherited by the modules
sonar.sources=src/main/xoo

+ 0
- 1
sonar-scanner-engine/test-resources/mediumtest/xoo/sample-generic-coverage/sonar-project.properties View File

@@ -1,3 +1,2 @@
sonar.projectKey=sample-generic-coverage
sonar.sources=xources
sonar.language=xoo

+ 0
- 1
sonar-scanner-engine/test-resources/mediumtest/xoo/sample-generic-test-exec/sonar-project.properties View File

@@ -3,4 +3,3 @@ sonar.projectName=Sample
sonar.projectVersion=0.1-SNAPSHOT
sonar.sources=xources
sonar.tests=testx
sonar.language=xoo

+ 0
- 1
sonar-scanner-engine/test-resources/mediumtest/xoo/sample-with-empty-file/sonar-project.properties View File

@@ -2,4 +2,3 @@ sonar.projectKey=sample-with-empty-file
sonar.projectName=Sample With Empty
sonar.projectVersion=0.1-SNAPSHOT
sonar.sources=xources
sonar.language=xoo

+ 0
- 1
sonar-scanner-engine/test-resources/mediumtest/xoo/sample-with-ignored-file/sonar-project.properties View File

@@ -3,5 +3,4 @@ sonar.projectName=Sample
sonar.projectVersion=0.1-SNAPSHOT
sonar.sources=xources
sonar.tests=testx
sonar.language=xoo
sonar.scm.provider=xoo

+ 0
- 1
sonar-scanner-engine/test-resources/mediumtest/xoo/sample-with-symlink/sonar-project.properties View File

@@ -3,4 +3,3 @@ sonar.projectName=Sample
sonar.projectVersion=0.1-SNAPSHOT
sonar.sources=xources
sonar.tests=testx
sonar.language=xoo

+ 0
- 1
sonar-scanner-engine/test-resources/mediumtest/xoo/sample/sonar-project.properties View File

@@ -3,4 +3,3 @@ sonar.projectName=Sample
sonar.projectVersion=0.1-SNAPSHOT
sonar.sources=xources
sonar.tests=testx
sonar.language=xoo

Loading…
Cancel
Save