forked from phoedos/pmd
Merge branch 'language-sorting' into pmd/5.5.x
This commit is contained in:
@@ -6,6 +6,8 @@ package net.sourceforge.pmd.lang;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -21,19 +23,34 @@ public final class LanguageRegistry {
|
||||
private Map<String, Language> languages;
|
||||
|
||||
private LanguageRegistry() {
|
||||
languages = new LinkedHashMap<>();
|
||||
List<Language> languagesList = new ArrayList<>();
|
||||
ServiceLoader<Language> languageLoader = ServiceLoader.load(Language.class);
|
||||
Iterator<Language> iterator = languageLoader.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
try {
|
||||
Language language = iterator.next();
|
||||
languages.put(language.getName(), language);
|
||||
languagesList.add(language);
|
||||
} catch (UnsupportedClassVersionError e) {
|
||||
// Some languages require java8 and are therefore only available
|
||||
// if java8 or later is used as runtime.
|
||||
System.err.println("Ignoring language for PMD: " + e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
// sort languages by terse name. Avoiding differences in the order of languages
|
||||
// across JVM versions / OS.
|
||||
Collections.sort(languagesList, new Comparator<Language>() {
|
||||
@Override
|
||||
public int compare(Language o1, Language o2) {
|
||||
return o1.getTerseName().compareToIgnoreCase(o2.getTerseName());
|
||||
}
|
||||
});
|
||||
|
||||
// using a linked hash map to maintain insertion order
|
||||
languages = new LinkedHashMap<>();
|
||||
for (Language language : languagesList) {
|
||||
languages.put(language.getName(), language);
|
||||
}
|
||||
}
|
||||
|
||||
public static LanguageRegistry getInstance() {
|
||||
|
@@ -71,7 +71,7 @@ public class BinaryDistributionIT {
|
||||
PMDExecutionResult result;
|
||||
|
||||
result = PMDExecutor.runPMD(tempDir, "-h");
|
||||
result.assertPMDExecutionResult(1, "apex, java, ecmascript, jsp, plsql, vm, xml, xsl, wsdl, pom");
|
||||
result.assertPMDExecutionResult(1, "apex, ecmascript, java, jsp, plsql, pom, vm, wsdl, xml, xsl");
|
||||
|
||||
result = PMDExecutor.runPMDRules(tempDir, srcDir, "java-basic");
|
||||
result.assertPMDExecutionResult(4, "JumbledIncrementer.java:8:");
|
||||
|
Reference in New Issue
Block a user