@NotNull public SearchScope intersectWith(@NotNull LocalSearchScope localScope2) { PsiElement[] elements2 = localScope2.getScope(); List<PsiElement> result = new ArrayList<PsiElement>(elements2.length); for (final PsiElement element2 : elements2) { if (PsiSearchScopeUtil.isInScope(this, element2)) { result.add(element2); } } return result.isEmpty() ? EMPTY_SCOPE : new LocalSearchScope( result.toArray(new PsiElement[result.size()]), null, localScope2.isIgnoreInjectedPsi()); }
public SearchScope union(LocalSearchScope scope2) { if (equals(scope2)) return this; PsiElement[] elements1 = getScope(); PsiElement[] elements2 = scope2.getScope(); boolean[] united = new boolean[elements2.length]; List<PsiElement> result = new ArrayList<PsiElement>(); loop1: for (final PsiElement element1 : elements1) { for (int j = 0; j < elements2.length; j++) { final PsiElement element2 = elements2[j]; final PsiElement unionElement = scopeElementsUnion(element1, element2); if (unionElement != null && unionElement.getContainingFile() != null) { result.add(unionElement); united[j] = true; break loop1; } } result.add(element1); } for (int i = 0; i < united.length; i++) { final boolean b = united[i]; if (!b) { result.add(elements2[i]); } } return new LocalSearchScope(PsiUtilCore.toPsiElementArray(result)); }
@NotNull private static Set<VirtualFile> getLocalScopeFiles(@NotNull LocalSearchScope scope) { Set<VirtualFile> files = new LinkedHashSet<VirtualFile>(); for (PsiElement element : scope.getScope()) { PsiFile file = element.getContainingFile(); if (file != null) { ContainerUtil.addIfNotNull(files, file.getVirtualFile()); } } return files; }
@NotNull public GlobalSearchScope union(@NotNull final LocalSearchScope scope) { PsiElement[] localScopeElements = scope.getScope(); if (localScopeElements.length == 0) { return this; } return new GlobalSearchScope(localScopeElements[0].getProject()) { @Override public boolean contains(@NotNull VirtualFile file) { return GlobalSearchScope.this.contains(file) || scope.isInScope(file); } @Override public int compare(@NotNull VirtualFile file1, @NotNull VirtualFile file2) { return GlobalSearchScope.this.contains(file1) && GlobalSearchScope.this.contains(file2) ? GlobalSearchScope.this.compare(file1, file2) : 0; } @Override public boolean isSearchInModuleContent(@NotNull Module aModule) { return GlobalSearchScope.this.isSearchInModuleContent(aModule); } @Override public boolean isSearchOutsideRootModel() { return GlobalSearchScope.this.isSearchOutsideRootModel(); } @Override public boolean isSearchInLibraries() { return GlobalSearchScope.this.isSearchInLibraries(); } @NonNls @Override public String toString() { return "UnionToLocal: (" + GlobalSearchScope.this + ", " + scope + ")"; } }; }