diff options
author | Decebal Suiu <decebal.suiu@gmail.com> | 2016-05-11 23:18:19 +0300 |
---|---|---|
committer | Decebal Suiu <decebal.suiu@gmail.com> | 2016-05-11 23:18:19 +0300 |
commit | fbf096655cba81f8980ddbe31d8b3d56c90b06b1 (patch) | |
tree | 0cea646da8286b88d68639bac2e196cdb2f42e89 | |
parent | 272e8f55c1f750c6618f1853f885920cd1d5bca3 (diff) | |
download | pf4j-fbf096655cba81f8980ddbe31d8b3d56c90b06b1.tar.gz pf4j-fbf096655cba81f8980ddbe31d8b3d56c90b06b1.zip |
Fix #99
-rw-r--r-- | pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java | 4 | ||||
-rw-r--r-- | pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java | 25 |
2 files changed, 23 insertions, 6 deletions
diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java b/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java index bdedc88..af85f1f 100644 --- a/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java +++ b/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java @@ -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); diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java b/pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java index 176245e..e281495 100644 --- a/pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java +++ b/pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java @@ -15,14 +15,14 @@ */ 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(); |