ask each intermediate context file for a forced resolve scope (IDEA-136304)

This commit is contained in:
peter
2015-02-10 21:45:10 +01:00
parent 989e1a18cb
commit 3baf7f1f86
2 changed files with 21 additions and 8 deletions
@@ -1,6 +1,7 @@
package com.intellij.psi.resolve;
import com.intellij.psi.*;
import com.intellij.psi.impl.search.JavaSourceFilterScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.ResolveTestCase;
@@ -45,4 +46,15 @@ public class ResolveInCodeFragmentTest extends ResolveTestCase {
private PsiReference configure() throws Exception {
return configureByFile("codeFragment/" + getTestName(false) + ".java");
}
public void testResolveScopeWithFragmentContext() throws Exception {
PsiElement physical = configureByFile("codeFragment/LocalVariable.java").getElement();
JavaCodeFragment fragment = JavaCodeFragmentFactory.getInstance(myProject)
.createExpressionCodeFragment("ref", physical, null, true);
fragment.forceResolveScope(new JavaSourceFilterScope(physical.getResolveScope()));
assertFalse(fragment.getResolveScope().equals(physical.getResolveScope()));
PsiExpression lightExpr = JavaPsiFacade.getElementFactory(myProject).createExpressionFromText("xxx.xxx", fragment);
assertEquals(lightExpr.getResolveScope(), fragment.getResolveScope());
}
}
@@ -26,7 +26,6 @@ import com.intellij.openapi.vfs.VirtualFileWithId;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.impl.ResolveScopeManager;
import com.intellij.psi.impl.source.resolve.FileContextUtil;
import com.intellij.psi.search.DelegatingGlobalSearchScope;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.SearchScope;
@@ -145,15 +144,17 @@ public class ResolveScopeManagerImpl extends ResolveScopeManager {
if (forcedScope != null) {
return forcedScope;
}
final PsiElement context = containingFile.getContext();
if (context == null) {
return GlobalSearchScope.allScope(myProject);
}
return getResolveScope(context);
}
contextFile = containingFile != null ? FileContextUtil.getContextFile(containingFile) : null;
if (contextFile == null) {
if (containingFile != null) {
PsiElement context = containingFile.getContext();
if (context != null) {
return getResolveScope(context);
}
}
contextFile = containingFile;
if (containingFile == null) {
return GlobalSearchScope.allScope(myProject);
}
else if (contextFile instanceof FileResolveScopeProvider) {