From 8c7f19bdfe4d4fcd37fd7149539ba9746824ac43 Mon Sep 17 00:00:00 2001 From: Andreas Schmid Date: Mon, 22 Apr 2019 16:21:13 +0200 Subject: [PATCH] Use current classloader instead of Thread's classloader This fixes #1788 by using the current's classloader instead of the current Thread's ones. This is required if executing CPD in a separate worker. Also adjusts the release notes. --- docs/pages/release_notes.md | 2 ++ .../src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 39b90fd7b6..6417af5052 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -49,6 +49,8 @@ Being based on a proper Antlr grammar, CPD can: * [#1782](https://github.com/pmd/pmd/issues/1782): \[java] NoPackage: False Negative for enums * java-design * [#1760](https://github.com/pmd/pmd/issues/1760): \[java] UseObjectForClearerAPI flags private methods +* cpd-core + * [#1788](https://github.com/pmd/pmd/issues/1788): \[cpd] \[core] Use better `ClassLoader` for `ServiceLoader` in `LanguageFactory` ### API Changes diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java index 336a49a00c..a032ae7663 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/LanguageFactory.java @@ -33,7 +33,8 @@ public final class LanguageFactory { private LanguageFactory() { List languagesList = new ArrayList<>(); - ServiceLoader languageLoader = ServiceLoader.load(Language.class); + // Use current class' classloader instead of the threads context classloader, see https://github.com/pmd/pmd/issues/1788 + ServiceLoader languageLoader = ServiceLoader.load(Language.class, getClass().getClassLoader()); Iterator iterator = languageLoader.iterator(); while (iterator.hasNext()) { try {