diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt index 3da570a431b..a5d7d96aebf 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/codeInsight/ReferenceVariantsHelper.kt @@ -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 } diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt index 0186c971416..4b60388cf94 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt @@ -44,10 +44,9 @@ public sealed class CallType(val descriptorKindFilter: object SAFE : CallType(DescriptorKindFilter.ALL) - // TODO: split into INFIX and OPERATOR (+ support other convention calls like [] etc) object INFIX : CallType(DescriptorKindFilter.FUNCTIONS exclude NonInfixExclude) - object UNARY : CallType(DescriptorKindFilter.FUNCTIONS exclude NonUnaryExclude) + object OPERATOR : CallType(DescriptorKindFilter.FUNCTIONS exclude NonOperatorExclude) object CALLABLE_REFERENCE : CallType(DescriptorKindFilter.CALLABLES exclude CallableReferenceExclude) @@ -66,10 +65,9 @@ public sealed class CallType(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(CallType.DOT, receiver) class SAFE(receiver: JetExpression) : CallTypeAndReceiver(CallType.SAFE, receiver) class INFIX(receiver: JetExpression) : CallTypeAndReceiver(CallType.INFIX, receiver) - class UNARY(receiver: JetExpression) : CallTypeAndReceiver(CallType.UNARY, receiver) + class OPERATOR(receiver: JetExpression) : CallTypeAndReceiver(CallType.OPERATOR, receiver) class CALLABLE_REFERENCE(receiver: JetTypeReference?) : CallTypeAndReceiver(CallType.CALLABLE_REFERENCE, receiver) class IMPORT_DIRECTIVE(receiver: JetExpression?) : CallTypeAndReceiver(CallType.IMPORT_DIRECTIVE, receiver) class PACKAGE_DIRECTIVE(receiver: JetExpression?) : CallTypeAndReceiver(CallType.PACKAGE_DIRECTIVE, receiver) @@ -128,11 +126,13 @@ public sealed class CallTypeAndReceiver { - //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, diff --git a/idea/testData/quickfix/autoImports/divOperator.before.Dependency.kt b/idea/testData/quickfix/autoImports/divOperator.before.Dependency.kt index 1f432510050..b9d4f415b51 100644 --- a/idea/testData/quickfix/autoImports/divOperator.before.Dependency.kt +++ b/idea/testData/quickfix/autoImports/divOperator.before.Dependency.kt @@ -1,3 +1,3 @@ package util -fun h.H.div(i: Int) = 3 \ No newline at end of file +operator fun h.H.div(i: Int) = 3 \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/divOperator.before.Dependency2.kt b/idea/testData/quickfix/autoImports/divOperator.before.Dependency2.kt new file mode 100644 index 00000000000..44bc62ebd94 --- /dev/null +++ b/idea/testData/quickfix/autoImports/divOperator.before.Dependency2.kt @@ -0,0 +1,3 @@ +package aaa + +fun h.H.div(i: Int) = 3 \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/minusOperator.before.Dependency.kt b/idea/testData/quickfix/autoImports/minusOperator.before.Dependency.kt index d52b85c02d5..2a4178d5208 100644 --- a/idea/testData/quickfix/autoImports/minusOperator.before.Dependency.kt +++ b/idea/testData/quickfix/autoImports/minusOperator.before.Dependency.kt @@ -1,3 +1,3 @@ package util -fun h.H?.minus(s: String) = "" \ No newline at end of file +operator fun h.H?.minus(s: String) = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/minusOperator.before.Dependency2.kt b/idea/testData/quickfix/autoImports/minusOperator.before.Dependency2.kt new file mode 100644 index 00000000000..c8f9bcacea1 --- /dev/null +++ b/idea/testData/quickfix/autoImports/minusOperator.before.Dependency2.kt @@ -0,0 +1,3 @@ +package aaa + +fun h.H?.minus(s: String) = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/postfixOperator.before.Dependency.kt b/idea/testData/quickfix/autoImports/postfixOperator.before.Dependency.kt index a57f74ac91e..3d5f75b1446 100644 --- a/idea/testData/quickfix/autoImports/postfixOperator.before.Dependency.kt +++ b/idea/testData/quickfix/autoImports/postfixOperator.before.Dependency.kt @@ -1,4 +1,4 @@ package util -fun h.H.inc(): h.H { +operator fun h.H.inc(): h.H { } \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/postfixOperator.before.Dependency2.kt b/idea/testData/quickfix/autoImports/postfixOperator.before.Dependency2.kt new file mode 100644 index 00000000000..e8b69a5dabf --- /dev/null +++ b/idea/testData/quickfix/autoImports/postfixOperator.before.Dependency2.kt @@ -0,0 +1,4 @@ +package aaa + +fun h.H.inc(): h.H { +} \ No newline at end of file