From 2ad9f23ea032c55835bdea7c2a5a24a801ab7380 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 24 Jan 2017 15:42:55 +0300 Subject: [PATCH] add read action; avoid casts due to overload resolution rules --- .../find/findUsages/JavaFindUsagesHelper.java | 53 ++++++++----------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java b/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java index 8a3c0ac797bd..64b795c3b15e 100644 --- a/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java +++ b/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java @@ -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 getElementNames(@NotNull final PsiElement element) { if (element instanceof PsiDirectory) { // normalize a directory to a corresponding package - PsiPackage aPackage = ApplicationManager.getApplication().runReadAction( - (Computable)() -> 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 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)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)() -> 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)() -> ThrowSearchUtil.isSearchable(element)); + final Boolean isSearchable = ReadAction.compute(() -> ThrowSearchUtil.isSearchable(element)); if (!isSearchable && options.isSearchForTextOccurrences && options.searchScope instanceof GlobalSearchScope) { Collection stringsToSearch = ApplicationManager.getApplication().runReadAction( (NullableComputable>)() -> 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() { - @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() { @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)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 array) { - PsiDirectory[] dirs = ApplicationManager.getApplication().runReadAction((Computable)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 processor) { if (options.isIncludeInherited) { - final PsiMethod[] methods = ApplicationManager.getApplication().runReadAction((Computable)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)() -> { + 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)() -> 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)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 processor) { if (options.isIncludeInherited) { - final PsiField[] fields = ApplicationManager.getApplication().runReadAction((Computable)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)() -> { + 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)() -> 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)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 processor) { final SearchScope searchScope = options.searchScope; final PsiClass[] parentClass = new PsiClass[1]; - if (element instanceof PsiMethod && ApplicationManager.getApplication().runReadAction((Computable)() -> { + if (element instanceof PsiMethod && ReadAction.compute(() -> { PsiMethod method = (PsiMethod)element; parentClass[0] = method.getContainingClass(); return method.isConstructor();