mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ask each intermediate context file for a forced resolve scope (IDEA-136304)
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
+9
-8
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user