Auto-import popup does not suggest to import non-operator functions when operator required
This commit is contained in:
+1
-1
@@ -119,7 +119,7 @@ public class ReferenceVariantsHelper(
|
||||
is CallTypeAndReceiver.DOT -> receiverExpression = callTypeAndReceiver.receiver
|
||||
is CallTypeAndReceiver.SAFE -> receiverExpression = callTypeAndReceiver.receiver
|
||||
is CallTypeAndReceiver.INFIX -> receiverExpression = callTypeAndReceiver.receiver
|
||||
is CallTypeAndReceiver.UNARY -> receiverExpression = null // can it happen at all?
|
||||
is CallTypeAndReceiver.OPERATOR -> return emptyList()
|
||||
is CallTypeAndReceiver.UNKNOWN -> return emptyList()
|
||||
else -> throw RuntimeException() //TODO: see KT-9394
|
||||
}
|
||||
|
||||
@@ -44,10 +44,9 @@ public sealed class CallType<TReceiver : JetElement?>(val descriptorKindFilter:
|
||||
|
||||
object SAFE : CallType<JetExpression>(DescriptorKindFilter.ALL)
|
||||
|
||||
// TODO: split into INFIX and OPERATOR (+ support other convention calls like [] etc)
|
||||
object INFIX : CallType<JetExpression>(DescriptorKindFilter.FUNCTIONS exclude NonInfixExclude)
|
||||
|
||||
object UNARY : CallType<JetExpression>(DescriptorKindFilter.FUNCTIONS exclude NonUnaryExclude)
|
||||
object OPERATOR : CallType<JetExpression>(DescriptorKindFilter.FUNCTIONS exclude NonOperatorExclude)
|
||||
|
||||
object CALLABLE_REFERENCE : CallType<JetTypeReference?>(DescriptorKindFilter.CALLABLES exclude CallableReferenceExclude)
|
||||
|
||||
@@ -66,10 +65,9 @@ public sealed class CallType<TReceiver : JetElement?>(val descriptorKindFilter:
|
||||
get() = 0
|
||||
}
|
||||
|
||||
private object NonUnaryExclude : DescriptorKindExclude {
|
||||
//TODO: check 'operator' modifier
|
||||
private object NonOperatorExclude : DescriptorKindExclude {
|
||||
override fun excludes(descriptor: DeclarationDescriptor) =
|
||||
!(descriptor is SimpleFunctionDescriptor && descriptor.valueParameters.isEmpty())
|
||||
!(descriptor is SimpleFunctionDescriptor && descriptor.isOperator)
|
||||
|
||||
override val fullyExcludedDescriptorKinds: Int
|
||||
get() = 0
|
||||
@@ -94,7 +92,7 @@ public sealed class CallTypeAndReceiver<TReceiver : JetElement?, TCallType : Cal
|
||||
class DOT(receiver: JetExpression) : CallTypeAndReceiver<JetExpression, CallType.DOT>(CallType.DOT, receiver)
|
||||
class SAFE(receiver: JetExpression) : CallTypeAndReceiver<JetExpression, CallType.SAFE>(CallType.SAFE, receiver)
|
||||
class INFIX(receiver: JetExpression) : CallTypeAndReceiver<JetExpression, CallType.INFIX>(CallType.INFIX, receiver)
|
||||
class UNARY(receiver: JetExpression) : CallTypeAndReceiver<JetExpression, CallType.UNARY>(CallType.UNARY, receiver)
|
||||
class OPERATOR(receiver: JetExpression) : CallTypeAndReceiver<JetExpression, CallType.OPERATOR>(CallType.OPERATOR, receiver)
|
||||
class CALLABLE_REFERENCE(receiver: JetTypeReference?) : CallTypeAndReceiver<JetTypeReference?, CallType.CALLABLE_REFERENCE>(CallType.CALLABLE_REFERENCE, receiver)
|
||||
class IMPORT_DIRECTIVE(receiver: JetExpression?) : CallTypeAndReceiver<JetExpression?, CallType.IMPORT_DIRECTIVE>(CallType.IMPORT_DIRECTIVE, receiver)
|
||||
class PACKAGE_DIRECTIVE(receiver: JetExpression?) : CallTypeAndReceiver<JetExpression?, CallType.PACKAGE_DIRECTIVE>(CallType.PACKAGE_DIRECTIVE, receiver)
|
||||
@@ -128,11 +126,13 @@ public sealed class CallTypeAndReceiver<TReceiver : JetElement?, TCallType : Cal
|
||||
}
|
||||
return when (parent) {
|
||||
is JetBinaryExpression -> {
|
||||
//TODO: operator vs infix
|
||||
CallTypeAndReceiver.INFIX(receiverExpression)
|
||||
if (parent.operationToken == JetTokens.IDENTIFIER)
|
||||
CallTypeAndReceiver.INFIX(receiverExpression)
|
||||
else
|
||||
CallTypeAndReceiver.OPERATOR(receiverExpression)
|
||||
}
|
||||
|
||||
is JetUnaryExpression -> CallTypeAndReceiver.UNARY(receiverExpression)
|
||||
is JetUnaryExpression -> CallTypeAndReceiver.OPERATOR(receiverExpression)
|
||||
|
||||
else -> error("Unknown parent for JetOperationReferenceExpression: $parent")
|
||||
}
|
||||
@@ -184,7 +184,7 @@ public fun CallTypeAndReceiver<*, *>.receiverTypes(
|
||||
is CallTypeAndReceiver.DOT -> receiverExpression = receiver
|
||||
is CallTypeAndReceiver.SAFE -> receiverExpression = receiver
|
||||
is CallTypeAndReceiver.INFIX -> receiverExpression = receiver
|
||||
is CallTypeAndReceiver.UNARY -> receiverExpression = receiver
|
||||
is CallTypeAndReceiver.OPERATOR -> receiverExpression = receiver
|
||||
|
||||
is CallTypeAndReceiver.IMPORT_DIRECTIVE,
|
||||
is CallTypeAndReceiver.PACKAGE_DIRECTIVE,
|
||||
|
||||
Reference in New Issue
Block a user