Duplicate plugin ID fix.

keep-around/d31701866686f66088b78de2e29736ae36e55a68
Pingex aka Raphaël 9 years ago
parent f33b8e1249
commit 72d4a3b54e

@ -10,6 +10,7 @@ import java.net.URLClassLoader;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -101,7 +102,7 @@ public class PluginLoader
int counter = 0; int counter = 0;
for(String item : pluginsToLoad) for(String item : pluginsToLoad)
{ {
LOGGER.debug("Attempting to load {}.", item); LOGGER.debug("Attempting to preload {}.", item);
Class<?> clazz; Class<?> clazz;
try try
@ -117,10 +118,14 @@ public class PluginLoader
// Class doesn't implement IPlugin, or doesn't have @Plugin annotation. // Class doesn't implement IPlugin, or doesn't have @Plugin annotation.
if(!clazz.isAnnotationPresent(Plugin.class) || !IPlugin.class.isAssignableFrom(clazz)) if(!clazz.isAnnotationPresent(Plugin.class) || !IPlugin.class.isAssignableFrom(clazz))
{ {
LOGGER.debug("Class does not implement IPlugin or doesn't gave @Plugin annotation."); LOGGER.debug("Class does not implement IPlugin or doesn't have @Plugin annotation.");
continue; continue;
} }
if(plugins.containsKey(clazz.getAnnotation(Plugin.class).id()))
LOGGER.warn("Found duplicate plugin with id {}. Newly found plugin won't be preloaded.", clazz.getAnnotation(Plugin.class).id());
else
{
try try
{ {
plugins.put(clazz.getAnnotation(Plugin.class).id(), new PluginWrapper(clazz.asSubclass(IPlugin.class), classLoader)); plugins.put(clazz.getAnnotation(Plugin.class).id(), new PluginWrapper(clazz.asSubclass(IPlugin.class), classLoader));
@ -132,8 +137,9 @@ public class PluginLoader
LOGGER.warn("Plugin " + clazz.getAnnotation(Plugin.class).id() + " failed to preload.", e); LOGGER.warn("Plugin " + clazz.getAnnotation(Plugin.class).id() + " failed to preload.", e);
} }
} }
}
LOGGER.debug("Loaded up {} plugins from {}.", counter, target.getFileName()); LOGGER.debug("Preloaded {} plugins from {}.", counter, target.getFileName());
return counter; return counter;
} }
@ -286,4 +292,12 @@ public class PluginLoader
LOGGER.info("Unloaded plugin {}.", id); LOGGER.info("Unloaded plugin {}.", id);
plugin.setState(PluginState.UNLOADED); plugin.setState(PluginState.UNLOADED);
} }
/**
* Get all plugins and their state.
*/
public Map<String, PluginWrapper> getPlugins()
{
return Collections.unmodifiableMap(plugins);
}
} }