mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
speedup a dev kit inspection: try to write stateless EP;
on IDEA-CR-6432
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user