forked from phoedos/pmd
[core] Backporting fixes from pmd7
LanguageFactory and LanguageRegistry are more robust in case a single language can't be loaded.
This commit is contained in:
@@ -37,14 +37,21 @@ public final class LanguageFactory {
|
||||
// Use current class' classloader instead of the threads context classloader, see https://github.com/pmd/pmd/issues/1788
|
||||
ServiceLoader<Language> languageLoader = ServiceLoader.load(Language.class, getClass().getClassLoader());
|
||||
Iterator<Language> iterator = languageLoader.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
|
||||
while (true) {
|
||||
// this loop is weird, but both hasNext and next may throw ServiceConfigurationError,
|
||||
// it's more robust that way
|
||||
try {
|
||||
Language language = iterator.next();
|
||||
languagesList.add(language);
|
||||
} catch (ServiceConfigurationError | UnsupportedClassVersionError e) {
|
||||
if (iterator.hasNext()) {
|
||||
Language language = iterator.next();
|
||||
languagesList.add(language);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} catch (UnsupportedClassVersionError | ServiceConfigurationError e) {
|
||||
// Some languages require java8 and are therefore only available
|
||||
// if java8 or later is used as runtime.
|
||||
System.err.println("Ignoring language for CPD: " + e.toString());
|
||||
System.err.println("Ignoring language for PMD: " + e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -31,11 +31,18 @@ public final class LanguageRegistry {
|
||||
// Use current class' classloader instead of the threads context classloader, see https://github.com/pmd/pmd/issues/1377
|
||||
ServiceLoader<Language> languageLoader = ServiceLoader.load(Language.class, getClass().getClassLoader());
|
||||
Iterator<Language> iterator = languageLoader.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
|
||||
while (true) {
|
||||
// this loop is weird, but both hasNext and next may throw ServiceConfigurationError,
|
||||
// it's more robust that way
|
||||
try {
|
||||
Language language = iterator.next();
|
||||
languagesList.add(language);
|
||||
} catch (ServiceConfigurationError | UnsupportedClassVersionError e) {
|
||||
if (iterator.hasNext()) {
|
||||
Language language = iterator.next();
|
||||
languagesList.add(language);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} catch (UnsupportedClassVersionError | ServiceConfigurationError 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());
|
||||
|
Reference in New Issue
Block a user