]> source.dussan.org Git - pf4j.git/commitdiff
Fix #99
authorDecebal Suiu <decebal.suiu@gmail.com>
Wed, 11 May 2016 20:18:19 +0000 (23:18 +0300)
committerDecebal Suiu <decebal.suiu@gmail.com>
Wed, 11 May 2016 20:18:19 +0000 (23:18 +0300)
pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java
pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java

index bdedc88bebe5d91d055ef623c04fce0dee8aa509..af85f1fb97058ba0f5ec05d793712c301f46f81b 100644 (file)
@@ -746,6 +746,8 @@ public class DefaultPluginManager implements PluginManager {
 
         pluginStateListeners = new ArrayList<>();
 
+        dependencyResolver = new DependencyResolver();
+
         log.info("PF4J version {} in '{}' mode", getVersion(), getRuntimeMode());
 
         pluginClasspath = createPluginClasspath();
@@ -853,7 +855,7 @@ public class DefaultPluginManager implements PluginManager {
        }
 
        private void resolveDependencies() throws PluginException {
-               dependencyResolver = new DependencyResolver(unresolvedPlugins);
+               dependencyResolver.resolve(unresolvedPlugins);
                resolvedPlugins = dependencyResolver.getSortedPlugins();
         for (PluginWrapper pluginWrapper : resolvedPlugins) {
                unresolvedPlugins.remove(pluginWrapper);
index 176245ef276eca138836d833502ba211c6162c28..e2814957610e0723f3e7859ee9bda1a962cbe59a 100644 (file)
  */
 package ro.fortsoft.pf4j;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import ro.fortsoft.pf4j.util.DirectedGraph;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 /**
  * @author Decebal Suiu
  */
@@ -33,18 +33,29 @@ public class DependencyResolver {
     private List<PluginWrapper> plugins;
     private DirectedGraph<String> dependenciesGraph;
     private DirectedGraph<String> dependentsGraph;
+    private boolean resolved;
 
-       public DependencyResolver(List<PluginWrapper> plugins) {
+       public void resolve(List<PluginWrapper> plugins) {
                this.plugins = plugins;
 
         initGraph();
+
+        resolved = true;
        }
 
     public List<String> getDependecies(String pluginsId) {
+        if (!resolved) {
+            return Collections.emptyList();
+        }
+
         return dependenciesGraph.getNeighbors(pluginsId);
     }
 
     public List<String> getDependents(String pluginsId) {
+        if (!resolved) {
+            return Collections.emptyList();
+        }
+
         return dependentsGraph.getNeighbors(pluginsId);
     }
 
@@ -52,6 +63,10 @@ public class DependencyResolver {
         * Get the list of plugins in dependency sorted order.
         */
        public List<PluginWrapper> getSortedPlugins() throws PluginException {
+        if (!resolved) {
+            return Collections.emptyList();
+        }
+
                log.debug("Graph: {}", dependenciesGraph);
                List<String> pluginsId = dependenciesGraph.reverseTopologicalSort();