From 7f78b3747c463c28d183f7f089d55fbec9c07541 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Fri, 24 Jan 2014 17:47:33 +0100 Subject: [PATCH] SONAR-926 No more consider sonar.profile in a multi-language project --- .../org/sonar/batch/DefaultProfileLoader.java | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/sonar-batch/src/main/java/org/sonar/batch/DefaultProfileLoader.java b/sonar-batch/src/main/java/org/sonar/batch/DefaultProfileLoader.java index e0a29347fe6..336ce5c582c 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/DefaultProfileLoader.java +++ b/sonar-batch/src/main/java/org/sonar/batch/DefaultProfileLoader.java @@ -52,14 +52,19 @@ public class DefaultProfileLoader implements ProfileLoader { public RulesProfile load(Project module, Settings settings) { Map profilesPerLanguageKey = new HashMap(); - // TODO For now we have to load profile of all languages even if module will only use part of them because ModuleLanguages may not be - // initialized yet + if (!moduleLanguages.getModuleLanguageKeys().isEmpty()) { + return loadSingleProfile(settings); + } + + return loadProfileWrapper(settings, profilesPerLanguageKey); + } + + private RulesProfile loadProfileWrapper(Settings settings, Map profilesPerLanguageKey) { + // We have to load profile of all languages even if module will only use part of them because language detection was not done for (Language language : languages.all()) { String languageKey = language.getKey(); - String profileName = StringUtils.defaultIfBlank( - settings.getString("sonar.profile"), - settings.getString("sonar.profile." + languageKey)); + String profileName = settings.getString("sonar.profile." + languageKey); RulesProfile profile = dao.getProfile(languageKey, profileName); if (profile == null) { @@ -76,6 +81,22 @@ public class DefaultProfileLoader implements ProfileLoader { return profile; } + private RulesProfile loadSingleProfile(Settings settings) { + // Single language is forced, load a single quality profile + String languageKey = moduleLanguages.getModuleLanguageKeys().iterator().next(); + + String profileName = StringUtils.defaultIfBlank( + settings.getString("sonar.profile"), + settings.getString("sonar.profile." + languageKey)); + + RulesProfile profile = dao.getProfile(languageKey, profileName); + if (profile == null) { + throw new SonarException("Quality profile not found : " + profileName + ", language " + languageKey); + } + LOG.info("Quality profile for {}: {}", languageKey, profile); + return hibernateHack(profile); + } + private RulesProfile hibernateHack(RulesProfile profile) { // hack to lazy initialize the profile collections profile.getActiveRules().size(); -- 2.39.5