@Nullable static IdeaPluginDescriptorImpl loadDescriptorFromJar(File file, @NonNls String fileName) { try { 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; } catch (XmlSerializationException e) { getLogger().info("Cannot load " + file, e); prepareLoadingPluginsErrorMessage( "Plugin file " + file.getName() + " contains invalid plugin descriptor file."); } catch (FileNotFoundException e) { return null; } catch (Exception e) { getLogger().info("Cannot load " + file, e); } catch (Throwable e) { getLogger().info("Cannot load " + file, e); } return null; }
@Nullable static IdeaPluginDescriptorImpl loadDescriptorFromDir(final File file, @NonNls String fileName) { IdeaPluginDescriptorImpl descriptor = null; File descriptorFile = new File(file, META_INF + File.separator + fileName); if (descriptorFile.exists()) { descriptor = new IdeaPluginDescriptorImpl(file); try { descriptor.readExternal(descriptorFile.toURI().toURL()); } catch (Exception e) { System.err.println("Cannot load: " + descriptorFile.getAbsolutePath()); e.printStackTrace(); } } return descriptor; }