mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
add read action; avoid casts due to overload resolution rules
This commit is contained in:
+23
-30
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user