From 44e56c4b93ecdf22713ac0b22864dd35028343ba Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 29 Oct 2015 19:35:17 +0300 Subject: [PATCH] Correct scope declarations in completion for code fragments --- .../kotlin/idea/caches/resolve/resolutionApi.kt | 11 ++++++----- .../evaluate/CodeFragmentCompletionInLibraryTest.kt | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt index 59171a06406..646de8946bc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt @@ -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 } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt index 9838fef68b3..436c8af575b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/CodeFragmentCompletionInLibraryTest.kt @@ -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()) }