|
|
|
@@ -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,
|
|
|
|
|