]> source.dussan.org Git - pf4j.git/commitdiff
Allow inspection of disabled plugins by not stopping resource loading 10/head
authorJames Moger <james.moger@gitblit.com>
Thu, 10 Apr 2014 01:34:02 +0000 (21:34 -0400)
committerJames Moger <james.moger@gitblit.com>
Thu, 10 Apr 2014 02:02:33 +0000 (22:02 -0400)
The differences between a DISABLED plugin and a STARTED plugin are:

1. a STARTED plugin has executed Plugin.start(), a DISABLED plugin has not
2. a STARTED plugin may contribute extension instances, a DISABLED plugin may not

DISABLED plugins still have valid classloaders and their classes can be manually
loaded and explored, but the resource loading - which is important for inspection
has been handicapped by the DISABLED check.

Instead of preventing loading the extension indexes for DISABLED plugins, the
extension finder should only return ExtensionWrappers for STARTED plugins.

pf4j/src/main/java/ro/fortsoft/pf4j/DefaultExtensionFinder.java
pf4j/src/main/java/ro/fortsoft/pf4j/PluginClassLoader.java

index 295d5c8ec3a52c4146c259fca3256953e348c468..5da04b6d037fb0cd96c2b02916f313de1ac36087 100644 (file)
@@ -56,6 +56,12 @@ public class DefaultExtensionFinder implements ExtensionFinder, PluginStateListe
         List<ExtensionWrapper<T>> result = new ArrayList<ExtensionWrapper<T>>();
         for (Map.Entry<String, Set<String>> entry : entries.entrySet()) {
             String pluginId = entry.getKey();
+
+            PluginWrapper pluginWrapper = pluginManager.getPlugin(pluginId);
+            if (PluginState.STARTED != pluginWrapper.getPluginState()) {
+               continue;
+            }
+
             Set<String> extensionClassNames = entry.getValue();
 
             for (String className : extensionClassNames) {
@@ -92,10 +98,12 @@ public class DefaultExtensionFinder implements ExtensionFinder, PluginStateListe
 
     @Override
     public Set<String> findClassNames(String pluginId) {
+       readIndexFiles();
         return entries.get(pluginId);
     }
 
-    public void pluginStateChanged(PluginStateEvent event) {
+    @Override
+       public void pluginStateChanged(PluginStateEvent event) {
         // TODO optimize (do only for some transitions)
         // clear cache
         entries = null;
@@ -134,8 +142,8 @@ public class DefaultExtensionFinder implements ExtensionFinder, PluginStateListe
 
         entries = new HashMap<String, Set<String>>();
 
-        List<PluginWrapper> startedPlugins = pluginManager.getStartedPlugins();
-        for (PluginWrapper plugin : startedPlugins) {
+        List<PluginWrapper> plugins = pluginManager.getPlugins();
+        for (PluginWrapper plugin : plugins) {
             String pluginId = plugin.getDescriptor().getPluginId();
             log.debug("Reading extensions index file for plugin '{}'", pluginId);
             Set<String> entriesPerPlugin = new HashSet<String>();
@@ -164,7 +172,7 @@ public class DefaultExtensionFinder implements ExtensionFinder, PluginStateListe
         return entries;
     }
 
-    private boolean isExtensionPoint(Class type) {
+    private boolean isExtensionPoint(Class<?> type) {
         return ExtensionPoint.class.isAssignableFrom(type);
     }
 
index 3fd7572daabdf26bffc2fe0d1431cfcef6647169..4b3f137c4f0d95f3090b0621a6b3c8d162e4d174 100644 (file)
  */
 package ro.fortsoft.pf4j;
 
-import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.util.Collections;
-import java.util.Enumeration;
 import java.util.List;
 
 /**
@@ -93,27 +90,4 @@ public class PluginClassLoader extends URLClassLoader {
         // use the standard URLClassLoader (which follows normal parent delegation)
         return super.loadClass(className);
     }
-
-    @Override
-    public URL getResource(String name) {
-        if (PluginState.DISABLED == getPlugin().getPluginState()) {
-            return null;
-        }
-
-        return super.getResource(name);
-    }
-
-    @Override
-    public Enumeration<URL> getResources(String name) throws IOException {
-        if (PluginState.DISABLED == getPlugin().getPluginState()) {
-            return Collections.emptyEnumeration();
-        }
-
-        return super.getResources(name);
-    }
-
-    private PluginWrapper getPlugin() {
-        return pluginManager.getPlugin(pluginDescriptor.getPluginId());
-    }
-
 }