From 8ae15b747cdae238ed4b7b83add03e6acdb1cef6 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 8 Aug 2013 22:01:18 +0400 Subject: [PATCH] ReferenceSearch: fix non-physical LocalSearchScope case --- .../intellij/psi/search/LocalSearchScope.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/platform/core-api/src/com/intellij/psi/search/LocalSearchScope.java b/platform/core-api/src/com/intellij/psi/search/LocalSearchScope.java index d7546e76ac02..0f556dc0bd0c 100644 --- a/platform/core-api/src/com/intellij/psi/search/LocalSearchScope.java +++ b/platform/core-api/src/com/intellij/psi/search/LocalSearchScope.java @@ -16,6 +16,7 @@ package com.intellij.psi.search; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; @@ -148,9 +149,25 @@ public class LocalSearchScope extends SearchScope { if (scope2 instanceof LocalSearchScope) { return intersectWith((LocalSearchScope)scope2); } + LocalSearchScope nonPhysicalScope = tryIntersectNonPhysicalWith((GlobalSearchScope)scope2); + if (nonPhysicalScope != null) return nonPhysicalScope; return ((GlobalSearchScope)scope2).intersectWith(this); } + @Nullable + private LocalSearchScope tryIntersectNonPhysicalWith(@NotNull GlobalSearchScope scope) { + Project project = scope.getProject(); + for (PsiElement element : myScope) { + PsiFile containingFile = element.getContainingFile(); + if (containingFile == null) continue; + if (containingFile.getViewProvider().isPhysical()) return null; + if (project != null && project != containingFile.getProject()) { + return EMPTY; + } + } + return this; + } + @Nullable private static PsiElement intersectScopeElements(PsiElement element1, PsiElement element2) { if (PsiTreeUtil.isContextAncestor(element1, element2, false)) return element2;