Correct scope declarations in completion for code fragments

This commit is contained in:
Valentin Kipyatkov
2015-10-29 19:35:17 +03:00
parent 5a69a17ab0
commit 44e56c4b93
2 changed files with 8 additions and 5 deletions
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtPsiFactory
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingTraceContext
import org.jetbrains.kotlin.resolve.ImportPath
@@ -93,8 +90,12 @@ public fun ResolutionFacade.resolveImportReference(
// this scope can't be used to search for kotlin declarations in index in order to resolve in that case
// see com.intellij.psi.impl.file.impl.ResolveScopeManagerImpl.getInherentResolveScope
public fun getResolveScope(file: KtFile): GlobalSearchScope {
if (file is KtCodeFragment) {
file.forcedResolveScope?.let { return it }
}
return when (file.getModuleInfo()) {
is ModuleSourceInfo -> file.getResolveScope()
is ModuleSourceInfo -> file.resolveScope
else -> GlobalSearchScope.EMPTY_SCOPE
}
}
@@ -22,6 +22,7 @@ import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.idea.completion.test.AbstractJvmBasicCompletionTest
import org.jetbrains.kotlin.idea.completion.test.testCompletion
import org.jetbrains.kotlin.idea.test.JdkAndMockLibraryProjectDescriptor
@@ -78,6 +79,7 @@ public class CodeFragmentCompletionInLibraryTest : AbstractJvmBasicCompletionTes
fragmentText,
KotlinCodeFragmentFactory.getContextElement(fooFunctionFromLibrary.getBodyExpression())
)
codeFragment.forceResolveScope(GlobalSearchScope.allScope(project))
myFixture.configureFromExistingVirtualFile(codeFragment.getVirtualFile())
}