Code improvements after review
This commit is contained in:
@@ -81,7 +81,7 @@ public class ReferenceVariantsHelper(
|
||||
return resolutionScope.getDescriptorsFiltered(restrictedFilter, nameFilter)
|
||||
}
|
||||
|
||||
val pair = getReferenceVariantsReceiver(expression)
|
||||
val pair = getExplicitReceiverData(expression)
|
||||
if (pair != null) {
|
||||
val (receiverExpression, callType) = pair
|
||||
fun filterIfInfix(descriptor: DeclarationDescriptor)
|
||||
@@ -139,7 +139,7 @@ public class ReferenceVariantsHelper(
|
||||
}
|
||||
|
||||
public fun getReferenceVariantsReceivers(expression: JetSimpleNameExpression): ReceiversData {
|
||||
val receiverData = getReferenceVariantsReceiver(expression)
|
||||
val receiverData = getExplicitReceiverData(expression)
|
||||
if (receiverData != null) {
|
||||
val receiverExpression = receiverData.first
|
||||
val expressionType = context[BindingContext.EXPRESSION_TYPE, receiverExpression] ?: return ReceiversData.Empty
|
||||
@@ -184,7 +184,7 @@ public class ReferenceVariantsHelper(
|
||||
}
|
||||
|
||||
class object {
|
||||
public fun getReferenceVariantsReceiver(expression: JetSimpleNameExpression): Pair<JetExpression, CallType>? {
|
||||
public fun getExplicitReceiverData(expression: JetSimpleNameExpression): Pair<JetExpression, CallType>? {
|
||||
val receiverExpression = expression.getReceiverExpression() ?: return null
|
||||
val parent = expression.getParent()
|
||||
val callType = when (parent) {
|
||||
|
||||
@@ -111,7 +111,7 @@ public class KotlinIndicesHelper(
|
||||
dataFlowInfo: DataFlowInfo) {
|
||||
val matchingNames = fqNames.filter { nameFilter(it.shortName().asString()) }
|
||||
|
||||
val receiverPair = ReferenceVariantsHelper.getReferenceVariantsReceiver(expression)
|
||||
val receiverPair = ReferenceVariantsHelper.getExplicitReceiverData(expression)
|
||||
if (receiverPair != null) {
|
||||
val (receiverExpression, callType) = receiverPair
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ abstract class CompletionSessionBase(protected val configuration: CompletionSess
|
||||
receiverTypes
|
||||
}
|
||||
else {
|
||||
null
|
||||
listOf()
|
||||
}
|
||||
LookupElementFactory(receiverTypes)
|
||||
}
|
||||
|
||||
@@ -40,9 +40,8 @@ import java.util.HashSet
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
|
||||
import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper
|
||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.jet.lang.types.JetType
|
||||
import org.jetbrains.jet.lang.descriptors.VariableDescriptor
|
||||
|
||||
public fun CompletionResultSet.addKotlinSorting(parameters: CompletionParameters): CompletionResultSet {
|
||||
var sorter = CompletionSorter.defaultSorter(parameters, getPrefixMatcher())!!
|
||||
@@ -75,8 +74,7 @@ private object SmartCompletionPriorityWeigher : LookupElementWeigher("kotlin.sma
|
||||
|
||||
private object KindWeigher : LookupElementWeigher("kotlin.kind") {
|
||||
private enum class Weight {
|
||||
localOrParameter
|
||||
property
|
||||
variable // variable or property
|
||||
function
|
||||
keyword
|
||||
default
|
||||
@@ -99,8 +97,7 @@ private object KindWeigher : LookupElementWeigher("kotlin.kind") {
|
||||
is DeclarationDescriptorLookupObject -> {
|
||||
val descriptor = o.descriptor
|
||||
when (descriptor) {
|
||||
is LocalVariableDescriptor, is ValueParameterDescriptor -> CompoundWeight(Weight.localOrParameter)
|
||||
is PropertyDescriptor -> CompoundWeight(Weight.property, element.getUserData(CALLABLE_WEIGHT_KEY))
|
||||
is VariableDescriptor -> CompoundWeight(Weight.variable, element.getUserData(CALLABLE_WEIGHT_KEY))
|
||||
is FunctionDescriptor -> CompoundWeight(Weight.function, element.getUserData(CALLABLE_WEIGHT_KEY))
|
||||
is PackageViewDescriptor -> CompoundWeight(Weight.packages)
|
||||
else -> CompoundWeight(Weight.default)
|
||||
|
||||
@@ -40,7 +40,7 @@ import com.intellij.codeInsight.lookup.DefaultLookupItemRenderer
|
||||
import org.jetbrains.jet.lang.types.TypeUtils
|
||||
|
||||
public class LookupElementFactory(
|
||||
private val receiverTypes: Collection<JetType>?
|
||||
private val receiverTypes: Collection<JetType>
|
||||
) {
|
||||
public fun createLookupElement(
|
||||
resolutionFacade: ResolutionFacade,
|
||||
@@ -52,18 +52,19 @@ public class LookupElementFactory(
|
||||
else
|
||||
descriptor
|
||||
var element = createLookupElement(resolutionFacade, _descriptor, DescriptorToSourceUtils.descriptorToDeclaration(_descriptor))
|
||||
|
||||
val weight = callableWeight(descriptor)
|
||||
if (weight != null) {
|
||||
element.putUserData(CALLABLE_WEIGHT_KEY, weight) // store for use in lookup elements sorting
|
||||
}
|
||||
|
||||
if (boldImmediateMembers) {
|
||||
element = element.boldIfImmediate(descriptor)
|
||||
element = element.boldIfImmediate(weight)
|
||||
}
|
||||
return element
|
||||
}
|
||||
|
||||
private fun LookupElement.boldIfImmediate(descriptor: DeclarationDescriptor): LookupElement {
|
||||
val weight = callableWeight(descriptor)
|
||||
if (weight != null) {
|
||||
putUserData(CALLABLE_WEIGHT_KEY, weight) // store for use in lookup elements sorting
|
||||
}
|
||||
|
||||
private fun LookupElement.boldIfImmediate(weight: CallableWeight?): LookupElement {
|
||||
val style = when (weight) {
|
||||
CallableWeight.thisClassMember, CallableWeight.thisTypeExtension -> Style.BOLD
|
||||
CallableWeight.notApplicableReceiverNullable -> Style.GRAYED
|
||||
@@ -204,8 +205,7 @@ public class LookupElementFactory(
|
||||
}
|
||||
|
||||
private fun callableWeight(descriptor: DeclarationDescriptor): CallableWeight? {
|
||||
if (receiverTypes == null) return null
|
||||
if (descriptor !is CallableMemberDescriptor) return null
|
||||
if (descriptor !is CallableDescriptor) return null
|
||||
|
||||
val isReceiverNullable = receiverTypes.isNotEmpty() && receiverTypes.all { it.isNullable() }
|
||||
val receiverParameter = descriptor.getExtensionReceiverParameter()
|
||||
@@ -229,7 +229,7 @@ public class LookupElementFactory(
|
||||
is PackageFragmentDescriptor -> CallableWeight.global
|
||||
|
||||
is ClassifierDescriptor -> {
|
||||
if (descriptor.getKind() == CallableMemberDescriptor.Kind.DECLARATION)
|
||||
if ((descriptor as CallableMemberDescriptor).getKind() == CallableMemberDescriptor.Kind.DECLARATION)
|
||||
CallableWeight.thisClassMember
|
||||
else
|
||||
CallableWeight.baseClassMember
|
||||
|
||||
@@ -52,7 +52,7 @@ object PackageDirectiveCompletion {
|
||||
|
||||
val variants = ReferenceVariantsHelper(bindingContext, { true }).getPackageReferenceVariants(ref.expression, prefixMatcher.asNameFilter())
|
||||
for (variant in variants) {
|
||||
val lookupElement = LookupElementFactory(null).createLookupElement(resolutionFacade, variant, false)
|
||||
val lookupElement = LookupElementFactory(listOf()).createLookupElement(resolutionFacade, variant, false)
|
||||
if (!lookupElement.getLookupString().contains(DUMMY_IDENTIFIER)) {
|
||||
result.addElement(lookupElement)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user