From 01c9c0da5cc32d5b59881492aa57294481ebf4af Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 4 Jul 2016 13:54:43 +0200 Subject: [PATCH] IG: remove some duplication --- ...eclareCollectionAsInterfaceInspection.java | 26 +++---------------- ...ethodOnlyUsedFromInnerClassInspection.java | 20 ++++---------- ...ethodOnlyUsedInOneClassInspectionBase.java | 14 +++------- .../ig/psiutils/DeclarationSearchUtils.java | 25 +++++++++++++++++- 4 files changed, 37 insertions(+), 48 deletions(-) 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 ea878cda2318..9fa145243c78 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/DeclareCollectionAsInterfaceInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/DeclareCollectionAsInterfaceInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2016 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,19 +17,16 @@ package com.siyeh.ig.abstraction; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel; -import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.PsiSearchHelper; -import com.intellij.psi.search.SearchScope; import com.intellij.util.IncorrectOperationException; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.InspectionGadgetsFix; import com.siyeh.ig.psiutils.CollectionUtils; +import com.siyeh.ig.psiutils.DeclarationSearchUtils; import com.siyeh.ig.psiutils.LibraryUtil; import com.siyeh.ig.psiutils.WeakestTypeFinder; import org.jetbrains.annotations.NotNull; @@ -146,7 +143,7 @@ public class DeclareCollectionAsInterfaceInspection extends BaseInspection { @Override public void visitVariable(@NotNull PsiVariable variable) { - if (isOnTheFly() && !isCheapEnoughToSearch(variable)) { + if (isOnTheFly() && DeclarationSearchUtils.isTooExpensiveToSearch(variable, false)) { return; } if (ignoreLocalVariables && variable instanceof PsiLocalVariable) { @@ -189,7 +186,7 @@ public class DeclareCollectionAsInterfaceInspection extends BaseInspection { method.hasModifierProperty(PsiModifier.PRIVATE)) { return; } - if (isOnTheFly() && !isCheapEnoughToSearch(method)) { + if (isOnTheFly() && DeclarationSearchUtils.isTooExpensiveToSearch(method, false)) { return; } final PsiType type = method.getReturnType(); @@ -234,20 +231,5 @@ public class DeclareCollectionAsInterfaceInspection extends BaseInspection { registerError(nameElement, qualifiedName); } } - - private boolean isCheapEnoughToSearch(PsiNamedElement element) { - final String name = element.getName(); - if (name == null) { - return false; - } - final ProgressManager progressManager = - ProgressManager.getInstance(); - final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(element.getProject()); - final SearchScope useScope = element.getUseScope(); - if (useScope instanceof GlobalSearchScope) { - return searchHelper.isCheapEnoughToSearch(name, (GlobalSearchScope)useScope, null, progressManager.getProgressIndicator()) != PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES; - } - return true; - } } } \ No newline at end of file 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 1286843309cf..e43e5bb69aa6 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MethodOnlyUsedFromInnerClassInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/MethodOnlyUsedFromInnerClassInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2005-2012 Bas Leijdekkers + * Copyright 2005-2016 Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,18 +16,15 @@ package com.siyeh.ig.abstraction; import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; import com.intellij.psi.*; -import com.intellij.psi.search.PsiSearchHelper; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.Processor; -import com.intellij.util.Query; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.psiutils.ClassUtils; +import com.siyeh.ig.psiutils.DeclarationSearchUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -182,17 +179,10 @@ public class MethodOnlyUsedFromInnerClassInspection extends BaseInspection { } public boolean isOnlyAccessedFromInnerClass() { - final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(method.getProject()); - final ProgressManager progressManager = ProgressManager.getInstance(); - final ProgressIndicator progressIndicator = progressManager.getProgressIndicator(); - final PsiSearchHelper.SearchCostResult searchCost = - searchHelper.isCheapEnoughToSearch(method.getName(), method.getResolveScope(), null, progressIndicator); - if (searchCost == PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES || - searchCost == PsiSearchHelper.SearchCostResult.ZERO_OCCURRENCES) { - return onlyAccessedFromInnerClass; + if (DeclarationSearchUtils.isTooExpensiveToSearch(method, true)) { + return false; } - final Query query = ReferencesSearch.search(method); - query.forEach(this); + ReferencesSearch.search(method).forEach(this); return onlyAccessedFromInnerClass; } diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspectionBase.java index 9d10a449ec4c..52dcdc9ad1f1 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspectionBase.java @@ -18,9 +18,7 @@ package com.siyeh.ig.abstraction; import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel; import com.intellij.openapi.progress.ProgressManager; import com.intellij.psi.*; -import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiElementProcessor; -import com.intellij.psi.search.PsiSearchHelper; import com.intellij.psi.search.searches.MethodReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; @@ -30,6 +28,7 @@ import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.psiutils.ClassUtils; +import com.siyeh.ig.psiutils.DeclarationSearchUtils; import com.siyeh.ig.psiutils.TestUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -110,17 +109,12 @@ public class StaticMethodOnlyUsedInOneClassInspectionBase extends BaseInspection */ @Nullable public PsiClass getUsageClass(final PsiMethod method) { - final ProgressManager progressManager = ProgressManager.getInstance(); - final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(method.getProject()); - final String name = method.getName(); - final GlobalSearchScope scope = GlobalSearchScope.projectScope(method.getProject()); - if (searchHelper.isCheapEnoughToSearch(name, scope, null, progressManager.getProgressIndicator()) - == PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES) { + if (DeclarationSearchUtils.isTooExpensiveToSearch(method, true)) { return null; } - progressManager.runProcess(() -> { + ProgressManager.getInstance().runProcess(() -> { final Query query = MethodReferencesSearch.search(method); - if (!query.forEach(UsageProcessor.this)) { + if (!query.forEach(this)) { foundClass.set(null); } }, null); diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/DeclarationSearchUtils.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/DeclarationSearchUtils.java index 59547dffdae3..cd7fe1d0cf24 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/DeclarationSearchUtils.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/DeclarationSearchUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2015 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2016 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,9 +15,13 @@ */ package com.siyeh.ig.psiutils; +import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.controlFlow.DefUseUtil; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.PsiSearchHelper; +import com.intellij.psi.search.SearchScope; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -132,4 +136,23 @@ public class DeclarationSearchUtils { } return null; } + + public static boolean isTooExpensiveToSearch(PsiNamedElement element, boolean zeroResult) { + final String name = element.getName(); + if (name == null) { + return true; + } + final ProgressManager progressManager = ProgressManager.getInstance(); + final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(element.getProject()); + final SearchScope useScope = element.getUseScope(); + if (!(useScope instanceof GlobalSearchScope)) { + return zeroResult; + } + final PsiSearchHelper.SearchCostResult cost = + searchHelper.isCheapEnoughToSearch(name, (GlobalSearchScope)useScope, null, progressManager.getProgressIndicator()); + if (cost == PsiSearchHelper.SearchCostResult.ZERO_OCCURRENCES) { + return zeroResult; + } + return cost == PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES; + } } \ No newline at end of file