@Override public void writeExternal(Element rootElement) throws WriteExternalException { LOG.assertTrue(!isDisposed(), "Already disposed!"); Element element = new Element(ELEMENT); if (myName != null) { element.setAttribute(LIBRARY_NAME_ATTR, myName); } if (myKind != null) { element.setAttribute(LIBRARY_TYPE_ATTR, myKind.getKindId()); final Object state = myProperties.getState(); if (state != null) { final Element propertiesElement = XmlSerializer.serialize(state, SERIALIZATION_FILTERS); if (propertiesElement != null && (!propertiesElement.getContent().isEmpty() || !propertiesElement.getAttributes().isEmpty())) { element.addContent(propertiesElement.setName(PROPERTIES_ELEMENT)); } } } ArrayList<OrderRootType> storableRootTypes = new ArrayList<OrderRootType>(); storableRootTypes.addAll(Arrays.asList(OrderRootType.getAllTypes())); if (myKind != null) { storableRootTypes.addAll(Arrays.asList(myKind.getAdditionalRootTypes())); } for (OrderRootType rootType : sortRootTypes(storableRootTypes)) { final VirtualFilePointerContainer roots = myRoots.get(rootType); if (roots.size() == 0 && rootType.skipWriteIfEmpty()) continue; // compatibility iml/ipr final Element rootTypeElement = new Element(rootType.name()); roots.writeExternal(rootTypeElement, ROOT_PATH_ELEMENT); element.addContent(rootTypeElement); } myJarDirectories.writeExternal(element); rootElement.addContent(element); }
@Nullable public static Configuration load(final InputStream is) throws IOException, JDOMException { try { final Document document = JDOMUtil.loadDocument(is); final ArrayList<Element> elements = new ArrayList<Element>(); elements.add(document.getRootElement()); elements.addAll(document.getRootElement().getChildren("component")); final Element element = ContainerUtil.find( elements, new Condition<Element>() { public boolean value(final Element element) { return "component".equals(element.getName()) && COMPONENT_NAME.equals(element.getAttributeValue("name")); } }); if (element != null) { final Configuration cfg = new Configuration(); cfg.loadState(element, false); return cfg; } return null; } finally { is.close(); } }
private void mergeWithDefaultConfiguration() { final ArrayList<Configuration> cfgList = new ArrayList<Configuration>(); for (LanguageInjectionSupport support : InjectorUtils.getActiveInjectionSupports()) { final String config = support.getDefaultConfigUrl(); final URL url = config == null ? null : support.getClass().getResource(config); if (url != null) { try { cfgList.add(load(url.openStream())); } catch (Exception e) { LOG.warn(e); } } } final THashSet<Object> visited = new THashSet<Object>(); for (IdeaPluginDescriptor pluginDescriptor : PluginManager.getPlugins()) { if (pluginDescriptor instanceof IdeaPluginDescriptorImpl && !((IdeaPluginDescriptorImpl) pluginDescriptor).isEnabled()) continue; final ClassLoader loader = pluginDescriptor.getPluginClassLoader(); if (!visited.add(loader)) continue; if (loader instanceof PluginClassLoader && ((PluginClassLoader) loader).getUrls().isEmpty()) continue; try { final Enumeration<URL> enumeration = loader.getResources("META-INF/languageInjections.xml"); if (enumeration == null) continue; while (enumeration.hasMoreElements()) { URL url = enumeration.nextElement(); if (!visited.add(url.getFile())) continue; // for DEBUG mode try { cfgList.add(load(url.openStream())); } catch (Exception e) { LOG.warn(e); } } } catch (Exception e) { LOG.warn(e); } } final ArrayList<BaseInjection> originalInjections = new ArrayList<BaseInjection>(); final ArrayList<BaseInjection> newInjections = new ArrayList<BaseInjection>(); myDefaultInjections = new ArrayList<BaseInjection>(); for (String supportId : InjectorUtils.getActiveInjectionSupportIds()) { for (Configuration cfg : cfgList) { final List<BaseInjection> imported = cfg.getInjections(supportId); myDefaultInjections.addAll(imported); importInjections(getInjections(supportId), imported, originalInjections, newInjections); } } replaceInjections(newInjections, originalInjections); }
private static List<BaseInjection> loadDefaultInjections() { final ArrayList<Configuration> cfgList = new ArrayList<Configuration>(); final THashSet<Object> visited = new THashSet<Object>(); for (LanguageInjectionConfigBean configBean : Extensions.getExtensions(LanguageInjectionSupport.CONFIG_EP_NAME)) { PluginDescriptor descriptor = configBean.getPluginDescriptor(); final ClassLoader loader = descriptor.getPluginClassLoader(); try { final Enumeration<URL> enumeration = loader.getResources(configBean.getConfigUrl()); if (enumeration == null || !enumeration.hasMoreElements()) { LOG.warn(descriptor.getPluginId() + ": " + configBean.getConfigUrl() + " was not found"); } else { while (enumeration.hasMoreElements()) { URL url = enumeration.nextElement(); if (!visited.add(url.getFile())) continue; // for DEBUG mode try { cfgList.add(load(url.openStream())); } catch (Exception e) { LOG.warn(e); } } } } catch (Exception e) { LOG.warn(e); } } final ArrayList<BaseInjection> defaultInjections = new ArrayList<BaseInjection>(); for (String supportId : InjectorUtils.getActiveInjectionSupportIds()) { for (Configuration cfg : cfgList) { final List<BaseInjection> imported = cfg.getInjections(supportId); defaultInjections.addAll(imported); } } return defaultInjections; }