Java 类com.intellij.psi.search.PsiSearchScopeUtil 实例源码
项目:intellij-ce-playground
文件:PsiPackageImpl.java
@NotNull
@Override
public PsiClass[] findClassByShortName(@NotNull String name, @NotNull final GlobalSearchScope scope) {
PsiClass[] allClasses = getCachedClassesByName(name, scope);
if (allClasses.length == 0) return allClasses;
if (allClasses.length == 1) {
return PsiSearchScopeUtil.isInScope(scope, allClasses[0]) ? allClasses : PsiClass.EMPTY_ARRAY;
}
PsiClass[] array = ContainerUtil.findAllAsArray(allClasses, new Condition<PsiClass>() {
@Override
public boolean value(PsiClass aClass) {
return PsiSearchScopeUtil.isInScope(scope, aClass);
}
});
Arrays.sort(array, new Comparator<PsiClass>() {
@Override
public int compare(PsiClass o1, PsiClass o2) {
VirtualFile file1 = o1.getContainingFile().getVirtualFile();
VirtualFile file2 = o2.getContainingFile().getVirtualFile();
if (file1 == null) return file2 == null ? 0 : -1;
if (file2 == null) return 1;
return scope.compare(file2, file1);
}
});
return array;
}
项目:consulo-java
文件:ScopedClassHierarchy.java
@NotNull
private List<PsiClassType.ClassResolveResult> calcImmediateSupersWithCapturing()
{
List<PsiClassType.ClassResolveResult> list;
list = ContainerUtil.newArrayList();
for(PsiClassType type : myPlaceClass.getSuperTypes())
{
PsiClassType corrected = PsiClassImplUtil.correctType(type, myResolveScope);
if(corrected == null)
{
continue;
}
PsiClassType.ClassResolveResult result = ((PsiClassType) PsiUtil.captureToplevelWildcards(corrected, myPlaceClass)).resolveGenerics();
PsiClass superClass = result.getElement();
if(superClass == null || !PsiSearchScopeUtil.isInScope(myResolveScope, superClass))
{
continue;
}
list.add(result);
}
return list;
}
项目:intellij-ce-playground
文件:DefaultSymbolNavigationContributor.java
private static boolean hasSuperMethodCandidates(final PsiMethod method,
final GlobalSearchScope scope,
final Condition<PsiMember> qualifiedMatcher) {
if (method.hasModifierProperty(PsiModifier.PRIVATE) || method.hasModifierProperty(PsiModifier.STATIC)) return false;
final PsiClass containingClass = method.getContainingClass();
if (containingClass == null) return false;
final int parametersCount = method.getParameterList().getParametersCount();
return !InheritanceUtil.processSupers(containingClass, false, new Processor<PsiClass>() {
@Override
public boolean process(PsiClass superClass) {
if (PsiSearchScopeUtil.isInScope(scope, superClass)) {
for (PsiMethod candidate : superClass.findMethodsByName(method.getName(), false)) {
if (parametersCount == candidate.getParameterList().getParametersCount() &&
!candidate.hasModifierProperty(PsiModifier.PRIVATE) &&
!candidate.hasModifierProperty(PsiModifier.STATIC) &&
qualifiedMatcher.value(candidate)) {
return false;
}
}
}
return true;
}
});
}
项目:intellij-ce-playground
文件:DefaultSymbolNavigationContributor.java
private static boolean hasSuperMethod(final PsiMethod method, final GlobalSearchScope scope, final Condition<PsiMember> qualifiedMatcher) {
if (!hasSuperMethodCandidates(method, scope, qualifiedMatcher)) {
return false;
}
for (HierarchicalMethodSignature signature : method.getHierarchicalMethodSignature().getSuperSignatures()) {
PsiMethod superMethod = signature.getMethod();
if (PsiSearchScopeUtil.isInScope(scope, superMethod) && qualifiedMatcher.value(superMethod)) {
return true;
}
}
return false;
}
项目:intellij-ce-playground
文件:EnumTypeConversionRule.java
@Override
public TypeConversionDescriptorBase findConversion(PsiType from,
PsiType to,
PsiMember member,
PsiExpression context,
TypeMigrationLabeler labeler) {
final PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(context, PsiMethodCallExpression.class, false);
if (callExpression != null) {
final PsiMethod resolved = callExpression.resolveMethod();
if (resolved != null) {
final SearchScope searchScope = labeler.getRules().getSearchScope();
if (!PsiSearchScopeUtil.isInScope(searchScope, resolved)) {
return null;
}
}
}
final PsiField field = PsiTreeUtil.getParentOfType(context, PsiField.class);
if (field != null &&
!myEnumConstants.contains(field) &&
field.hasModifierProperty(PsiModifier.STATIC) &&
field.hasModifierProperty(PsiModifier.FINAL) &&
field.hasInitializer()) {
return null;
}
final PsiClass toClass = PsiUtil.resolveClassInType(to);
if (toClass != null && toClass.isEnum()) {
final PsiMethod[] constructors = toClass.getConstructors();
if (constructors.length == 1) {
final PsiMethod constructor = constructors[0];
final PsiParameter[] parameters = constructor.getParameterList().getParameters();
if (parameters.length == 1) {
if (TypeConversionUtil.isAssignable(parameters[0].getType(), from)) {
return new TypeConversionDescriptorBase();
}
}
}
}
return null;
}
项目:intellij-ce-playground
文件:LanguageResolvingUtil.java
private static List<LanguageDefinition> collectLanguageDefinitions(final ConvertContext context) {
final PsiClass languageClass = DomJavaUtil.findClass(Language.class.getName(), context.getInvocationElement());
if (languageClass == null) {
return Collections.emptyList();
}
final Project project = context.getProject();
final GlobalSearchScope projectProductionScope = GlobalSearchScopesCore.projectProductionScope(project);
final Collection<PsiClass> allLanguages =
CachedValuesManager.getCachedValue(languageClass, new CachedValueProvider<Collection<PsiClass>>() {
@Nullable
@Override
public Result<Collection<PsiClass>> compute() {
GlobalSearchScope allScope = projectProductionScope.union(ProjectScope.getLibrariesScope(project));
return Result.create(ClassInheritorsSearch.search(languageClass, allScope, true).findAll(), PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT);
}
});
;
final List<LanguageDefinition> libraryDefinitions = collectLibraryLanguages(context, allLanguages);
final Collection<PsiClass> projectLanguages = ContainerUtil.filter(allLanguages, new Condition<PsiClass>() {
@Override
public boolean value(PsiClass aClass) {
return PsiSearchScopeUtil.isInScope(projectProductionScope, aClass);
}
});
final List<LanguageDefinition> projectDefinitions = collectProjectLanguages(projectLanguages, libraryDefinitions);
final List<LanguageDefinition> all = new ArrayList<LanguageDefinition>(libraryDefinitions);
all.addAll(projectDefinitions);
return all;
}
项目:tools-idea
文件:EnumTypeConversionRule.java
@Override
public TypeConversionDescriptorBase findConversion(PsiType from,
PsiType to,
PsiMember member,
PsiExpression context,
TypeMigrationLabeler labeler) {
final PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(context, PsiMethodCallExpression.class, false);
if (callExpression != null) {
final PsiMethod resolved = callExpression.resolveMethod();
if (resolved != null) {
final SearchScope searchScope = labeler.getRules().getSearchScope();
if (!PsiSearchScopeUtil.isInScope(searchScope, resolved)) {
return null;
}
}
}
final PsiField field = PsiTreeUtil.getParentOfType(context, PsiField.class);
if (field != null &&
!myEnumConstants.contains(field) &&
field.hasModifierProperty(PsiModifier.STATIC) &&
field.hasModifierProperty(PsiModifier.FINAL) &&
field.hasInitializer()) {
return null;
}
final PsiClass toClass = PsiUtil.resolveClassInType(to);
if (toClass != null && toClass.isEnum()) {
final PsiMethod[] constructors = toClass.getConstructors();
if (constructors.length == 1) {
final PsiMethod constructor = constructors[0];
final PsiParameter[] parameters = constructor.getParameterList().getParameters();
if (parameters.length == 1) {
if (TypeConversionUtil.isAssignable(parameters[0].getType(), from)) {
return new TypeConversionDescriptorBase();
}
}
}
}
return null;
}
项目:consulo-java
文件:EnumTypeConversionRule.java
@Override
public TypeConversionDescriptorBase findConversion(PsiType from, PsiType to, PsiMember member, PsiExpression context, TypeMigrationLabeler labeler)
{
final PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(context, PsiMethodCallExpression.class, false);
if(callExpression != null)
{
final PsiMethod resolved = callExpression.resolveMethod();
if(resolved != null)
{
final SearchScope searchScope = labeler.getRules().getSearchScope();
if(!PsiSearchScopeUtil.isInScope(searchScope, resolved))
{
return null;
}
}
}
final PsiField field = PsiTreeUtil.getParentOfType(context, PsiField.class);
if(field != null && !myEnumConstants.contains(field) && field.hasModifierProperty(PsiModifier.STATIC) && field.hasModifierProperty(PsiModifier.FINAL) && field.hasInitializer())
{
return null;
}
final PsiClass toClass = PsiUtil.resolveClassInType(to);
if(toClass != null && toClass.isEnum())
{
final PsiMethod[] constructors = toClass.getConstructors();
if(constructors.length == 1)
{
final PsiMethod constructor = constructors[0];
final PsiParameter[] parameters = constructor.getParameterList().getParameters();
if(parameters.length == 1)
{
if(TypeConversionUtil.isAssignable(parameters[0].getType(), from))
{
return new TypeConversionDescriptorBase();
}
}
}
}
return null;
}
项目:consulo-java
文件:TypeMigrationLabeler.java
private static boolean canBeRoot(@Nullable PsiElement element, @NotNull SearchScope migrationScope)
{
if(element == null)
{
return false;
}
return element.isValid() && element.isPhysical() && PsiSearchScopeUtil.isInScope(migrationScope, element);
}
项目:intellij-ce-playground
文件:JavaClassInheritorsSearcher.java
private static void processInheritors(@NotNull final Processor<PsiClass> consumer,
@NotNull final PsiClass baseClass,
@NotNull final SearchScope searchScope,
@NotNull final ClassInheritorsSearch.SearchParameters parameters) {
if (baseClass instanceof PsiAnonymousClass || isFinal(baseClass)) return;
Project project = PsiUtilCore.getProjectInReadAction(baseClass);
if (isJavaLangObject(baseClass)) {
AllClassesSearch.search(searchScope, project, parameters.getNameCondition()).forEach(new Processor<PsiClass>() {
@Override
public boolean process(final PsiClass aClass) {
ProgressManager.checkCanceled();
return isJavaLangObject(aClass) || consumer.process(aClass);
}
});
return;
}
final Ref<PsiClass> currentBase = Ref.create(null);
final Stack<PsiAnchor> stack = new Stack<PsiAnchor>();
final Set<PsiAnchor> processed = ContainerUtil.newTroveSet();
final Processor<PsiClass> processor = new ReadActionProcessor<PsiClass>() {
@Override
public boolean processInReadAction(PsiClass candidate) {
ProgressManager.checkCanceled();
if (parameters.isCheckInheritance() || parameters.isCheckDeep() && !(candidate instanceof PsiAnonymousClass)) {
if (!candidate.isInheritor(currentBase.get(), false)) {
return true;
}
}
if (PsiSearchScopeUtil.isInScope(searchScope, candidate)) {
if (candidate instanceof PsiAnonymousClass) {
return consumer.process(candidate);
}
final String name = candidate.getName();
if (name != null && parameters.getNameCondition().value(name) && !consumer.process(candidate)) {
return false;
}
}
if (parameters.isCheckDeep() && !(candidate instanceof PsiAnonymousClass) && !isFinal(candidate)) {
stack.push(PsiAnchor.create(candidate));
}
return true;
}
};
ApplicationManager.getApplication().runReadAction(new Runnable() {
@Override
public void run() {
stack.push(PsiAnchor.create(baseClass));
}
});
final GlobalSearchScope projectScope = GlobalSearchScope.allScope(project);
while (!stack.isEmpty()) {
ProgressManager.checkCanceled();
final PsiAnchor anchor = stack.pop();
if (!processed.add(anchor)) continue;
PsiClass psiClass = ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() {
@Override
public PsiClass compute() {
return (PsiClass)anchor.retrieve();
}
});
if (psiClass == null) continue;
currentBase.set(psiClass);
if (!DirectClassInheritorsSearch.search(psiClass, projectScope, parameters.isIncludeAnonymous(), false).forEach(processor)) return;
}
}
项目:intellij-ce-playground
文件:ConstructorReferencesSearchHelper.java
private boolean processSuperOrThis(@NotNull PsiClass inheritor,
@NotNull PsiMethod constructor,
final boolean constructorCanBeCalledImplicitly,
@NotNull SearchScope searchScope,
@NotNull Project project,
final boolean isStrictSignatureSearch,
@NotNull String superOrThisKeyword,
@NotNull Processor<PsiReference> processor) {
PsiMethod[] constructors = inheritor.getConstructors();
if (constructors.length == 0 && constructorCanBeCalledImplicitly) {
if (!processImplicitConstructorCall(inheritor, processor, constructor, project, inheritor)) return false;
}
for (PsiMethod method : constructors) {
PsiCodeBlock body = method.getBody();
if (body == null || method == constructor && isStrictSignatureSearch) {
continue;
}
PsiStatement[] statements = body.getStatements();
if (statements.length != 0) {
PsiStatement statement = statements[0];
if (statement instanceof PsiExpressionStatement) {
PsiExpression expr = ((PsiExpressionStatement)statement).getExpression();
if (expr instanceof PsiMethodCallExpression) {
PsiReferenceExpression refExpr = ((PsiMethodCallExpression)expr).getMethodExpression();
if (PsiSearchScopeUtil.isInScope(searchScope, refExpr)) {
if (refExpr.textMatches(superOrThisKeyword)) {
PsiElement referencedElement = refExpr.resolve();
if (referencedElement instanceof PsiMethod) {
PsiMethod constructor1 = (PsiMethod)referencedElement;
boolean match = isStrictSignatureSearch
? myManager.areElementsEquivalent(constructor1, constructor)
: myManager.areElementsEquivalent(constructor.getContainingClass(), constructor1.getContainingClass());
if (match && !processor.process(refExpr)) return false;
}
//as long as we've encountered super/this keyword, no implicit ctr calls are possible here
continue;
}
}
}
}
}
if (constructorCanBeCalledImplicitly) {
if (!processImplicitConstructorCall(method, processor, constructor, project, inheritor)) return false;
}
}
return true;
}
项目:intellij-ce-playground
文件:SearchScope.java
@Override
public boolean value(VirtualFile virtualFile) {
final PsiFile element = manager.findFile(virtualFile);
return element != null && PsiSearchScopeUtil.isInScope(myCustomScope, element);
}
项目:tools-idea
文件:ConstructorReferencesSearchHelper.java
private boolean processSuperOrThis(@NotNull PsiClass inheritor,
@NotNull PsiMethod constructor,
final boolean constructorCanBeCalledImplicitly,
@NotNull SearchScope searchScope,
final boolean isStrictSignatureSearch,
@NotNull String superOrThisKeyword,
@NotNull Processor<PsiReference> processor) {
PsiMethod[] constructors = inheritor.getConstructors();
if (constructors.length == 0 && constructorCanBeCalledImplicitly) {
if (!processImplicitConstructorCall(inheritor, processor, constructor, inheritor)) return false;
}
for (PsiMethod method : constructors) {
PsiCodeBlock body = method.getBody();
if (body == null) {
continue;
}
PsiStatement[] statements = body.getStatements();
if (statements.length != 0) {
PsiStatement statement = statements[0];
if (statement instanceof PsiExpressionStatement) {
PsiExpression expr = ((PsiExpressionStatement)statement).getExpression();
if (expr instanceof PsiMethodCallExpression) {
PsiReferenceExpression refExpr = ((PsiMethodCallExpression)expr).getMethodExpression();
if (PsiSearchScopeUtil.isInScope(searchScope, refExpr)) {
if (refExpr.textMatches(superOrThisKeyword)) {
PsiElement referencedElement = refExpr.resolve();
if (referencedElement instanceof PsiMethod) {
PsiMethod constructor1 = (PsiMethod)referencedElement;
boolean match = isStrictSignatureSearch
? myManager.areElementsEquivalent(constructor1, constructor)
: myManager.areElementsEquivalent(constructor.getContainingClass(), constructor1.getContainingClass());
if (match && !processor.process(refExpr)) return false;
}
//as long as we've encountered super/this keyword, no implicit ctr calls are possible here
continue;
}
}
}
}
}
if (constructorCanBeCalledImplicitly) {
if (!processImplicitConstructorCall(method, processor, constructor, inheritor)) return false;
}
}
return true;
}
项目:tools-idea
文件:SearchScope.java
public boolean value(VirtualFile virtualFile) {
final PsiFile element = manager.findFile(virtualFile);
return element != null && PsiSearchScopeUtil.isInScope(myCustomScope, element);
}
项目:consulo-java
文件:ConstructorReferencesSearchHelper.java
private boolean processSuperOrThis(@NotNull PsiClass inheritor,
@NotNull PsiMethod constructor,
final boolean constructorCanBeCalledImplicitly,
@NotNull SearchScope searchScope,
@NotNull Project project,
final boolean isStrictSignatureSearch,
@NotNull String superOrThisKeyword,
@NotNull Processor<PsiReference> processor)
{
PsiMethod[] constructors = inheritor.getConstructors();
if(constructors.length == 0 && constructorCanBeCalledImplicitly)
{
if(!processImplicitConstructorCall(inheritor, processor, constructor, project, inheritor))
{
return false;
}
}
for(PsiMethod method : constructors)
{
PsiCodeBlock body = method.getBody();
if(body == null || method == constructor && isStrictSignatureSearch)
{
continue;
}
PsiStatement[] statements = body.getStatements();
if(statements.length != 0)
{
PsiStatement statement = statements[0];
if(statement instanceof PsiExpressionStatement)
{
PsiExpression expr = ((PsiExpressionStatement) statement).getExpression();
if(expr instanceof PsiMethodCallExpression)
{
PsiReferenceExpression refExpr = ((PsiMethodCallExpression) expr).getMethodExpression();
if(PsiSearchScopeUtil.isInScope(searchScope, refExpr))
{
if(refExpr.textMatches(superOrThisKeyword))
{
PsiElement referencedElement = refExpr.resolve();
if(referencedElement instanceof PsiMethod)
{
PsiMethod constructor1 = (PsiMethod) referencedElement;
boolean match = isStrictSignatureSearch ? myManager.areElementsEquivalent(constructor1, constructor) : myManager.areElementsEquivalent(constructor
.getContainingClass(), constructor1.getContainingClass());
if(match && !processor.process(refExpr))
{
return false;
}
}
//as long as we've encountered super/this keyword, no implicit ctr calls are possible here
continue;
}
}
}
}
}
if(constructorCanBeCalledImplicitly)
{
if(!processImplicitConstructorCall(method, processor, constructor, project, inheritor))
{
return false;
}
}
}
return true;
}