]> source.dussan.org Git - pf4j.git/commitdiff
Resolve #296
authorDecebal Suiu <decebal.suiu@gmail.com>
Thu, 2 May 2019 11:11:30 +0000 (14:11 +0300)
committerDecebal Suiu <decebal.suiu@gmail.com>
Thu, 2 May 2019 11:11:30 +0000 (14:11 +0300)
demo/app/src/main/java/org/pf4j/demo/Boot.java
pf4j/src/main/java/org/pf4j/AbstractPluginManager.java
pf4j/src/main/java/org/pf4j/PluginManager.java

index 562f8f88f359a3da9d8904024b7be70426964fe0..066a2074c711ebfe003d91648830aa9cc8367b09 100644 (file)
@@ -73,8 +73,8 @@ public class Boot {
         }
 
         System.out.println("Extension classes by classpath:");
-        List<Class<Greeting>> greetingsClasses = pluginManager.getExtensionClasses(Greeting.class);
-        for (Class<Greeting> greeting : greetingsClasses) {
+        List<Class<? extends Greeting>> greetingsClasses = pluginManager.getExtensionClasses(Greeting.class);
+        for (Class<? extends Greeting> greeting : greetingsClasses) {
             System.out.println("   Class: " + greeting.getCanonicalName());
         }
 
index a7333ca10dabaa82223f86bd968ee6bcfec72e1d..478149dc2ad35251eba2ad0abe5bea9d49876b80 100644 (file)
@@ -525,60 +525,25 @@ public abstract class AbstractPluginManager implements PluginManager {
         return extensionClasses;
     }
 
-    @SuppressWarnings("unchecked")
-    @Override
-    public <T> List<Class<T>> getExtensionClasses(Class<T> type) {
-        List<ExtensionWrapper<T>> extensionsWrapper = extensionFinder.find(type);
-        List<Class<T>> extensionClasses = new ArrayList<>(extensionsWrapper.size());
-        for (ExtensionWrapper<T> extensionWrapper : extensionsWrapper) {
-            Class<T> c = (Class<T>) extensionWrapper.getDescriptor().extensionClass;
-            extensionClasses.add(c);
-        }
 
-        return extensionClasses;
+    @Override
+    public <T> List<Class<? extends T>> getExtensionClasses(Class<T> type) {
+        return getExtensionClasses(extensionFinder.find(type));
     }
 
-    @SuppressWarnings("unchecked")
     @Override
-    public <T> List<Class<T>> getExtensionClasses(Class<T> type, String pluginId) {
-        List<ExtensionWrapper<T>> extensionsWrapper = extensionFinder.find(type, pluginId);
-        List<Class<T>> extensionClasses = new ArrayList<>(extensionsWrapper.size());
-        for (ExtensionWrapper<T> extensionWrapper : extensionsWrapper) {
-            Class<T> c = (Class<T>) extensionWrapper.getDescriptor().extensionClass;
-            extensionClasses.add(c);
-        }
-
-        return extensionClasses;
+    public <T> List<Class<? extends T>> getExtensionClasses(Class<T> type, String pluginId) {
+        return getExtensionClasses(extensionFinder.find(type, pluginId));
     }
 
     @Override
     public <T> List<T> getExtensions(Class<T> type) {
-        List<ExtensionWrapper<T>> extensionsWrapper = extensionFinder.find(type);
-        List<T> extensions = new ArrayList<>(extensionsWrapper.size());
-        for (ExtensionWrapper<T> extensionWrapper : extensionsWrapper) {
-            try {
-                extensions.add(extensionWrapper.getExtension());
-            } catch (PluginException e) {
-                log.error("Cannot retrieve extension", e);
-            }
-        }
-
-        return extensions;
+        return getExtensions(extensionFinder.find(type));
     }
 
     @Override
     public <T> List<T> getExtensions(Class<T> type, String pluginId) {
-        List<ExtensionWrapper<T>> extensionsWrapper = extensionFinder.find(type, pluginId);
-        List<T> extensions = new ArrayList<>(extensionsWrapper.size());
-        for (ExtensionWrapper<T> extensionWrapper : extensionsWrapper) {
-            try {
-                extensions.add(extensionWrapper.getExtension());
-            } catch (PluginException e) {
-                log.error("Cannot retrieve extension", e);
-            }
-        }
-
-        return extensions;
+        return getExtensions(extensionFinder.find(type, pluginId));
     }
 
     @Override
@@ -943,4 +908,28 @@ public abstract class AbstractPluginManager implements PluginManager {
         return pluginDescriptor.getPluginId() + "@" + pluginDescriptor.getVersion();
     }
 
+    @SuppressWarnings("unchecked")
+    private <T> List<Class<? extends T>> getExtensionClasses(List<ExtensionWrapper<T>> extensionsWrapper) {
+        List<Class<? extends T>> extensionClasses = new ArrayList<>(extensionsWrapper.size());
+        for (ExtensionWrapper<T> extensionWrapper : extensionsWrapper) {
+            Class<T> c = (Class<T>) extensionWrapper.getDescriptor().extensionClass;
+            extensionClasses.add(c);
+        }
+
+        return extensionClasses;
+    }
+
+    private <T> List<T> getExtensions(List<ExtensionWrapper<T>> extensionsWrapper) {
+        List<T> extensions = new ArrayList<>(extensionsWrapper.size());
+        for (ExtensionWrapper<T> extensionWrapper : extensionsWrapper) {
+            try {
+                extensions.add(extensionWrapper.getExtension());
+            } catch (PluginException e) {
+                log.error("Cannot retrieve extension", e);
+            }
+        }
+
+        return extensions;
+    }
+
 }
index a283738eb75af8a46d0d18f3f4a6eafb44723ad8..badba287c993aba1775edf5b6191d29dba07aed3 100644 (file)
@@ -135,9 +135,9 @@ public interface PluginManager {
 
     List<Class<?>> getExtensionClasses(String pluginId);
 
-    <T> List<Class<T>> getExtensionClasses(Class<T> type);
+    <T> List<Class<? extends T>> getExtensionClasses(Class<T> type);
 
-    <T> List<Class<T>> getExtensionClasses(Class<T> type, String pluginId);
+    <T> List<Class<? extends T>> getExtensionClasses(Class<T> type, String pluginId);
 
     <T> List<T> getExtensions(Class<T> type);