From 9c0a1b5c8b7f7749c35aea519d2947690a14bb07 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 15 Jul 2011 17:53:25 +0400 Subject: [PATCH] order.txt updated --- .../ide/plugins/IdeaPluginDescriptorImpl.java | 10 ++- .../intellij/ide/plugins/PluginManager.java | 62 ++++++++++++++---- .../testData/pluginDescriptor/asp.jar | Bin 0 -> 40472 bytes .../pluginDescriptor/resources_en.jar | Bin 0 -> 848 bytes .../ide/plugins/PluginDescriptorTest.java | 19 ++++++ .../intellij/util/io/zip/ReorderJarsMain.java | 2 + platform/util/testData/reorderJars/zkm.jar | Bin 0 -> 21734 bytes .../util/testData/reorderJars/zkmOrder.txt | 1 + .../intellij/util/io/zip/ReorderJarsTest.java | 25 +++++++ 9 files changed, 105 insertions(+), 14 deletions(-) create mode 100644 platform/platform-impl/testData/pluginDescriptor/asp.jar create mode 100644 platform/platform-impl/testData/pluginDescriptor/resources_en.jar create mode 100644 platform/platform-impl/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.java create mode 100644 platform/util/testData/reorderJars/zkm.jar create mode 100644 platform/util/testData/reorderJars/zkmOrder.txt diff --git a/platform/platform-api/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java b/platform/platform-api/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java index 9dd680be9ab5..7c6b8656b2d8 100644 --- a/platform/platform-api/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java +++ b/platform/platform-api/src/com/intellij/ide/plugins/IdeaPluginDescriptorImpl.java @@ -102,12 +102,16 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor { protected static StringInterner ourInterner = new StringInterner(); + public void readExternal(Document document, final URL url) throws InvalidDataException, FileNotFoundException { + document = JDOMXIncluder.resolve(document, url.toExternalForm()); + JDOMUtil.internElement(document.getRootElement(), ourInterner); + readExternal(document.getRootElement()); + } + public void readExternal(final URL url) throws InvalidDataException, FileNotFoundException { try { Document document = JDOMUtil.loadDocument(url); - document = JDOMXIncluder.resolve(document, url.toExternalForm()); - JDOMUtil.internElement(document.getRootElement(), ourInterner); - readExternal(document.getRootElement()); + readExternal(document, url); } catch (FileNotFoundException e) { throw e; diff --git a/platform/platform-api/src/com/intellij/ide/plugins/PluginManager.java b/platform/platform-api/src/com/intellij/ide/plugins/PluginManager.java index a1bd41e362c7..25cc13e1d9d8 100644 --- a/platform/platform-api/src/com/intellij/ide/plugins/PluginManager.java +++ b/platform/platform-api/src/com/intellij/ide/plugins/PluginManager.java @@ -36,6 +36,7 @@ import com.intellij.openapi.progress.ProcessCanceledException; 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; @@ -44,8 +45,10 @@ import com.intellij.util.graph.CachingSemiGraph; import com.intellij.util.graph.DFSTBuilder; import com.intellij.util.graph.Graph; import com.intellij.util.graph.GraphGenerator; +import com.intellij.util.lang.JarMemoryLoader; import com.intellij.util.xmlb.XmlSerializationException; import gnu.trove.THashMap; +import org.jdom.Document; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -58,6 +61,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.*; import java.util.*; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; /** * @author mike @@ -85,6 +90,8 @@ public class PluginManager { private static final Map ourId2Index = new THashMap(); @NonNls private static final String MODULE_DEPENDENCY_PREFIX = "com.intellij.module"; private static final List ourAvailableModules = new ArrayList(); + private static final boolean ourOptimize = "true".equals(System.getProperty("idea.optimize")); + public static long startupStart; @@ -107,7 +114,13 @@ public class PluginManager { public static synchronized IdeaPluginDescriptor[] getPlugins() { if (ourPlugins == null) { long start = System.currentTimeMillis(); - initializePlugins(); + try { + initializePlugins(); + } + catch (RuntimeException e) { + getLogger().error(e); + throw e; + } getLogger().info(ourPlugins.length + " plugins initialized in " + (System.currentTimeMillis() - start) + " ms"); logPlugins(); ClassloaderUtil.clearJarURLCache(); @@ -814,17 +827,24 @@ public class PluginManager { if (files == null || files.length == 0) { return null; } + Arrays.sort(files, new Comparator() { + @Override + public int compare(File o1, File o2) { + if (o2.getName().startsWith((file.getName()))) return Integer.MAX_VALUE; + if (o1.getName().startsWith((file.getName()))) return -Integer.MAX_VALUE; + if (o2.getName().startsWith("resources")) return -Integer.MAX_VALUE; + if (o1.getName().startsWith("resources")) return Integer.MAX_VALUE; + return 0; + } + }); for (final File f : files) { if (ClassloaderUtil.isJarOrZip(f)) { - IdeaPluginDescriptorImpl descriptor1 = loadDescriptorFromJar(f, fileName); - if (descriptor1 != null) { - if (descriptor != null) { - getLogger().info("Cannot load " + file + " because two or more plugin.xml's detected"); - return null; - } - descriptor = descriptor1; + descriptor = loadDescriptorFromJar(f, fileName); + if (descriptor != null) { descriptor.setPath(file); + return descriptor; } + getLogger().warn("Cannot load descriptor from " + f.getName() + ""); } else if (f.isDirectory()) { IdeaPluginDescriptorImpl descriptor1 = loadDescriptorFromDir(f, fileName); @@ -883,14 +903,31 @@ public class PluginManager { @Nullable private static IdeaPluginDescriptorImpl loadDescriptorFromJar(File file, @NonNls String fileName) { try { - - IdeaPluginDescriptorImpl descriptor = new IdeaPluginDescriptorImpl(file); - URI fileURL = file.toURI(); URL jarURL = new URL( "jar:" + StringUtil.replace(fileURL.toASCIIString(), "!", "%21") + "!/META-INF/" + fileName ); + IdeaPluginDescriptorImpl descriptor = new IdeaPluginDescriptorImpl(file); + FileInputStream in = new FileInputStream(file); + ZipInputStream zipStream = new ZipInputStream(in); + try { + ZipEntry entry = zipStream.getNextEntry(); + if (entry.getName().equals(JarMemoryLoader.SIZE_ENTRY)) { + entry = zipStream.getNextEntry(); + if (entry.getName().equals("META-INF/" + fileName)) { + byte[] content = FileUtil.loadBytes(zipStream, (int)entry.getSize()); + Document document = JDOMUtil.loadDocument(new ByteArrayInputStream(content)); + descriptor.readExternal(document, jarURL); + return descriptor; + } + } + } + finally { + zipStream.close(); + in.close(); + } + descriptor.readExternal(jarURL); return descriptor; } @@ -904,6 +941,9 @@ public class PluginManager { catch (Exception e) { getLogger().info("Cannot load " + file, e); } + catch (Throwable e) { + getLogger().info("Cannot load " + file, e); + } return null; } diff --git a/platform/platform-impl/testData/pluginDescriptor/asp.jar b/platform/platform-impl/testData/pluginDescriptor/asp.jar new file mode 100644 index 0000000000000000000000000000000000000000..69a1c6d27c7d5cd8da7c04afd005a70293939e77 GIT binary patch literal 40472 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 z

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 ZoM~zg9x7+QDW)im^i@o3+uz7%{{f>ZfCB&k literal 0 HcmV?d00001 diff --git a/platform/platform-impl/testData/pluginDescriptor/resources_en.jar b/platform/platform-impl/testData/pluginDescriptor/resources_en.jar new file mode 100644 index 0000000000000000000000000000000000000000..f14264f8429031b5094d92b989f51b81ebfe26de GIT binary patch literal 848 zcmZ{h!AiqG5Qew57L8U!>OCh>q}y7sh^UZC3#Ft4QoKr_|lXdkZMCw5!=r!}}6(Tnb{-;X~<)QQ}P)hpaB_wDut zP?tF_FwX*x`%u$iKsy%Jy`c-V4cugw>*38EDyC-*K-Pf`fXSM123)Hr=CaAz=3#4$ zRr0BbZ{Uw_Wr)U^DF6|7SKIgw(1^9s=5bd(!bi=Yap@Zn_M9e!1%8NeKX56Cs39R6 mXGzGeC#G57ppcKVXxtpnTZ!f44AbiKX~CuOxkTy-laN2rDYwA@ literal 0 HcmV?d00001 diff --git a/platform/platform-impl/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.java b/platform/platform-impl/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.java new file mode 100644 index 000000000000..660eceb3f605 --- /dev/null +++ b/platform/platform-impl/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.java @@ -0,0 +1,19 @@ +package com.intellij.ide.plugins; + +import com.intellij.openapi.application.PathManager; +import junit.framework.TestCase; + +import java.io.File; + +/** + * @author Dmitry Avdeev + * Date: 7/14/11 + */ +public class PluginDescriptorTest extends TestCase { + + public void testDescriptorLoading() throws Exception { + String path = PathManager.getHomePath().replace(File.separatorChar, '/') + "/community/platform/platform-impl/testData/pluginDescriptor"; + IdeaPluginDescriptorImpl descriptor = PluginManager.loadDescriptorFromJar(new File(path + "/asp.jar")); + assertNotNull(descriptor); + } +} diff --git a/platform/util/src/com/intellij/util/io/zip/ReorderJarsMain.java b/platform/util/src/com/intellij/util/io/zip/ReorderJarsMain.java index 27331db2418a..7b5782d86268 100644 --- a/platform/util/src/com/intellij/util/io/zip/ReorderJarsMain.java +++ b/platform/util/src/com/intellij/util/io/zip/ReorderJarsMain.java @@ -59,6 +59,8 @@ public class ReorderJarsMain { final List orderedEntries = toReorder.get(jarUrl); Collections.sort(entries, new Comparator() { public int compare(JBZipEntry o1, JBZipEntry o2) { + if ("META-INF/plugin.xml".equals(o2.getName())) return Integer.MAX_VALUE; + if ("META-INF/plugin.xml".equals(o1.getName())) return -Integer.MAX_VALUE; if (orderedEntries.contains(o1.getName())) { return orderedEntries.contains(o2.getName()) ? orderedEntries.indexOf(o1.getName()) - orderedEntries.indexOf(o2.getName()) : -1; } diff --git a/platform/util/testData/reorderJars/zkm.jar b/platform/util/testData/reorderJars/zkm.jar new file mode 100644 index 0000000000000000000000000000000000000000..c1d6620b487241019d6cf1e7515098ac19022d9d GIT binary patch literal 21734 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 literal 0 HcmV?d00001 diff --git a/platform/util/testData/reorderJars/zkmOrder.txt b/platform/util/testData/reorderJars/zkmOrder.txt new file mode 100644 index 000000000000..87e1541df888 --- /dev/null +++ b/platform/util/testData/reorderJars/zkmOrder.txt @@ -0,0 +1 @@ +com/intellij/zkm/ZKMBundle.class:/zkm.jar diff --git a/platform/util/testSrc/com/intellij/util/io/zip/ReorderJarsTest.java b/platform/util/testSrc/com/intellij/util/io/zip/ReorderJarsTest.java index 548ca134691c..8f74ac52c9db 100644 --- a/platform/util/testSrc/com/intellij/util/io/zip/ReorderJarsTest.java +++ b/platform/util/testSrc/com/intellij/util/io/zip/ReorderJarsTest.java @@ -65,6 +65,31 @@ public class ReorderJarsTest extends TestCase { assertTrue(Arrays.equals(data, bytes)); } + public void testName() throws Exception { + + } + + public void testPluginXml() throws Exception { + String path = PathManager.getHomePath().replace(File.separatorChar, '/') + "/community/platform/util/testData/reorderJars"; + + ReorderJarsMain.main(new String[] { path + "/zkmOrder.txt", path, myTempDirectory.getPath() } ); + File[] files = myTempDirectory.listFiles(); + File file = files[0]; + assertEquals("zkm.jar", file.getName()); + + JBZipFile zipFile = new JBZipFile(file); + try { + List entries = zipFile.getEntries(); + System.out.println(entries); + assertEquals(JarMemoryLoader.SIZE_ENTRY, entries.get(0).getName()); + assertEquals("META-INF/plugin.xml", entries.get(1).getName()); + } + finally { + zipFile.close(); + } + + } + @Override protected void setUp() throws Exception { super.setUp();