diff options
author | Tor Norbye <tnorbye@google.com> | 2013-06-21 16:58:30 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2013-06-21 16:58:30 -0700 |
commit | c6218e46d5d2017e987ecdbd99b318a95c42abc0 (patch) | |
tree | 85106b3c757a794fb274159cebe07c8d979740a5 /platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java | |
parent | 0e154c74931b6ff5ad6e0ec512b32e30df3cb068 (diff) | |
download | idea-c6218e46d5d2017e987ecdbd99b318a95c42abc0.tar.gz |
Snapshot d8891a7de15cebb78b6ce5711e50e531b42c0baf from master branch of git://git.jetbrains.org/idea/community.git
Change-Id: Ida9d1b0a2341112b9ebcf67bf560c8f62f0afdc6
Diffstat (limited to 'platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java')
-rw-r--r-- | platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java | 126 |
1 files changed, 74 insertions, 52 deletions
diff --git a/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java b/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java index 9ffddbce8451..bb6728607eb8 100644 --- a/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java +++ b/platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java @@ -27,7 +27,10 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.extensions.LogProvider; import com.intellij.openapi.extensions.PluginId; -import com.intellij.openapi.util.*; +import com.intellij.openapi.util.BuildNumber; +import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ArrayUtil; @@ -90,19 +93,27 @@ public class PluginManagerCore { public static void loadDisabledPlugins(final String configPath, final Collection<String> disabledPlugins) { final File file = new File(configPath, DISABLED_PLUGINS_FILENAME); if (file.isFile()) { + BufferedReader reader = null; try { - BufferedReader reader = new BufferedReader(new FileReader(file)); + reader = new BufferedReader(new FileReader(file)); + String id; + while ((id = reader.readLine()) != null) { + disabledPlugins.add(id.trim()); + } + } + catch (IOException e) { + //do nothing + } + finally { try { - String id; - while ((id = reader.readLine()) != null) { - disabledPlugins.add(id.trim()); + if (reader != null) { + reader.close(); } } - finally { - reader.close(); + catch (IOException e) { + //do nothing } } - catch (IOException ignored) { } } } @@ -126,15 +137,18 @@ public class PluginManagerCore { if (!plugins.isFile()) { FileUtil.ensureCanCreateFile(plugins); } - PrintWriter printWriter = new PrintWriter(new BufferedWriter(new FileWriter(plugins, append))); + PrintWriter printWriter = null; try { + printWriter = new PrintWriter(new BufferedWriter(new FileWriter(plugins, append))); for (String id : ids) { printWriter.println(id); } printWriter.flush(); } finally { - printWriter.close(); + if (printWriter != null) { + printWriter.close(); + } } } @@ -219,7 +233,7 @@ public class PluginManagerCore { Map<PluginId, IdeaPluginDescriptor> map, final boolean checkModuleDependencies) { for (PluginId id: descriptor.getDependentPluginIds()) { - if (ArrayUtil.contains(id, (Object[])descriptor.getOptionalDependentPluginIds())) { + if (ArrayUtil.contains(id, descriptor.getOptionalDependentPluginIds())) { continue; } if (!checkModuleDependencies && isModuleDependency(id)) { @@ -398,16 +412,19 @@ public class PluginManagerCore { return 0; } + @SuppressWarnings({"EmptyCatchBlock"}) static Collection<URL> getClassLoaderUrls() { final ClassLoader classLoader = PluginManagerCore.class.getClassLoader(); final Class<? extends ClassLoader> aClass = classLoader.getClass(); try { - @SuppressWarnings("unchecked") List<URL> urls = (List<URL>)aClass.getMethod("getUrls").invoke(classLoader); - return urls; + return (List<URL>)aClass.getMethod("getUrls").invoke(classLoader); + } + catch (IllegalAccessException e) { + } + catch (InvocationTargetException e) { + } + catch (NoSuchMethodException e) { } - catch (IllegalAccessException ignored) { } - catch (InvocationTargetException ignored) { } - catch (NoSuchMethodException ignored) { } if (classLoader instanceof URLClassLoader) { return Arrays.asList(((URLClassLoader)classLoader).getURLs()); @@ -431,10 +448,10 @@ public class PluginManagerCore { } } - private static void addModulesAsDependents(Map<PluginId, ? super IdeaPluginDescriptorImpl> map) { + static <T extends IdeaPluginDescriptor> void addModulesAsDependents(final Map<PluginId, T> map) { for (String module : ourAvailableModules) { // fake plugin descriptors to satisfy dependencies - map.put(PluginId.getId(module), new IdeaPluginDescriptorImpl()); + map.put(PluginId.getId(module), (T) new IdeaPluginDescriptorImpl()); } } @@ -631,7 +648,7 @@ public class PluginManagerCore { if (optionalDescriptor == null && !FileUtil.isJarOrZip(file)) { for (URL url : getClassLoaderUrls()) { if ("file".equals(url.getProtocol())) { - optionalDescriptor = loadDescriptor(new File(decodeUrl(url.getFile())), optionalDescriptorName); + optionalDescriptor = loadDescriptor(new File(URLDecoder.decode(url.getFile())), optionalDescriptorName); if (optionalDescriptor != null) { break; } @@ -778,46 +795,51 @@ public class PluginManagerCore { return null; } - static void loadDescriptorsFromClassPath(@NotNull List<IdeaPluginDescriptorImpl> result, @Nullable StartupProgress progress) { - Collection<URL> urls = getClassLoaderUrls(); - String platformPrefix = System.getProperty(PlatformUtilsCore.PLATFORM_PREFIX_KEY); - int i = 0; - for (URL url : urls) { - i++; - if ("file".equals(url.getProtocol())) { - File file = new File(decodeUrl(url.getFile())); - - IdeaPluginDescriptorImpl platformPluginDescriptor = null; - if (platformPrefix != null) { - platformPluginDescriptor = loadDescriptor(file, platformPrefix + "Plugin.xml"); - if (platformPluginDescriptor != null && !result.contains(platformPluginDescriptor)) { - platformPluginDescriptor.setUseCoreClassLoader(true); - result.add(platformPluginDescriptor); + @SuppressWarnings({"UseOfSystemOutOrSystemErr", "CallToPrintStackTrace"}) + static void loadDescriptorsFromClassPath(final List<IdeaPluginDescriptorImpl> result, @Nullable StartupProgress progress) { + try { + final Collection<URL> urls = getClassLoaderUrls(); + final String platformPrefix = System.getProperty(PlatformUtilsCore.PLATFORM_PREFIX_KEY); + int i = 0; + for (URL url : urls) { + i++; + final String protocol = url.getProtocol(); + if ("file".equals(protocol)) { + final File file = new File(URLDecoder.decode(url.getFile())); + //final String canonicalPath = file.getCanonicalPath(); + //if (!canonicalPath.startsWith(homePath) || canonicalPath.endsWith(".jar")) continue; + //if (!canonicalPath.startsWith(homePath)) continue; + + IdeaPluginDescriptorImpl platformPluginDescriptor = null; + if (platformPrefix != null) { + platformPluginDescriptor = loadDescriptor(file, platformPrefix + "Plugin.xml"); + if (platformPluginDescriptor != null && !result.contains(platformPluginDescriptor)) { + platformPluginDescriptor.setUseCoreClassLoader(true); + result.add(platformPluginDescriptor); + } } - } - IdeaPluginDescriptorImpl pluginDescriptor = loadDescriptor(file, PLUGIN_XML); - if (platformPrefix != null && pluginDescriptor != null && pluginDescriptor.getName().equals(SPECIAL_IDEA_PLUGIN)) { - continue; - } - if (pluginDescriptor != null && !result.contains(pluginDescriptor)) { - if (platformPluginDescriptor != null) { - // if we found a regular plugin.xml in the same .jar/root as a platform-prefixed descriptor, use the core loader for it too - pluginDescriptor.setUseCoreClassLoader(true); + IdeaPluginDescriptorImpl pluginDescriptor = loadDescriptor(file, PLUGIN_XML); + if (platformPrefix != null && pluginDescriptor != null && pluginDescriptor.getName().equals(SPECIAL_IDEA_PLUGIN)) { + continue; } - result.add(pluginDescriptor); - if (progress != null) { - progress.showProgress("Plugin loaded: " + pluginDescriptor.getName(), PLUGINS_PROGRESS_MAX_VALUE * ((float)i / urls.size())); + if (pluginDescriptor != null && !result.contains(pluginDescriptor)) { + if (platformPluginDescriptor != null) { + // if we found a regular plugin.xml in the same .jar/root as a platform-prefixed descriptor, use the core loader for it too + pluginDescriptor.setUseCoreClassLoader(true); + } + result.add(pluginDescriptor); + if (progress != null) { + progress.showProgress("Plugin loaded: " + pluginDescriptor.getName(), PLUGINS_PROGRESS_MAX_VALUE * ((float)i / urls.size())); + } } } } } - } - - @SuppressWarnings("deprecation") - private static String decodeUrl(String file) { - String quotePluses = StringUtil.replace(file, "+", "%2B"); - return URLDecoder.decode(quotePluses); + catch (Exception e) { + System.err.println("Error loading plugins from classpath:"); + e.printStackTrace(); + } } static void loadDescriptorsFromProperty(final List<IdeaPluginDescriptorImpl> result) { |