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.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -21,19 +23,34 @@ public final class LanguageRegistry {
|
|||||||
private Map<String, Language> languages;
|
private Map<String, Language> languages;
|
||||||
|
|
||||||
private LanguageRegistry() {
|
private LanguageRegistry() {
|
||||||
languages = new LinkedHashMap<>();
|
List<Language> languagesList = new ArrayList<>();
|
||||||
ServiceLoader<Language> languageLoader = ServiceLoader.load(Language.class);
|
ServiceLoader<Language> languageLoader = ServiceLoader.load(Language.class);
|
||||||
Iterator<Language> iterator = languageLoader.iterator();
|
Iterator<Language> iterator = languageLoader.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
try {
|
try {
|
||||||
Language language = iterator.next();
|
Language language = iterator.next();
|
||||||
languages.put(language.getName(), language);
|
languagesList.add(language);
|
||||||
} catch (UnsupportedClassVersionError e) {
|
} catch (UnsupportedClassVersionError e) {
|
||||||
// Some languages require java8 and are therefore only available
|
// Some languages require java8 and are therefore only available
|
||||||
// if java8 or later is used as runtime.
|
// if java8 or later is used as runtime.
|
||||||
System.err.println("Ignoring language for PMD: " + e.toString());
|
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() {
|
public static LanguageRegistry getInstance() {
|
||||||
|
@@ -71,7 +71,7 @@ public class BinaryDistributionIT {
|
|||||||
PMDExecutionResult result;
|
PMDExecutionResult result;
|
||||||
|
|
||||||
result = PMDExecutor.runPMD(tempDir, "-h");
|
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 = PMDExecutor.runPMDRules(tempDir, srcDir, "java-basic");
|
||||||
result.assertPMDExecutionResult(4, "JumbledIncrementer.java:8:");
|
result.assertPMDExecutionResult(4, "JumbledIncrementer.java:8:");
|
||||||
|
Reference in New Issue
Block a user