diff options
Diffstat (limited to 'plugins/devkit/src/dom')
-rw-r--r-- | plugins/devkit/src/dom/Action.java | 3 | ||||
-rw-r--r-- | plugins/devkit/src/dom/impl/ExtensionDomExtender.java | 155 | ||||
-rw-r--r-- | plugins/devkit/src/dom/impl/PluginXmlDomFileDescription.java | 99 |
3 files changed, 80 insertions, 177 deletions
diff --git a/plugins/devkit/src/dom/Action.java b/plugins/devkit/src/dom/Action.java index ac879140fd4b..e28f2d13b9b4 100644 --- a/plugins/devkit/src/dom/Action.java +++ b/plugins/devkit/src/dom/Action.java @@ -165,4 +165,7 @@ public interface Action extends DomElement { @NotNull GenericAttributeValue<String> getKeymap(); + + @NotNull + GenericAttributeValue<String> getProjectType(); } diff --git a/plugins/devkit/src/dom/impl/ExtensionDomExtender.java b/plugins/devkit/src/dom/impl/ExtensionDomExtender.java index f5c83ccb66bc..538ee7e70243 100644 --- a/plugins/devkit/src/dom/impl/ExtensionDomExtender.java +++ b/plugins/devkit/src/dom/impl/ExtensionDomExtender.java @@ -15,7 +15,7 @@ */ package org.jetbrains.idea.devkit.dom.impl; -import com.intellij.ide.plugins.PluginManager; +import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -50,57 +50,6 @@ import java.util.*; public class ExtensionDomExtender extends DomExtender<Extensions> { private static final PsiClassConverter CLASS_CONVERTER = new PluginPsiClassConverter(); private static final Converter LANGUAGE_CONVERTER = new LanguageResolvingConverter(); - - private static class MyRequired implements Required { - @Override - public boolean value() { - return true; - } - - @Override - public boolean nonEmpty() { - return true; - } - - @Override - public boolean identifier() { - return false; - } - - @Override - public Class<? extends Annotation> annotationType() { - return Required.class; - } - } - - private static class MyExtendClass extends ExtendClassImpl { - private final String myInterfaceName; - - private MyExtendClass(String interfaceName) { - myInterfaceName = interfaceName; - } - - @Override - public boolean allowAbstract() { - return false; - } - - @Override - public boolean allowInterface() { - return false; - } - - @Override - public boolean allowEnum() { - return false; - } - - @Override - public String value() { - return myInterfaceName; - } - } - private static final DomExtender EXTENSION_EXTENDER = new DomExtender() { public void registerExtensions(@NotNull final DomElement domElement, @NotNull final DomExtensionsRegistrar registrar) { final ExtensionPoint extensionPoint = (ExtensionPoint)domElement.getChildDescription().getDomDeclaration(); @@ -127,31 +76,6 @@ public class ExtensionDomExtender extends DomExtender<Extensions> { } }; - - public void registerExtensions(@NotNull final Extensions extensions, @NotNull final DomExtensionsRegistrar registrar) { - final XmlElement xmlElement = extensions.getXmlElement(); - if (xmlElement == null) return; - - IdeaPlugin ideaPlugin = extensions.getParentOfType(IdeaPlugin.class, true); - - if (ideaPlugin == null) return; - - String epPrefix = extensions.getEpPrefix(); - for (IdeaPlugin plugin : getVisiblePlugins(ideaPlugin)) { - final String pluginId = StringUtil.notNullize(plugin.getPluginId(), "com.intellij"); - for (ExtensionPoints points : plugin.getExtensionPoints()) { - for (ExtensionPoint point : points.getExtensionPoints()) { - registerExtensionPoint(registrar, point, epPrefix, pluginId); - } - } - } - } - - @Override - public boolean supportsStubs() { - return false; - } - private static Set<IdeaPlugin> getVisiblePlugins(IdeaPlugin ideaPlugin) { Set<IdeaPlugin> result = ContainerUtil.newHashSet(); MultiMap<String, IdeaPlugin> byId = getPluginMap(ideaPlugin.getManager().getProject()); @@ -385,11 +309,10 @@ public class ExtensionDomExtender extends DomExtender<Extensions> { return PsiTypesUtil.getPsiClass(elementType); } - public static Collection<String> getDependencies(IdeaPlugin ideaPlugin) { Set<String> result = new HashSet<String>(); - result.add(PluginManager.CORE_PLUGIN_ID); + result.add(PluginManagerCore.CORE_PLUGIN_ID); for (Dependency dependency : ideaPlugin.getDependencies()) { ContainerUtil.addIfNotNull(dependency.getStringValue(), result); @@ -422,10 +345,84 @@ public class ExtensionDomExtender extends DomExtender<Extensions> { return result; } + public void registerExtensions(@NotNull final Extensions extensions, @NotNull final DomExtensionsRegistrar registrar) { + final XmlElement xmlElement = extensions.getXmlElement(); + if (xmlElement == null) return; + + IdeaPlugin ideaPlugin = extensions.getParentOfType(IdeaPlugin.class, true); + + if (ideaPlugin == null) return; + + String epPrefix = extensions.getEpPrefix(); + for (IdeaPlugin plugin : getVisiblePlugins(ideaPlugin)) { + final String pluginId = StringUtil.notNullize(plugin.getPluginId(), "com.intellij"); + for (ExtensionPoints points : plugin.getExtensionPoints()) { + for (ExtensionPoint point : points.getExtensionPoints()) { + registerExtensionPoint(registrar, point, epPrefix, pluginId); + } + } + } + } + + @Override + public boolean supportsStubs() { + return false; + } + interface SimpleTagValue extends DomElement { @SuppressWarnings("UnusedDeclaration") @TagValue String getTagValue(); } + private static class MyRequired implements Required { + @Override + public boolean value() { + return true; + } + + @Override + public boolean nonEmpty() { + return true; + } + + @Override + public boolean identifier() { + return false; + } + + @Override + public Class<? extends Annotation> annotationType() { + return Required.class; + } + } + + private static class MyExtendClass extends ExtendClassImpl { + private final String myInterfaceName; + + private MyExtendClass(String interfaceName) { + myInterfaceName = interfaceName; + } + + @Override + public boolean allowAbstract() { + return false; + } + + @Override + public boolean allowInterface() { + return false; + } + + @Override + public boolean allowEnum() { + return false; + } + + @Override + public String value() { + return myInterfaceName; + } + } + } diff --git a/plugins/devkit/src/dom/impl/PluginXmlDomFileDescription.java b/plugins/devkit/src/dom/impl/PluginXmlDomFileDescription.java index b3d7fda2c19a..091c172d0a60 100644 --- a/plugins/devkit/src/dom/impl/PluginXmlDomFileDescription.java +++ b/plugins/devkit/src/dom/impl/PluginXmlDomFileDescription.java @@ -15,109 +15,18 @@ */ package org.jetbrains.idea.devkit.dom.impl; -import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.icons.AllIcons; -import com.intellij.lang.annotation.Annotation; -import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.util.Iconable; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiField; -import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomFileDescription; -import com.intellij.util.xml.DomUtil; -import com.intellij.util.xml.GenericAttributeValue; -import com.intellij.util.xml.highlighting.DomElementAnnotationHolder; -import com.intellij.util.xml.highlighting.DomElementsAnnotator; -import com.intellij.util.xml.reflect.DomAttributeChildDescription; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.devkit.dom.*; +import org.jetbrains.idea.devkit.dom.IdeaPlugin; import javax.swing.*; -import java.util.List; /** * @author mike */ public class PluginXmlDomFileDescription extends DomFileDescription<IdeaPlugin> { - private static final DomElementsAnnotator ANNOTATOR = new DomElementsAnnotator() { - @Override - public void annotate(DomElement element, DomElementAnnotationHolder holder) { - if (element instanceof Extension) { - annotateExtension((Extension)element, holder); - } - else if (element instanceof Vendor) { - annotateVendor((Vendor)element, holder); - } - else if (element instanceof IdeaVersion) { - annotateIdeaVersion((IdeaVersion)element, holder); - } - else if (element instanceof Extensions) { - annotateExtensions((Extensions)element, holder); - } - } - - private void annotateExtensions(Extensions extensions, DomElementAnnotationHolder holder) { - final GenericAttributeValue<IdeaPlugin> xmlnsAttribute = extensions.getXmlns(); - if (!DomUtil.hasXml(xmlnsAttribute)) return; - - final Annotation annotation = holder.createAnnotation(xmlnsAttribute, - HighlightSeverity.WARNING, - "Use defaultExtensionNs instead"); - annotation.setHighlightType(ProblemHighlightType.LIKE_DEPRECATED); - } - - private void annotateIdeaVersion(IdeaVersion ideaVersion, DomElementAnnotationHolder holder) { - highlightNotUsedAnymore(ideaVersion.getMin(), holder); - highlightNotUsedAnymore(ideaVersion.getMax(), holder); - } - - private void annotateExtension(Extension extension, DomElementAnnotationHolder holder) { - final ExtensionPoint extensionPoint = extension.getExtensionPoint(); - if (extensionPoint == null) return; - final GenericAttributeValue<PsiClass> interfaceAttribute = extensionPoint.getInterface(); - if (DomUtil.hasXml(interfaceAttribute)) { - final PsiClass value = interfaceAttribute.getValue(); - if (value != null && value.isDeprecated()) { - final Annotation annotation = holder.createAnnotation(extension, HighlightSeverity.WARNING, "Deprecated EP"); - annotation.setHighlightType(ProblemHighlightType.LIKE_DEPRECATED); - return; - } - } - - final List<? extends DomAttributeChildDescription> descriptions = extension.getGenericInfo().getAttributeChildrenDescriptions(); - for (DomAttributeChildDescription attributeDescription : descriptions) { - final GenericAttributeValue attributeValue = attributeDescription.getDomAttributeValue(extension); - if (attributeValue == null || !DomUtil.hasXml(attributeValue)) continue; - - final PsiElement declaration = attributeDescription.getDeclaration(extension.getManager().getProject()); - if (declaration instanceof PsiField) { - PsiField psiField = (PsiField)declaration; - if (psiField.isDeprecated()) { - final Annotation annotation = holder.createAnnotation(attributeValue, HighlightSeverity.WARNING, - "Deprecated attribute '" + attributeDescription.getName() + "'"); - annotation.setHighlightType(ProblemHighlightType.LIKE_DEPRECATED); - } - } - } - } - - private void annotateVendor(Vendor vendor, DomElementAnnotationHolder holder) { - highlightNotUsedAnymore(vendor.getLogo(), holder); - } - - private void highlightNotUsedAnymore(GenericAttributeValue attributeValue, - DomElementAnnotationHolder holder) { - if (!DomUtil.hasXml(attributeValue)) return; - - final Annotation annotation = holder.createAnnotation(attributeValue, - HighlightSeverity.WARNING, - "Not used anymore"); - annotation.setHighlightType(ProblemHighlightType.LIKE_DEPRECATED); - } - }; - public PluginXmlDomFileDescription() { super(IdeaPlugin.class, "idea-plugin"); } @@ -127,12 +36,6 @@ public class PluginXmlDomFileDescription extends DomFileDescription<IdeaPlugin> return AllIcons.Nodes.Plugin; } - @Nullable - @Override - public DomElementsAnnotator createAnnotator() { - return ANNOTATOR; - } - @Override public boolean hasStubs() { return true; |