From f3be1b8f1f72a39c0dd1ce98c913af74809e75e4 Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Mon, 25 Jul 2016 14:14:20 +0300 Subject: [PATCH] Add assertion for variable as function call with explicit type parameters. --- .../kotlin/resolve/calls/checkers/OperatorCallChecker.kt | 2 +- .../conventionNameCalls/ReplaceInvokeIntention.kt | 4 ++-- .../replaceInvoke/typeAndValueArgument.kt | 1 + .../replaceInvoke/typeAndValueArgument.kt.after | 7 ------- .../replaceInvoke/typeArgumentAndFunctionLiteral.kt | 1 + .../replaceInvoke/typeArgumentAndFunctionLiteral.kt.after | 7 ------- 6 files changed, 5 insertions(+), 17 deletions(-) delete mode 100644 idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt.after delete mode 100644 idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt.after diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt index 93ba576b73b..fae2fb08a87 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt @@ -42,7 +42,7 @@ class OperatorCallChecker : CallChecker { if (resolvedCall is VariableAsFunctionResolvedCall && call is CallTransformer.CallForImplicitInvoke && call.itIsVariableAsFunctionCall) { val outerCall = call.outerCall - if (isConventionCall(outerCall)) { + if (isConventionCall(outerCall) || outerCall.typeArguments.isNotEmpty()) { throw AssertionError("Illegal resolved call to variable with invoke for $outerCall. " + "Variable: ${resolvedCall.variableCall.resultingDescriptor}") } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt index 94e428af18f..ab29194f6ce 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2015 JetBrains s.r.o. + * Copyright 2010-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.util.OperatorNameConventions class ReplaceInvokeIntention : SelfTargetingRangeIntention(KtDotQualifiedExpression::class.java, "Replace 'invoke' with direct call"), HighPriorityAction { override fun applicabilityRange(element: KtDotQualifiedExpression): TextRange? { - if (element.calleeName != OperatorNameConventions.INVOKE.asString()) return null + if (element.calleeName != OperatorNameConventions.INVOKE.asString() || element.callExpression?.typeArgumentList != null) return null return element.callExpression!!.calleeExpression!!.textRange } diff --git a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt b/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt index 7f133770aa6..394d0d7faf7 100644 --- a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt +++ b/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt @@ -1,3 +1,4 @@ +// IS_APPLICABLE: false fun test() { class Test { operator fun invoke(a: Int) {} diff --git a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt.after b/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt.after deleted file mode 100644 index 3dadd73742a..00000000000 --- a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt.after +++ /dev/null @@ -1,7 +0,0 @@ -fun test() { - class Test { - operator fun invoke(a: Int) {} - } - val test = Test() - test(0) -} diff --git a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt b/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt index dad76e55350..f62fcced7fd 100644 --- a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt +++ b/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt @@ -1,3 +1,4 @@ +// IS_APPLICABLE: false fun test() { class Test { operator fun invoke(fn: () -> T) {} diff --git a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt.after b/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt.after deleted file mode 100644 index d85fe868903..00000000000 --- a/idea/testData/intentions/conventionNameCalls/replaceInvoke/typeArgumentAndFunctionLiteral.kt.after +++ /dev/null @@ -1,7 +0,0 @@ -fun test() { - class Test { - operator fun invoke(fn: () -> T) {} - } - val test = Test() - test { 0 } -}