add read action; avoid casts due to overload resolution rules

This commit is contained in:
Anna Kozlova
2017-01-24 16:16:28 +03:00
parent 998f288237
commit 2ad9f23ea0
@@ -18,13 +18,13 @@ package com.intellij.find.findUsages;
import com.intellij.find.FindBundle;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.ReadActionProcessor;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.NullableComputable;
import com.intellij.openapi.util.TextRange;
import com.intellij.pom.PomTarget;
@@ -33,7 +33,10 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.search.ThrowSearchUtil;
import com.intellij.psi.meta.PsiMetaData;
import com.intellij.psi.meta.PsiMetaOwner;
import com.intellij.psi.search.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiElementProcessorAdapter;
import com.intellij.psi.search.PsiReferenceProcessorAdapter;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.*;
import com.intellij.psi.targets.AliasingPsiTarget;
import com.intellij.psi.targets.AliasingPsiTargetMapper;
@@ -54,8 +57,7 @@ public class JavaFindUsagesHelper {
@NotNull
public static Set<String> getElementNames(@NotNull final PsiElement element) {
if (element instanceof PsiDirectory) { // normalize a directory to a corresponding package
PsiPackage aPackage = ApplicationManager.getApplication().runReadAction(
(Computable<PsiPackage>)() -> JavaDirectoryService.getInstance().getPackage((PsiDirectory)element));
PsiPackage aPackage = ReadAction.compute(() -> JavaDirectoryService.getInstance().getPackage((PsiDirectory)element));
return aPackage == null ? Collections.emptySet() : getElementNames(aPackage);
}
@@ -131,7 +133,7 @@ public class JavaFindUsagesHelper {
if (!addElementUsages(element, options, processor)) return false;
}
boolean success = ApplicationManager.getApplication().runReadAction((Computable<Boolean>)() -> {
boolean success = ReadAction.compute(() -> {
if (ThrowSearchUtil.isSearchable(element) && options instanceof JavaThrowFindUsagesOptions && options.isUsages) {
ThrowSearchUtil.Root root = ((JavaThrowFindUsagesOptions)options).getRoot();
if (root == null) {
@@ -155,14 +157,14 @@ public class JavaFindUsagesHelper {
if (options instanceof JavaClassFindUsagesOptions) {
final JavaClassFindUsagesOptions classOptions = (JavaClassFindUsagesOptions)options;
final PsiClass psiClass = (PsiClass)element;
PsiManager manager = ApplicationManager.getApplication().runReadAction((Computable<PsiManager>)psiClass::getManager);
PsiManager manager = ReadAction.compute(psiClass::getManager);
if (classOptions.isMethodsUsages){
if (!addMethodsUsages(psiClass, manager, classOptions, processor)) return false;
}
if (classOptions.isFieldsUsages){
if (!addFieldsUsages(psiClass, manager, classOptions, processor)) return false;
}
if (psiClass.isInterface()) {
if (ReadAction.compute(() -> psiClass.isInterface())) {
if (classOptions.isDerivedInterfaces){
if (classOptions.isImplementingClasses){
if (!addInheritors(psiClass, classOptions, processor)) return false;
@@ -188,7 +190,7 @@ public class JavaFindUsagesHelper {
if (options instanceof JavaMethodFindUsagesOptions){
final PsiMethod psiMethod = (PsiMethod)element;
boolean isAbstract = ApplicationManager.getApplication().runReadAction((Computable<Boolean>)() -> psiMethod.hasModifierProperty(PsiModifier.ABSTRACT));
boolean isAbstract = ReadAction.compute(() -> psiMethod.hasModifierProperty(PsiModifier.ABSTRACT));
final JavaMethodFindUsagesOptions methodOptions = (JavaMethodFindUsagesOptions)options;
if (isAbstract && methodOptions.isImplementingMethods || methodOptions.isOverridingMethods) {
if (!processOverridingMethods(psiMethod, processor, methodOptions)) return false;
@@ -200,8 +202,7 @@ public class JavaFindUsagesHelper {
if (element instanceof PomTarget) {
if (!addAliasingUsages((PomTarget)element, options, processor)) return false;
}
final Boolean isSearchable = ApplicationManager.getApplication().runReadAction(
(Computable<Boolean>)() -> ThrowSearchUtil.isSearchable(element));
final Boolean isSearchable = ReadAction.compute(() -> ThrowSearchUtil.isSearchable(element));
if (!isSearchable && options.isSearchForTextOccurrences && options.searchScope instanceof GlobalSearchScope) {
Collection<String> stringsToSearch = ApplicationManager.getApplication().runReadAction(
(NullableComputable<Collection<String>>)() -> getElementNames(element));
@@ -217,12 +218,7 @@ public class JavaFindUsagesHelper {
for (AliasingPsiTargetMapper aliasingPsiTargetMapper : Extensions.getExtensions(AliasingPsiTargetMapper.EP_NAME)) {
for (final AliasingPsiTarget psiTarget : aliasingPsiTargetMapper.getTargets(pomTarget)) {
boolean success = ReferencesSearch
.search(new ReferencesSearch.SearchParameters(ApplicationManager.getApplication().runReadAction(new Computable<PsiElement>() {
@Override
public PsiElement compute() {
return PomService.convertToPsi(psiTarget);
}
}), options.searchScope, false, options.fastTrack))
.search(new ReferencesSearch.SearchParameters(ReadAction.compute(() -> PomService.convertToPsi(psiTarget)), options.searchScope, false, options.fastTrack))
.forEach(new ReadActionProcessor<PsiReference>() {
@Override
public boolean processInReadAction(final PsiReference reference) {
@@ -256,7 +252,7 @@ public class JavaFindUsagesHelper {
addClassesInPackage(aPackage, options.isIncludeSubpackages, classes);
for (final PsiClass aClass : classes) {
if (progress != null) {
String name = ApplicationManager.getApplication().runReadAction((Computable<String>)aClass::getName);
String name = ReadAction.compute(aClass::getName);
progress.setText(FindBundle.message("find.searching.for.references.to.class.progress", name));
progress.checkCanceled();
}
@@ -279,7 +275,7 @@ public class JavaFindUsagesHelper {
}
private static void addClassesInPackage(@NotNull final PsiPackage aPackage, boolean includeSubpackages, @NotNull List<PsiClass> array) {
PsiDirectory[] dirs = ApplicationManager.getApplication().runReadAction((Computable<PsiDirectory[]>)aPackage::getDirectories);
PsiDirectory[] dirs = ReadAction.compute(aPackage::getDirectories);
for (PsiDirectory dir : dirs) {
addClassesInDirectory(dir, includeSubpackages, array);
}
@@ -305,13 +301,12 @@ public class JavaFindUsagesHelper {
@NotNull final JavaClassFindUsagesOptions options,
@NotNull final Processor<UsageInfo> processor) {
if (options.isIncludeInherited) {
final PsiMethod[] methods = ApplicationManager.getApplication().runReadAction((Computable<PsiMethod[]>)aClass::getAllMethods);
final PsiMethod[] methods = ReadAction.compute(aClass::getAllMethods);
for(int i = 0; i < methods.length; i++){
final PsiMethod method = methods[i];
// filter overridden methods
final int finalI = i;
final PsiClass methodClass =
ApplicationManager.getApplication().runReadAction((Computable<PsiClass>)() -> {
final PsiClass methodClass = ReadAction.compute(() -> {
MethodSignature methodSignature = method.getSignature(PsiSubstitutor.EMPTY);
for (int j = 0; j < finalI; j++) {
if (methodSignature.equals(methods[j].getSignature(PsiSubstitutor.EMPTY))) return null;
@@ -319,8 +314,7 @@ public class JavaFindUsagesHelper {
return method.getContainingClass();
});
if (methodClass == null) continue;
boolean equivalent = ApplicationManager.getApplication().runReadAction(
(Computable<Boolean>)() -> manager.areElementsEquivalent(methodClass, aClass));
boolean equivalent = ReadAction.compute(() -> manager.areElementsEquivalent(methodClass, aClass));
if (equivalent){
if (!addElementUsages(method, options, processor)) return false;
}
@@ -337,7 +331,7 @@ public class JavaFindUsagesHelper {
}
}
else {
PsiMethod[] methods = ApplicationManager.getApplication().runReadAction((Computable<PsiMethod[]>)aClass::getMethods);
PsiMethod[] methods = ReadAction.compute(aClass::getMethods);
for (PsiMethod method : methods) {
if (!addElementUsages(method, options, processor)) return false;
}
@@ -350,21 +344,20 @@ public class JavaFindUsagesHelper {
@NotNull final JavaClassFindUsagesOptions options,
@NotNull final Processor<UsageInfo> processor) {
if (options.isIncludeInherited) {
final PsiField[] fields = ApplicationManager.getApplication().runReadAction((Computable<PsiField[]>)aClass::getAllFields);
final PsiField[] fields = ReadAction.compute(aClass::getAllFields);
for (int i = 0; i < fields.length; i++) {
final PsiField field = fields[i];
// filter hidden fields
final int finalI = i;
final PsiClass fieldClass =
ApplicationManager.getApplication().runReadAction((Computable<PsiClass>)() -> {
ReadAction.compute(() -> {
for (int j = 0; j < finalI; j++) {
if (Comparing.strEqual(field.getName(), fields[j].getName())) return null;
}
return field.getContainingClass();
});
if (fieldClass == null) continue;
boolean equivalent = ApplicationManager.getApplication().runReadAction(
(Computable<Boolean>)() -> manager.areElementsEquivalent(fieldClass, aClass));
boolean equivalent = ReadAction.compute(() -> manager.areElementsEquivalent(fieldClass, aClass));
if (equivalent) {
if (!addElementUsages(fields[i], options, processor)) return false;
}
@@ -380,7 +373,7 @@ public class JavaFindUsagesHelper {
}
}
else {
PsiField[] fields = ApplicationManager.getApplication().runReadAction((Computable<PsiField[]>)aClass::getFields);
PsiField[] fields = ReadAction.compute(aClass::getFields);
for (PsiField field : fields) {
if (!addElementUsages(field, options, processor)) return false;
}
@@ -462,7 +455,7 @@ public class JavaFindUsagesHelper {
@NotNull final Processor<UsageInfo> processor) {
final SearchScope searchScope = options.searchScope;
final PsiClass[] parentClass = new PsiClass[1];
if (element instanceof PsiMethod && ApplicationManager.getApplication().runReadAction((Computable<Boolean>)() -> {
if (element instanceof PsiMethod && ReadAction.compute(() -> {
PsiMethod method = (PsiMethod)element;
parentClass[0] = method.getContainingClass();
return method.isConstructor();