From 8b4b6eef3a5ef07abea43237c1fe945f46e9eb1d Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Tue, 3 Nov 2015 14:47:50 +0300 Subject: [PATCH] speedup a dev kit inspection: try to write stateless EP; on IDEA-CR-6432 --- .../devkit/src/inspections/StatefulEpInspection.java | 10 +--------- plugins/devkit/src/util/ExtensionPointLocator.java | 7 +++++-- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/plugins/devkit/src/inspections/StatefulEpInspection.java b/plugins/devkit/src/inspections/StatefulEpInspection.java index c4015d232d87..3cc5b1c9ff7c 100644 --- a/plugins/devkit/src/inspections/StatefulEpInspection.java +++ b/plugins/devkit/src/inspections/StatefulEpInspection.java @@ -25,7 +25,6 @@ import com.intellij.psi.util.InheritanceUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.devkit.util.ExtensionPointCandidate; import org.jetbrains.idea.devkit.util.ExtensionPointLocator; import java.util.List; @@ -37,7 +36,7 @@ public class StatefulEpInspection extends DevKitInspectionBase { PsiField[] fields = psiClass.getFields(); if (fields.length == 0) return super.checkClass(psiClass, manager, isOnTheFly); final boolean isQuickFix = InheritanceUtil.isInheritor(psiClass, LocalQuickFix.class.getCanonicalName()); - if (isQuickFix || shouldCheck(psiClass)) { + if (isQuickFix || ExtensionPointLocator.isImplementedEp(psiClass)) { List result = ContainerUtil.newArrayList(); for (final PsiField field : fields) { for (Class c : new Class[]{PsiElement.class, PsiReference.class, Project.class}) { @@ -55,11 +54,4 @@ public class StatefulEpInspection extends DevKitInspectionBase { } return super.checkClass(psiClass, manager, isOnTheFly); } - - boolean shouldCheck(@NotNull PsiClass psiClass) { - for (ExtensionPointCandidate candidate : new ExtensionPointLocator(psiClass).findSuperCandidates()) { - if (ExtensionPointLocator.isImplementedEp(psiClass, candidate)) return true; - } - return false; - } } \ No newline at end of file diff --git a/plugins/devkit/src/util/ExtensionPointLocator.java b/plugins/devkit/src/util/ExtensionPointLocator.java index c65d8e1113a7..4f7beac31eda 100644 --- a/plugins/devkit/src/util/ExtensionPointLocator.java +++ b/plugins/devkit/src/util/ExtensionPointLocator.java @@ -29,6 +29,7 @@ import com.intellij.util.xml.DomService; import com.intellij.util.xml.DomUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.idea.devkit.dom.Extension; import org.jetbrains.idea.devkit.dom.ExtensionPoint; import org.jetbrains.idea.devkit.dom.IdeaPlugin; @@ -91,7 +92,7 @@ public class ExtensionPointLocator { return GlobalSearchScope.filesScope(project, candidates); } - public static boolean isImplementedEp(@NotNull PsiClass psiClass, @NotNull final ExtensionPointCandidate candidate) { + public static boolean isImplementedEp(@NotNull PsiClass psiClass) { String name = psiClass.getQualifiedName(); if (name == null) return false; @@ -101,7 +102,9 @@ public class ExtensionPointLocator { @Override public boolean process(PsiFile file, int startOffset, int endOffset) { XmlTag tag = PsiTreeUtil.getParentOfType(file.findElementAt(startOffset), XmlTag.class); - return tag == null || !candidate.epName.endsWith(tag.getName()); + if (tag == null) return true; + DomElement dom = DomUtil.getDomElement(tag); + return !(dom instanceof Extension && ((Extension)dom).getExtensionPoint() != null); } }, scope); }