aboutsummaryrefslogtreecommitdiffstats
path: root/pf4j/src/main/java
diff options
context:
space:
mode:
authorDecebal Suiu <decebal.suiu@gmail.com>2024-11-29 00:10:55 +0200
committerDecebal Suiu <decebal.suiu@gmail.com>2024-11-29 00:37:09 +0200
commitfb43bbfbcd38139ecdc3d07cb1fc744b510c8abc (patch)
tree950929801027b60228a42bf80fa6421052a220a7 /pf4j/src/main/java
parent3ff696d1a9b529348e186fe187a015c8075545e3 (diff)
downloadpf4j-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.java16
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;
}
}