From 920f7f7a9c410d292e57eac6f81e5b5fa2441f09 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 16 Mar 2016 10:56:55 +0100 Subject: [PATCH] light file's resolve scope should include that file (IDEA-152676) --- .../psi/resolve/ResolveInCodeFragmentTest.java | 14 ++++++++++++++ .../impl/file/impl/ResolveScopeManagerImpl.java | 6 +++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java index f108ad67742b..bb3bbf783834 100644 --- a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveInCodeFragmentTest.java @@ -1,5 +1,6 @@ package com.intellij.psi.resolve; +import com.intellij.ide.highlighter.JavaFileType; import com.intellij.psi.*; import com.intellij.psi.impl.search.JavaSourceFilterScope; import com.intellij.psi.util.PsiTreeUtil; @@ -57,4 +58,17 @@ public class ResolveInCodeFragmentTest extends ResolveTestCase { PsiExpression lightExpr = JavaPsiFacade.getElementFactory(myProject).createExpressionFromText("xxx.xxx", fragment); assertEquals(lightExpr.getResolveScope(), fragment.getResolveScope()); } + + public void testClassHierarchyInNonPhysicalFile() { + PsiFile file = PsiFileFactory.getInstance(myProject).createFileFromText("a.java", JavaFileType.INSTANCE, + "class Parent { void foo( ); }\n" + + "class Child extends Parent { }\n" + + "class User {\n" + + " void caller() { new Child().foo(); }\n" + + "}", 0, true); + PsiReference ref = file.findReferenceAt(file.getText().indexOf("foo()")); + assertNotNull(ref); + assertTrue(ref.getElement().getResolveScope().contains(file.getViewProvider().getVirtualFile())); + assertInstanceOf(ref.resolve(), PsiMethod.class); + } } diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java index 079c724ca98e..c317bf525be8 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java @@ -91,7 +91,11 @@ public class ResolveScopeManagerImpl extends ResolveScopeManager { } if (!projectFileIndex.isInLibrarySource(vFile) && !projectFileIndex.isInLibraryClasses(vFile)) { - return GlobalSearchScope.allScope(myProject); + GlobalSearchScope allScope = GlobalSearchScope.allScope(myProject); + if (!allScope.contains(vFile)) { + return GlobalSearchScope.fileScope(myProject, vFile).uniteWith(allScope); + } + return allScope; } return LibraryScopeCache.getInstance(myProject).getLibraryScope(projectFileIndex.getOrderEntriesForFile(vFile));