📄 plugininitializer.java
字号:
Object x[] = (Object[])(Object[])entry;
Plugin plugin = (Plugin)x[0];
cla = plugin.getClass();
id = (String)x[1];
}
try
{
Method load_method = cla.getMethod("load", new Class[] {
org/gudy/azureus2/plugins/PluginInterface
});
load_method.invoke(null, new Object[] {
getDefaultInterfaceSupport()
});
continue;
}
catch (NoSuchMethodException e)
{
continue;
}
catch (Throwable e)
{
Debug.printStackTrace(e);
Logger.log(new LogAlert(false, (new StringBuilder()).append("Load of dynamic plugin '").append(id).append("' fails").toString(), e));
i++;
}
}
return pluginLoaded;
}
private void getRootClassLoader()
{
File user_dir = FileUtil.getUserFile("shared");
getRootClassLoader(user_dir);
File app_dir = FileUtil.getApplicationFile("shared");
if (!user_dir.equals(app_dir))
getRootClassLoader(app_dir);
}
private void getRootClassLoader(File dir)
{
dir = new File(dir, "lib");
if (dir.exists() && dir.isDirectory())
{
File files[] = dir.listFiles();
if (files != null)
{
files = PluginLauncherImpl.getHighestJarVersions(files, new String[] {
null
}, new String[] {
null
}, false);
for (int i = 0; i < files.length; i++)
{
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Share class loader extended by ").append(files[i].toString()).toString()));
root_class_loader = PluginLauncherImpl.addFileToClassPath(org/gudy/azureus2/pluginsimpl/local/PluginInitializer.getClassLoader(), root_class_loader, files[i]);
}
}
}
}
private List loadPluginsFromDir(File pluginDirectory, int plugin_offset, int plugin_total, boolean bSkipAlreadyLoaded, boolean loading_for_startup, boolean initialise)
{
List dirLoadedPIs = new ArrayList();
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Plugin Directory is ").append(pluginDirectory).toString()));
if (!pluginDirectory.exists())
FileUtil.mkdirs(pluginDirectory);
if (pluginDirectory.isDirectory())
{
File pluginsDirectory[] = pluginDirectory.listFiles();
for (int i = 0; i < pluginsDirectory.length; i++)
{
if (pluginsDirectory[i].getName().equals("CVS"))
{
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Skipping plugin ").append(pluginsDirectory[i].getName()).toString()));
continue;
}
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Loading plugin ").append(pluginsDirectory[i].getName()).toString()));
if (core_operation != null)
core_operation.reportCurrentTask((new StringBuilder()).append(MessageText.getString("splash.plugin")).append(pluginsDirectory[i].getName()).toString());
try
{
List loaded_pis = loadPluginFromDir(pluginsDirectory[i], bSkipAlreadyLoaded, loading_for_startup, initialise);
loaded_pi_list.add(loaded_pis);
dirLoadedPIs.addAll(loaded_pis);
}
catch (PluginException e) { }
if (core_operation != null)
core_operation.reportPercent((100 * (i + plugin_offset)) / plugin_total);
}
}
return dirLoadedPIs;
}
private List loadPluginFromDir(File directory, boolean bSkipAlreadyLoaded, boolean loading_for_startup, boolean initialise)
throws PluginException
{
List loaded_pis;
ClassLoader plugin_class_loader;
String pluginName;
String plugin_version[];
String plugin_id[];
String plugin_class_string;
loaded_pis = new ArrayList();
plugin_class_loader = root_class_loader;
if (!directory.isDirectory())
return loaded_pis;
pluginName = directory.getName();
File pluginContents[] = directory.listFiles();
if (pluginContents == null || pluginContents.length == 0)
return loaded_pis;
boolean looks_like_plugin = false;
int i = 0;
do
{
if (i >= pluginContents.length)
break;
String name = pluginContents[i].getName().toLowerCase();
if (name.endsWith(".jar") || name.equals("plugin.properties"))
{
looks_like_plugin = true;
break;
}
i++;
} while (true);
if (!looks_like_plugin)
{
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, 1, (new StringBuilder()).append("Plugin directory '").append(directory).append("' has no plugin.properties ").append("or .jar files, skipping").toString()));
return loaded_pis;
}
plugin_version = (new String[] {
null
});
plugin_id = (new String[] {
null
});
pluginContents = PluginLauncherImpl.getHighestJarVersions(pluginContents, plugin_version, plugin_id, true);
for (int i = 0; i < pluginContents.length; i++)
{
File jar_file = pluginContents[i];
if (pluginContents.length > 1)
{
String name = jar_file.getName();
if (name.startsWith("i18nPlugin_"))
{
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("renaming '").append(name).append("' to conform with versioning system").toString()));
jar_file.renameTo(new File(jar_file.getParent(), "i18nAZ_0.1.jar "));
continue;
}
}
plugin_class_loader = PluginLauncherImpl.addFileToClassPath(root_class_loader, plugin_class_loader, jar_file);
}
plugin_class_string = null;
Properties props;
File properties_file;
props = new Properties();
properties_file = new File((new StringBuilder()).append(directory.toString()).append(File.separator).append("plugin.properties").toString());
FileInputStream fis;
if (!properties_file.exists())
break MISSING_BLOCK_LABEL_436;
fis = null;
fis = new FileInputStream(properties_file);
props.load(fis);
if (fis != null)
fis.close();
break MISSING_BLOCK_LABEL_583;
Exception exception;
exception;
if (fis != null)
fis.close();
throw exception;
if (plugin_class_loader instanceof URLClassLoader)
{
URLClassLoader current = (URLClassLoader)plugin_class_loader;
URL url = current.findResource("plugin.properties");
if (url != null)
{
URLConnection connection = url.openConnection();
java.io.InputStream is = connection.getInputStream();
props.load(is);
} else
{
throw new Exception("failed to load plugin.properties from jars");
}
} else
{
throw new Exception("failed to load plugin.properties from dir or jars");
}
break MISSING_BLOCK_LABEL_583;
Throwable e;
e;
Debug.printStackTrace(e);
String msg = (new StringBuilder()).append("Can't read 'plugin.properties' for plugin '").append(pluginName).append("': file may be missing").toString();
Logger.log(new LogAlert(false, 3, msg));
System.out.println(msg);
throw new PluginException(msg, e);
String plugin_name_string;
int pos1;
int pos2;
checkJDKVersion(pluginName, props, true);
checkAzureusVersion(pluginName, props, true);
plugin_class_string = (String)props.get("plugin.class");
if (plugin_class_string == null)
{
plugin_class_string = (String)props.get("plugin.classes");
if (plugin_class_string == null)
plugin_class_string = "";
}
plugin_name_string = (String)props.get("plugin.name");
if (plugin_name_string == null)
plugin_name_string = (String)props.get("plugin.names");
pos1 = 0;
pos2 = 0;
_L6:
int p1;
String plugin_class;
PluginInterfaceImpl existing_pi;
p1 = plugin_class_string.indexOf(";", pos1);
if (p1 == -1)
{
plugin_class = plugin_class_string.substring(pos1).trim();
} else
{
plugin_class = plugin_class_string.substring(pos1, p1).trim();
pos1 = p1 + 1;
}
existing_pi = getPluginFromClass(plugin_class);
if (existing_pi == null) goto _L2; else goto _L1
_L1:
File this_parent;
File existing_parent;
if (bSkipAlreadyLoaded)
break; /* Loop/switch isn't completed */
this_parent = directory.getParentFile();
existing_parent = null;
if (existing_pi.getInitializerKey() instanceof File)
existing_parent = ((File)existing_pi.getInitializerKey()).getParentFile();
if (!this_parent.equals(FileUtil.getApplicationFile("plugins")) || existing_parent == null || !existing_parent.equals(FileUtil.getUserFile("plugins"))) goto _L4; else goto _L3
_L3:
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Plugin '").append(plugin_name_string).append("/").append(plugin_class).append(": shared version overridden by user-specific one").toString()));
return new ArrayList();
_L4:
Logger.log(new LogAlert(false, 1, (new StringBuilder()).append("Error loading '").append(plugin_name_string).append("', plugin class '").append(plugin_class).append("' is already loaded").toString()));
continue; /* Loop/switch isn't completed */
_L2:
String plugin_name = null;
if (plugin_name_string != null)
{
int p2 = plugin_name_string.indexOf(";", pos2);
if (p2 == -1)
{
plugin_name = plugin_name_string.substring(pos2).trim();
} else
{
plugin_name = plugin_name_string.substring(pos2, p2).trim();
pos2 = p2 + 1;
}
}
Properties new_props = (Properties)props.clone();
for (int j = 0; j < default_version_details.length; j++)
{
if (!plugin_class.equals(default_version_details[j][0]))
continue;
if (new_props.get("plugin.id") == null)
new_props.put("plugin.id", default_version_details[j][1]);
if (plugin_name == null)
plugin_name = default_version_details[j][2];
if (new_props.get("plugin.version") != null)
continue;
if (plugin_version[0] != null)
new_props.put("plugin.version", plugin_version[0]);
else
new_props.put("plugin.version", default_version_details[j][3]);
}
new_props.put("plugin.class", plugin_class);
if (plugin_name != null)
new_props.put("plugin.name", plugin_name);
Throwable load_failure = null;
String pid = plugin_id[0] != null ? plugin_id[0] : directory.getName();
Plugin plugin = PluginLauncherImpl.getPreloadedPlugin(plugin_class);
if (plugin == null)
try
{
Class c = plugin_class_loader.loadClass(plugin_class);
plugin = (Plugin)c.newInstance();
}
catch (UnsupportedClassVersionError e)
{
plugin = new FailedPlugin(plugin_name, directory.getAbsolutePath());
load_failure = new UnsupportedClassVersionError(e.getMessage());
}
catch (Throwable e)
{
if (!(e instanceof ClassNotFoundException) || !props.getProperty("plugin.install_if_missing", "no").equalsIgnoreCase("yes"))
load_failure = e;
plugin = new FailedPlugin(plugin_name, directory.getAbsolutePath());
}
else
plugin_class_loader = plugin.getClass().getClassLoader();
MessageText.integratePluginMessages((String)props.get("plugin.langfile"), plugin_class_loader);
PluginInterfaceImpl plugin_interface = new PluginInterfaceImpl(plugin, this, directory, plugin_class_loader, directory.getName(), new_props, directory.getAbsolutePath(), pid, plugin_version[0]);
boolean bEnabled = loading_for_startup ? plugin_interface.getPluginState().isLoadedAtStartup() : initialise;
plugin_interface.getPluginState().setDisabled(!bEnabled);
try
{
Method load_method = plugin.getClass().getMethod("load", new Class[] {
org/gudy/azureus2/plugins/PluginInterface
});
load_method.invoke(plugin, new Object[] {
plugin_interface
});
}
catch (NoSuchMethodException e) { }
catch (Throwable e)
{
load_failure = e;
}
loaded_pis.add(plugin_interface);
if (load_failure != null)
{
plugin_interface.setAsFailed();
if (!pid.equals(UpdaterUpdateChecker.getPluginID()))
{
String msg = (new StringBuilder()).append("Error loading plugin '").append(pluginName).append("' / '").append(plugin_class_string).append("'").toString();
LogAlert la;
if (load_failure instanceof UnsupportedClassVersionError)
la = new LogAlert(false, 3, (new StringBuilder()).append(msg).append(". ").append(MessageText.getString("plugin.install.class_version_error")).toString());
else
la = new LogAlert(false, msg, load_failure);
Logger.log(la);
System.out.println((new StringBuilder()).append(msg).append(": ").append(load_failure).toString());
}
}
if (p1 != -1) goto _L6; else goto _L5
_L5:
return loaded_pis;
Throwable e;
e;
if (e instanceof PluginException)
{
throw (PluginException)e;
} else
{
Debug.printStackTrace(e);
String msg = (new StringBuilder()).append("Error loading plugin '").append(pluginName).append("' / '").append(plugin_class_string).append("'").toString();
Logger.log(new LogAlert(false, msg, e));
System.out.println((new StringBuilder()).append(msg).append(": ").append(e).toString());
throw new PluginException(msg, e);
}
}
public void initialisePlugins()
{
LinkedList initQueue;
AEThread2 secondaryInitializer;
addInitThread();
initQueue = new LinkedList();
for (int i = 0; i < loaded_pi_list.size(); i++)
{
final int idx = i;
initQueue.add(new Runnable() {
final int val$idx;
final PluginInitializer this$0;
public void run()
{
label0:
{
try
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -