diff --git a/plugins/devkit/resources/META-INF/plugin.xml b/plugins/devkit/resources/META-INF/plugin.xml index 88aa6e7f6234..36933ac68e19 100644 --- a/plugins/devkit/resources/META-INF/plugin.xml +++ b/plugins/devkit/resources/META-INF/plugin.xml @@ -85,12 +85,6 @@ enabledByDefault="true" level="WARNING" implementationClass="org.jetbrains.idea.devkit.inspections.InspectionMappingConsistencyInspection"/> - - -Ensures that an <extensionPoint> tag has <with> subtags specifying types for all class fields. - - - \ No newline at end of file diff --git a/plugins/devkit/src/dom/ExtensionPoint.java b/plugins/devkit/src/dom/ExtensionPoint.java index ddd2573497a7..7d77f2e155ea 100644 --- a/plugins/devkit/src/dom/ExtensionPoint.java +++ b/plugins/devkit/src/dom/ExtensionPoint.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package org.jetbrains.idea.devkit.dom; import com.intellij.ide.presentation.Presentation; import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiField; import com.intellij.util.xml.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -89,4 +90,11 @@ public interface ExtensionPoint extends DomElement { */ @Nullable String getNamePrefix(); + + /** + * Returns EP fields missing {@code } declaration to specify type. + * + * @return Fields. + */ + List collectMissingWithTags(); } diff --git a/plugins/devkit/src/dom/impl/ExtensionPointImpl.java b/plugins/devkit/src/dom/impl/ExtensionPointImpl.java index 1287948c2752..1fedbcd88265 100644 --- a/plugins/devkit/src/dom/impl/ExtensionPointImpl.java +++ b/plugins/devkit/src/dom/impl/ExtensionPointImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,12 +16,18 @@ package org.jetbrains.idea.devkit.dom.impl; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiField; +import com.intellij.util.SmartList; import com.intellij.util.xml.DomUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.devkit.dom.ExtensionPoint; import org.jetbrains.idea.devkit.dom.IdeaPlugin; +import java.util.Collections; +import java.util.List; + public abstract class ExtensionPointImpl implements ExtensionPoint { @NotNull @@ -55,4 +61,21 @@ public abstract class ExtensionPointImpl implements ExtensionPoint { return getNamePrefix() + "." + getName().getRawText(); } + + @Override + public List collectMissingWithTags() { + PsiClass beanClass = getBeanClass().getValue(); + if (beanClass == null) { + return Collections.emptyList(); + } + + final List result = new SmartList<>(); + for (PsiField field : beanClass.getAllFields()) { + if (ExtensionDomExtender.isClassField(field.getName()) && + ExtensionDomExtender.findWithElement(getWithElements(), field) == null) { + result.add(field); + } + } + return result; + } } diff --git a/plugins/devkit/src/inspections/ExtensionPointBeanClassInspection.java b/plugins/devkit/src/inspections/ExtensionPointBeanClassInspection.java deleted file mode 100644 index e8d0e2f1c1db..000000000000 --- a/plugins/devkit/src/inspections/ExtensionPointBeanClassInspection.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2000-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.idea.devkit.inspections; - -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiField; -import com.intellij.util.xml.DomElement; -import com.intellij.util.xml.highlighting.BasicDomElementsInspection; -import com.intellij.util.xml.highlighting.DomElementAnnotationHolder; -import com.intellij.util.xml.highlighting.DomHighlightingHelper; -import org.jetbrains.idea.devkit.dom.ExtensionPoint; -import org.jetbrains.idea.devkit.dom.IdeaPlugin; -import org.jetbrains.idea.devkit.dom.impl.ExtensionDomExtender; -import org.jetbrains.idea.devkit.inspections.quickfix.AddWithTagFix; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author yole - */ -public class ExtensionPointBeanClassInspection extends BasicDomElementsInspection { - - public ExtensionPointBeanClassInspection() { - super(IdeaPlugin.class); - } - - @Override - protected void checkDomElement(DomElement element, DomElementAnnotationHolder holder, DomHighlightingHelper helper) { - if (element instanceof ExtensionPoint) { - ExtensionPoint extensionPoint = (ExtensionPoint)element; - if (extensionPoint.getWithElements().isEmpty() && !collectMissingWithTags(extensionPoint).isEmpty()) { - holder.createProblem(extensionPoint, - " does not have tags to specify the types of class fields", - new AddWithTagFix()); - } - } - } - - public static List collectMissingWithTags(ExtensionPoint element) { - final List result = new ArrayList<>(); - PsiClass beanClass = element.getBeanClass().getValue(); - if (beanClass != null) { - for (PsiField field : beanClass.getAllFields()) { - if (ExtensionDomExtender.isClassField(field.getName()) && - ExtensionDomExtender.findWithElement(element.getWithElements(), field) == null) { - result.add(field); - } - } - } - return result; - } -} diff --git a/plugins/devkit/src/inspections/PluginXmlDomInspection.java b/plugins/devkit/src/inspections/PluginXmlDomInspection.java index 1f78c0379fe9..834dc36e87dd 100644 --- a/plugins/devkit/src/inspections/PluginXmlDomInspection.java +++ b/plugins/devkit/src/inspections/PluginXmlDomInspection.java @@ -23,6 +23,7 @@ import com.intellij.diagnostic.ITNReporter; import com.intellij.ide.plugins.IdeaPluginDescriptorImpl; import com.intellij.ide.plugins.PluginManagerCore; import com.intellij.ide.plugins.PluginManagerMain; +import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; @@ -41,6 +42,7 @@ import com.intellij.util.xml.reflect.DomAttributeChildDescription; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.devkit.dom.*; +import org.jetbrains.idea.devkit.inspections.quickfix.AddWithTagFix; import org.jetbrains.idea.devkit.util.PsiUtil; import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; @@ -75,6 +77,9 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection does not have tags to specify the types of class fields", + new AddWithTagFix()); + } + } + private static void annotateExtensions(Extensions extensions, DomElementAnnotationHolder holder) { final GenericAttributeValue xmlnsAttribute = extensions.getXmlns(); if (DomUtil.hasXml(xmlnsAttribute)) { diff --git a/plugins/devkit/src/inspections/quickfix/AddWithTagFix.java b/plugins/devkit/src/inspections/quickfix/AddWithTagFix.java index 8a6fccd4b270..5f3d01888fb9 100644 --- a/plugins/devkit/src/inspections/quickfix/AddWithTagFix.java +++ b/plugins/devkit/src/inspections/quickfix/AddWithTagFix.java @@ -32,7 +32,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.devkit.dom.ExtensionPoint; import org.jetbrains.idea.devkit.dom.With; import org.jetbrains.idea.devkit.dom.impl.PluginFieldNameConverter; -import org.jetbrains.idea.devkit.inspections.ExtensionPointBeanClassInspection; import java.util.List; @@ -53,7 +52,7 @@ public class AddWithTagFix implements LocalQuickFix { return; } ExtensionPoint extensionPoint = (ExtensionPoint)element; - List fields = ExtensionPointBeanClassInspection.collectMissingWithTags(extensionPoint); + List fields = extensionPoint.collectMissingWithTags(); PsiElement navTarget = null; for (PsiField field : fields) { With with = extensionPoint.addWith();