From 64d0132021f5d2dbb0390ec3aa188524329fc830 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 7 May 2021 14:04:47 +0200 Subject: [PATCH] more inspections to report unsteady local results (IDEA-268840) GitOrigin-RevId: 07527de7fb57861bc766a879c1abf3ae7de7d1bf --- .../src/com/siyeh/ig/BaseInspectionVisitor.java | 7 +++++++ .../DeclareCollectionAsInterfaceInspection.java | 2 ++ .../MethodOnlyUsedFromInnerClassInspection.java | 7 ++++--- .../StaticMethodOnlyUsedInOneClassInspection.java | 10 ++++++++-- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java index df9aa1c15c26..426507cc653b 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/BaseInspectionVisitor.java @@ -25,6 +25,7 @@ import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public abstract class BaseInspectionVisitor extends JavaElementVisitor { @@ -169,6 +170,12 @@ public abstract class BaseInspectionVisitor extends JavaElementVisitor { final String description = inspection.buildErrorString(infos); holder.registerProblem(location, description, highlightType, fixes); } + + protected final void registerPossibleProblem(@Nullable PsiElement element) { + if (element != null) { + holder.registerPossibleProblem(element); + } + } protected final void registerErrorAtOffset(@NotNull PsiElement location, int offset, int length, Object... infos) { registerErrorAtOffset(location, offset, length, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, infos); diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/DeclareCollectionAsInterfaceInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/DeclareCollectionAsInterfaceInspection.java index 5057b78d5cbf..1ac10479d679 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/DeclareCollectionAsInterfaceInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/DeclareCollectionAsInterfaceInspection.java @@ -130,6 +130,7 @@ public class DeclareCollectionAsInterfaceInspection extends BaseInspection { @Override public void visitVariable(@NotNull PsiVariable variable) { if (isOnTheFly() && DeclarationSearchUtils.isTooExpensiveToSearch(variable, false)) { + registerPossibleProblem(variable.getNameIdentifier()); return; } if (ignoreLocalVariables && variable instanceof PsiLocalVariable) { @@ -173,6 +174,7 @@ public class DeclareCollectionAsInterfaceInspection extends BaseInspection { return; } if (isOnTheFly() && DeclarationSearchUtils.isTooExpensiveToSearch(method, false)) { + registerPossibleProblem(method.getNameIdentifier()); return; } final PsiType type = method.getReturnType(); diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MethodOnlyUsedFromInnerClassInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MethodOnlyUsedFromInnerClassInspection.java index e64a9698787c..91d9b18790ce 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MethodOnlyUsedFromInnerClassInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MethodOnlyUsedFromInnerClassInspection.java @@ -70,6 +70,10 @@ public class MethodOnlyUsedFromInnerClassInspection extends BaseInspection { if (method.getNameIdentifier() == null) { return; } + if (DeclarationSearchUtils.isTooExpensiveToSearch(method, false)) { + registerPossibleProblem(method.getNameIdentifier()); + return; + } final MethodReferenceFinder processor = new MethodReferenceFinder(method); final PsiClass innerClass = processor.getOnlyAccessInnerClass(); if (innerClass == null) { @@ -123,9 +127,6 @@ public class MethodOnlyUsedFromInnerClassInspection extends BaseInspection { } public PsiClass getOnlyAccessInnerClass() { - if (DeclarationSearchUtils.isTooExpensiveToSearch(method, true)) { - return null; - } ReferencesSearch.search(method).forEach(this); return myContainingClass; } diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java index bc06723f8b7e..af6b1e59a8e3 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java @@ -391,7 +391,10 @@ public class StaticMethodOnlyUsedInOneClassInspection extends BaseGlobalInspecti super.visitField(field); if (!field.hasModifierProperty(PsiModifier.STATIC) || field.hasModifierProperty(PsiModifier.PRIVATE)) return; if (field instanceof PsiEnumConstant || isSingletonField(field)) return; - if (DeclarationSearchUtils.isTooExpensiveToSearch(field, true)) return; + if (DeclarationSearchUtils.isTooExpensiveToSearch(field, false)) { + registerPossibleProblem(field.getNameIdentifier()); + return; + } final PsiClass usageClass = getUsageClass(field); if (usageClass == null) return; registerFieldError(field, field, usageClass); @@ -408,7 +411,10 @@ public class StaticMethodOnlyUsedInOneClassInspection extends BaseGlobalInspecti if (MethodUtils.isFactoryMethod(method) || MethodUtils.isConvenienceOverload(method)) { return; } - if (DeclarationSearchUtils.isTooExpensiveToSearch(method, true)) return; + if (DeclarationSearchUtils.isTooExpensiveToSearch(method, false)) { + registerPossibleProblem(method.getNameIdentifier()); + return; + } final PsiClass usageClass = getUsageClass(method); if (usageClass == null) return; registerMethodError(method, method, usageClass);