java & python: use effective search scope instead of the user-defined one

add read action
This commit is contained in:
peter
2014-12-02 18:31:06 +01:00
parent 0fdedec5ea
commit 619c2df766
3 changed files with 28 additions and 5 deletions
@@ -4,6 +4,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.QueryExecutorBase;
import com.intellij.openapi.util.Computable;
import com.intellij.psi.*;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull;
@@ -13,7 +14,7 @@ import org.jetbrains.annotations.NotNull;
*/
public class ConstructorReferencesSearcher extends QueryExecutorBase<PsiReference, ReferencesSearch.SearchParameters> {
@Override
public void processQuery(@NotNull ReferencesSearch.SearchParameters p, @NotNull Processor<PsiReference> consumer) {
public void processQuery(@NotNull final ReferencesSearch.SearchParameters p, @NotNull Processor<PsiReference> consumer) {
final PsiElement element = p.getElementToSearch();
if (!(element instanceof PsiMethod)) {
return;
@@ -31,7 +32,13 @@ public class ConstructorReferencesSearcher extends QueryExecutorBase<PsiReferenc
if (manager[0] == null) {
return;
}
SearchScope scope = ApplicationManager.getApplication().runReadAction(new Computable<SearchScope>() {
@Override
public SearchScope compute() {
return p.getEffectiveSearchScope();
}
});
new ConstructorReferencesSearchHelper(manager[0])
.processConstructorReferences(consumer, method, aClass, p.getEffectiveSearchScope(), p.isIgnoreAccessScope(), true, p.getOptimizer());
.processConstructorReferences(consumer, method, aClass, scope, p.isIgnoreAccessScope(), true, p.getOptimizer());
}
}
@@ -18,6 +18,7 @@ package com.intellij.psi.impl.search;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.Computable;
import com.intellij.psi.*;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.Processor;
@@ -50,7 +51,13 @@ public class PsiAnnotationMethodReferencesSearcher implements QueryExecutor<PsiR
}
});
if (containingClass != null) {
final Query<PsiReference> query = ReferencesSearch.search(containingClass, p.getEffectiveSearchScope(), p.isIgnoreAccessScope());
SearchScope scope = ApplicationManager.getApplication().runReadAction(new Computable<SearchScope>() {
@Override
public SearchScope compute() {
return p.getEffectiveSearchScope();
}
});
final Query<PsiReference> query = ReferencesSearch.search(containingClass, scope, p.isIgnoreAccessScope());
return query.forEach(createImplicitDefaultAnnotationMethodConsumer(consumer));
}
}