pluginStateListeners = new ArrayList<>();
+ dependencyResolver = new DependencyResolver();
+
log.info("PF4J version {} in '{}' mode", getVersion(), getRuntimeMode());
pluginClasspath = createPluginClasspath();
}
private void resolveDependencies() throws PluginException {
- dependencyResolver = new DependencyResolver(unresolvedPlugins);
+ dependencyResolver.resolve(unresolvedPlugins);
resolvedPlugins = dependencyResolver.getSortedPlugins();
for (PluginWrapper pluginWrapper : resolvedPlugins) {
unresolvedPlugins.remove(pluginWrapper);
*/
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
*/
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);
}
* 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();