speedup a dev kit inspection: try to write stateless EP;

on IDEA-CR-6432
This commit is contained in:
Sergey Ignatov
2015-11-03 14:50:30 +03:00
parent f783a25f07
commit 8b4b6eef3a
2 changed files with 6 additions and 11 deletions
@@ -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<ProblemDescriptor> 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;
}
}
@@ -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);
}