From e6c502f4a6b9ccebbfd332aa337e4c8863ae7e49 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Mon, 14 Oct 2013 14:25:10 +0200 Subject: [PATCH] Remove support of file extensions (postponed) --- .../scan/filesystem/LanguageRecognizer.java | 17 ++++++++++++----- .../scan/filesystem/LanguageRecognizerTest.java | 10 +++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java index 6357ee744ea..fa8d7bbcf72 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/LanguageRecognizer.java @@ -39,8 +39,6 @@ import java.util.Set; */ public class LanguageRecognizer implements BatchComponent, Startable { - static final String NO_EXTENSION = ""; - private final Project project; private final Language[] languages; @@ -49,6 +47,13 @@ public class LanguageRecognizer implements BatchComponent, Startable { */ private SetMultimap 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 langs = langsByExtension.get(extension); return langs.contains(project.getLanguageKey()) ? project.getLanguageKey() : null; } diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java index b329f3bfbb6..9c9887f2b37 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/LanguageRecognizerTest.java @@ -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) { -- 2.39.5