diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java index bd15d2d2003..0f0c10ab1a5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java @@ -535,6 +535,16 @@ public class JetPsiUtil { } } + if (parentExpression instanceof JetCallExpression && currentInner == ((JetCallExpression) parentExpression).getCalleeExpression()) { + if (innerExpression instanceof JetSimpleNameExpression) return false; + if (PsiUtilPackage.getQualifiedExpressionForSelector(parentExpression) != null) return true; + return !(innerExpression instanceof JetThisExpression + || innerExpression instanceof JetArrayAccessExpression + || innerExpression instanceof JetConstantExpression + || innerExpression instanceof JetStringTemplateExpression + || innerExpression instanceof JetCallExpression); + } + IElementType innerOperation = getOperation(innerExpression); IElementType parentOperation = getOperation(parentExpression); 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 a7be413ab78..e0676a469a6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt @@ -22,6 +22,7 @@ import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.callExpression import org.jetbrains.kotlin.idea.intentions.calleeName +import org.jetbrains.kotlin.psi.JetCallExpression import org.jetbrains.kotlin.psi.JetDotQualifiedExpression import org.jetbrains.kotlin.types.expressions.OperatorConventions @@ -33,7 +34,7 @@ public class ReplaceInvokeIntention : JetSelfTargetingRangeIntention String.() -> Unit) { + val f = y() + x.f() +} \ No newline at end of file diff --git a/idea/testData/refactoring/inline/addParenthesis/Callee.kt.after b/idea/testData/refactoring/inline/addParenthesis/Callee.kt.after new file mode 100644 index 00000000000..a0113e7adba --- /dev/null +++ b/idea/testData/refactoring/inline/addParenthesis/Callee.kt.after @@ -0,0 +1,3 @@ +fun foo(x : String, y : () -> String.() -> Unit) { + x.(y())() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java index 0a681c0493b..ce13cad053b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/inline/InlineTestGenerated.java @@ -151,6 +151,12 @@ public class InlineTestGenerated extends AbstractInlineTest { doTest(fileName); } + @TestMetadata("Callee.kt") + public void testCallee() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/inline/addParenthesis/Callee.kt"); + doTest(fileName); + } + @TestMetadata("Colon.kt") public void testColon() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/inline/addParenthesis/Colon.kt");