Replaced JetScopeUtils.getResolutionScope() with more correct utility

This commit is contained in:
Valentin Kipyatkov
2015-06-19 21:04:43 +03:00
parent 776d198ea5
commit c5f0fbf327
7 changed files with 55 additions and 71 deletions
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper
import org.jetbrains.kotlin.idea.core.formatter.JetCodeStyleSettings
import org.jetbrains.kotlin.idea.core.getResolutionScope
import org.jetbrains.kotlin.idea.core.refactoring.EmptyValidator
import org.jetbrains.kotlin.idea.core.refactoring.JetNameSuggester
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
@@ -77,7 +78,7 @@ class ParameterNameAndTypeCompletion(
public fun addFromImportedClasses(position: PsiElement, bindingContext: BindingContext, visibilityFilter: (DeclarationDescriptor) -> Boolean) {
for ((i, prefixMatcher) in allPrefixMatchers.withIndex()) {
val resolutionScope = position.getResolutionScope(bindingContext)
val resolutionScope = position.getResolutionScope(bindingContext, resolutionFacade)
val classifiers = resolutionScope.getDescriptorsFiltered(DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS, prefixMatcher.toClassifierNamePrefixMatcher().asNameFilter())
for (classifier in classifiers) {
@@ -90,27 +91,6 @@ class ParameterNameAndTypeCompletion(
}
}
private fun PsiElement.getResolutionScope(bindingContext: BindingContext): JetScope {
for (parent in parentsWithSelf) {
if (parent is JetExpression) {
val scope = bindingContext[BindingContext.RESOLUTION_SCOPE, parent]
if (scope != null) return scope
}
if (parent is JetClassOrObject) {
val classDescriptor = bindingContext[BindingContext.CLASS, parent] as? ClassDescriptorWithResolutionScopes
if (classDescriptor != null) {
return classDescriptor.getScopeForMemberDeclarationResolution()
}
}
if (parent is JetFile) {
return resolutionFacade.getFileTopLevelScope(parent)
}
}
error("Not in JetFile")
}
public fun addFromAllClasses(parameters: CompletionParameters, indicesHelper: KotlinIndicesHelper) {
for ((i, prefixMatcher) in allPrefixMatchers.withIndex()) {
AllClassesCompletion(parameters, indicesHelper, prefixMatcher.toClassifierNamePrefixMatcher(), { !it.isSingleton() })