Added read action wrapper

#KT-4268 Fixed
This commit is contained in:
Alexey Sedunov
2013-12-02 15:30:33 +04:00
parent 4f017df237
commit f5f394cf15
@@ -141,41 +141,48 @@ public abstract class KotlinFindMemberUsagesHandler<T extends JetNamedDeclaratio
@Override @Override
protected boolean searchReferences( protected boolean searchReferences(
@NotNull final PsiElement element, @NotNull final Processor<UsageInfo> processor, @NotNull FindUsagesOptions options @NotNull final PsiElement element, @NotNull final Processor<UsageInfo> processor, @NotNull final FindUsagesOptions options
) { ) {
KotlinCallableFindUsagesOptions kotlinOptions = (KotlinCallableFindUsagesOptions) options; return ApplicationManager.getApplication().runReadAction(
new Computable<Boolean>() {
@Override
public Boolean compute() {
KotlinCallableFindUsagesOptions kotlinOptions = (KotlinCallableFindUsagesOptions) options;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
UsagesSearchRequest request = UsagesSearchRequest request =
getSearchHelper(kotlinOptions).newRequest(FindUsagesPackage.toSearchTarget(options, (T) element, true)); getSearchHelper(kotlinOptions).newRequest(FindUsagesPackage.toSearchTarget(options, (T) element, true));
for (PsiReference ref : UsagesSearch.instance$.search(request)) { for (PsiReference ref : UsagesSearch.instance$.search(request)) {
processUsage(processor, ref); processUsage(processor, ref);
} }
Iterator<PsiMethod> lightMethods = ApplicationManager.getApplication().runReadAction(new Computable<Iterator<PsiMethod>>() { Iterator<PsiMethod> lightMethods = ApplicationManager.getApplication().runReadAction(new Computable<Iterator<PsiMethod>>() {
@Override @Override
public Iterator<PsiMethod> compute() { public Iterator<PsiMethod> compute() {
return getLightMethods((JetNamedDeclaration) element).iterator(); return getLightMethods((JetNamedDeclaration) element).iterator();
} }
}); });
if (kotlinOptions.getSearchOverrides()) { if (kotlinOptions.getSearchOverrides()) {
while (lightMethods.hasNext()) { while (lightMethods.hasNext()) {
OverridingMethodsSearch.search(lightMethods.next(), options.searchScope, true).forEach( OverridingMethodsSearch.search(lightMethods.next(), options.searchScope, true).forEach(
new PsiElementProcessorAdapter<PsiMethod>( new PsiElementProcessorAdapter<PsiMethod>(
new PsiElementProcessor<PsiMethod>() { new PsiElementProcessor<PsiMethod>() {
@Override @Override
public boolean execute(@NotNull PsiMethod element) { public boolean execute(@NotNull PsiMethod element) {
return processUsage(processor, element.getNavigationElement()); return processUsage(processor, element.getNavigationElement());
} }
} }
) )
); );
} }
} }
return true; return true;
}
}
);
} }
@Override @Override