diff options
author | Decebal Suiu <decebal.suiu@gmail.com> | 2024-11-29 00:10:55 +0200 |
---|---|---|
committer | Decebal Suiu <decebal.suiu@gmail.com> | 2024-11-29 00:37:09 +0200 |
commit | fb43bbfbcd38139ecdc3d07cb1fc744b510c8abc (patch) | |
tree | 950929801027b60228a42bf80fa6421052a220a7 /pf4j/src/main/java | |
parent | 3ff696d1a9b529348e186fe187a015c8075545e3 (diff) | |
download | pf4j-fb43bbfbcd38139ecdc3d07cb1fc744b510c8abc.tar.gz pf4j-fb43bbfbcd38139ecdc3d07cb1fc744b510c8abc.zip |
Add test for AbstractExtensionFinder#checkDifferentClassLoaders
Diffstat (limited to 'pf4j/src/main/java')
-rw-r--r-- | pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java b/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java index caa415f..a20f8a8 100644 --- a/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java +++ b/pf4j/src/main/java/org/pf4j/AbstractExtensionFinder.java @@ -146,7 +146,9 @@ public abstract class AbstractExtensionFinder implements ExtensionFinder, Plugin log.debug("Added extension '{}' with ordinal {}", className, extensionWrapper.getOrdinal()); } else { log.trace("'{}' is not an extension for extension point '{}'", className, type.getName()); - checkDifferentClassLoaders(type, extensionClass); + if (checkDifferentClassLoaders(type, extensionClass)) { + log.error("Different class loaders: '{}' (E) and '{}' (EP)", extensionClass.getClassLoader(), type.getClassLoader()); + } } } catch (ClassNotFoundException | NoClassDefFoundError e) { log.error(e.getMessage(), e); @@ -374,17 +376,13 @@ public abstract class AbstractExtensionFinder implements ExtensionFinder, Plugin return null; } - private void checkDifferentClassLoaders(Class<?> type, Class<?> extensionClass) { + boolean checkDifferentClassLoaders(Class<?> type, Class<?> extensionClass) { ClassLoader typeClassLoader = type.getClassLoader(); // class loader of extension point ClassLoader extensionClassLoader = extensionClass.getClassLoader(); boolean match = ClassUtils.getAllInterfacesNames(extensionClass).contains(type.getSimpleName()); - if (!match) { - log.error("Extension '{}' does not implement extension point '{}'", extensionClass, type); - } else if (!extensionClassLoader.equals(typeClassLoader)) { - // in this scenario the method 'isAssignableFrom' returns only FALSE - // see http://www.coderanch.com/t/557846/java/java/FWIW-FYI-isAssignableFrom-isInstance-differing - log.error("Different class loaders: '{}' (E) and '{}' (EP)", extensionClassLoader, typeClassLoader); - } + // in this scenario the method 'isAssignableFrom' returns only FALSE + // see http://www.coderanch.com/t/557846/java/java/FWIW-FYI-isAssignableFrom-isInstance-differing + return match && extensionClassLoader != typeClassLoader; } } |