]> source.dussan.org Git - sonarqube.git/commitdiff
Remove support of <UNSET> file extensions (postponed)
authorSimon Brandhof <simon.brandhof@gmail.com>
Mon, 14 Oct 2013 12:25:10 +0000 (14:25 +0200)
committerSimon Brandhof <simon.brandhof@gmail.com>
Mon, 14 Oct 2013 12:25:18 +0000 (14:25 +0200)
sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java
sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java

index 6357ee744eabc4edf07c793d5e8b5e97b415aaa3..fa8d7bbcf726fd5a7bf35abef8db889cc106bbf4 100644 (file)
@@ -39,8 +39,6 @@ import java.util.Set;
  */
 public class LanguageRecognizer implements BatchComponent, Startable {
 
-  static final String NO_EXTENSION = "<UNSET>";
-
   private final Project project;
   private final Language[] languages;
 
@@ -49,6 +47,13 @@ public class LanguageRecognizer implements BatchComponent, Startable {
    */
   private SetMultimap<String, String> langsByExtension = HashMultimap.create();
 
+  /**
+   * Some plugins, like web and cobol, can analyze all the source files, whatever
+   * their file extension. This behavior is kept for backward-compatibility,
+   * but it should be fixed with future multi-language support.
+   */
+  private boolean ignoreFileExtension = false;
+
   public LanguageRecognizer(Project project, Language[] languages) {
     this.project = project;
     this.languages = languages;
@@ -57,8 +62,8 @@ public class LanguageRecognizer implements BatchComponent, Startable {
   @Override
   public void start() {
     for (Language language : languages) {
-      if (language.getFileSuffixes().length == 0) {
-        langsByExtension.put(NO_EXTENSION, language.getKey());
+      if (language.getFileSuffixes().length == 0 && language.getKey().equals(project.getLanguageKey())) {
+        ignoreFileExtension = true;
 
       } else {
         for (String suffix : language.getFileSuffixes()) {
@@ -90,9 +95,11 @@ public class LanguageRecognizer implements BatchComponent, Startable {
 
   @CheckForNull
   String of(File file) {
+    if (ignoreFileExtension) {
+      return project.getLanguageKey();
+    }
     // multi-language is not supported yet. Filter on project language
     String extension = sanitizeExtension(FilenameUtils.getExtension(file.getName()));
-    extension = StringUtils.defaultIfBlank(extension, NO_EXTENSION);
     Set<String> langs = langsByExtension.get(extension);
     return langs.contains(project.getLanguageKey()) ? project.getLanguageKey() : null;
   }
index b329f3bfbb62c96bafce182c0fadc0ebd9a433f3..9c9887f2b379835a2d95acf45f3c6ae74e2f4c8c 100644 (file)
@@ -91,20 +91,24 @@ public class LanguageRecognizerTest {
 
   @Test
   public void language_with_no_extension() throws Exception {
-    // abap here is associated to files without extension
+    // abap does not declare any file extensions.
+    // When analyzing an ABAP project, then all source files must be parsed.
     Language[] languages = new Language[]{new MockLanguage("java", "java"), new MockLanguage("abap")};
 
-    // files without extension are detected only on abap projects
+    // No side-effect on non-ABAP projects
     LanguageRecognizer recognizer = new LanguageRecognizer(newProject("java"), languages);
     recognizer.start();
     assertThat(recognizer.of(temp.newFile("abc"))).isNull();
+    assertThat(recognizer.of(temp.newFile("abc.abap"))).isNull();
+    assertThat(recognizer.of(temp.newFile("abc.java"))).isEqualTo("java");
     recognizer.stop();
 
     recognizer = new LanguageRecognizer(newProject("abap"), languages);
     recognizer.start();
     assertThat(recognizer.of(temp.newFile("abc"))).isEqualTo("abap");
+    assertThat(recognizer.of(temp.newFile("abc.txt"))).isEqualTo("abap");
+    assertThat(recognizer.of(temp.newFile("abc.java"))).isEqualTo("abap");
     recognizer.stop();
-
   }
 
   private Project newProject(String language) {