mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IG: remove some duplication
This commit is contained in:
+4
-22
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+5
-15
@@ -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<PsiReference> query = ReferencesSearch.search(method);
|
||||
query.forEach(this);
|
||||
ReferencesSearch.search(method).forEach(this);
|
||||
return onlyAccessedFromInnerClass;
|
||||
}
|
||||
|
||||
|
||||
+4
-10
@@ -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<PsiReference> query = MethodReferencesSearch.search(method);
|
||||
if (!query.forEach(UsageProcessor.this)) {
|
||||
if (!query.forEach(this)) {
|
||||
foundClass.set(null);
|
||||
}
|
||||
}, null);
|
||||
|
||||
+24
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user