Debugger: Support DebugLabel descriptors in completion

This commit is contained in:
Yan Zhulanow
2019-02-15 03:55:37 +03:00
parent bff3f28a72
commit 592083bc5b
2 changed files with 37 additions and 1 deletions
@@ -25,7 +25,9 @@ import org.jetbrains.kotlin.idea.resolve.ResolutionFacade
import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver
import org.jetbrains.kotlin.idea.util.ShadowedDeclarationsFilter
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtCodeFragment
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
import org.jetbrains.kotlin.psi.externalDescriptors
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DataClassDescriptorResolver
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindExclude
@@ -141,13 +143,30 @@ class ReferenceVariantsCollector(
useReceiverType = runtimeReceiver?.type)
}
val basicNameFilter = descriptorNameFilter.toNameFilter()
val (descriptorKindFilter, additionalPropertyNameFilter) = filterConfiguration
var basicVariants = getReferenceVariants(descriptorKindFilter, descriptorNameFilter.toNameFilter())
var runDistinct = false
var basicVariants = getReferenceVariants(descriptorKindFilter, basicNameFilter)
if (additionalPropertyNameFilter != null) {
basicVariants += getReferenceVariants(descriptorKindFilter.intersect(DescriptorKindFilter.VARIABLES), additionalPropertyNameFilter.toNameFilter())
runDistinct = true
}
val containingCodeFragment = nameExpression.containingKtFile as? KtCodeFragment
if (containingCodeFragment != null) {
val externalDescriptors = containingCodeFragment.externalDescriptors
if (externalDescriptors != null) {
basicVariants += externalDescriptors
.filter { descriptorKindFilter.accepts(it) && basicNameFilter(it.name) }
}
}
if (runDistinct) {
basicVariants = basicVariants.distinct()
}
return ReferenceVariants(filterConfiguration.filterVariants(basicVariants).toHashSet(), emptyList())
}