diff --git a/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/JetPsiUnifier.kt b/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/JetPsiUnifier.kt
index d63fc218a48..d0b0fcafb77 100644
--- a/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/JetPsiUnifier.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/JetPsiUnifier.kt
@@ -306,11 +306,16 @@ public class JetPsiUnifier(
private val JetElement.bindingContext: BindingContext get() = if (this in originalPattern) patternContext else targetContext
private fun JetElement.getAdjustedResolvedCall(): ResolvedCall<*>? {
- val rc = getResolvedCall(bindingContext)?.let {
- when {
- it !is VariableAsFunctionResolvedCall -> it
- this is JetSimpleNameExpression -> it.variableCall
- else -> it.functionCall
+ val rc = if (this is JetArrayAccessExpression) {
+ bindingContext[BindingContext.INDEXED_LVALUE_GET, this]
+ }
+ else {
+ getResolvedCall(bindingContext)?.let {
+ when {
+ it !is VariableAsFunctionResolvedCall -> it
+ this is JetSimpleNameExpression -> it.variableCall
+ else -> it.functionCall
+ }
}
}
diff --git a/idea/testData/refactoring/introduceVariable/ComplexCallee.kt b/idea/testData/refactoring/introduceVariable/ComplexCallee.kt
new file mode 100644
index 00000000000..dedca1a8f9c
--- /dev/null
+++ b/idea/testData/refactoring/introduceVariable/ComplexCallee.kt
@@ -0,0 +1,7 @@
+// WITH_RUNTIME
+
+fun fn(index : Int, list: List<()->Unit>) {
+ when {
+ index in list.indices -> list[index]()
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/refactoring/introduceVariable/ComplexCallee.kt.after b/idea/testData/refactoring/introduceVariable/ComplexCallee.kt.after
new file mode 100644
index 00000000000..31df8b9a042
--- /dev/null
+++ b/idea/testData/refactoring/introduceVariable/ComplexCallee.kt.after
@@ -0,0 +1,10 @@
+// WITH_RUNTIME
+
+fun fn(index : Int, list: List<()->Unit>) {
+ when {
+ index in list.indices -> {
+ val function = list[index]
+ function()
+ }
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/unifier/equivalence/expressions/calls/callAndCalleeRuntime.kt b/idea/testData/unifier/equivalence/expressions/calls/callAndCalleeRuntime.kt
new file mode 100644
index 00000000000..0761e5bdcc2
--- /dev/null
+++ b/idea/testData/unifier/equivalence/expressions/calls/callAndCalleeRuntime.kt
@@ -0,0 +1,6 @@
+fun test(index: Int, array: Array<() -> Unit>) {
+ val a = array[index]()
+ val b = array[index]
+ val c = array.get(index)
+ val d = array.get(index).invoke()
+}
\ No newline at end of file
diff --git a/idea/testData/unifier/equivalence/expressions/calls/callAndCalleeRuntime.kt.match b/idea/testData/unifier/equivalence/expressions/calls/callAndCalleeRuntime.kt.match
new file mode 100644
index 00000000000..981fc90c7fe
--- /dev/null
+++ b/idea/testData/unifier/equivalence/expressions/calls/callAndCalleeRuntime.kt.match
@@ -0,0 +1,7 @@
+array[index]
+
+array[index]
+
+array.get(index)
+
+array.get(index)
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java
index 8ec7c71a9b0..355adfe345f 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/JetExtractionTestGenerated.java
@@ -61,6 +61,12 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest {
doIntroduceVariableTest(fileName);
}
+ @TestMetadata("ComplexCallee.kt")
+ public void testComplexCallee() throws Exception {
+ String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/ComplexCallee.kt");
+ doIntroduceVariableTest(fileName);
+ }
+
@TestMetadata("ConstructorDelegationCall.kt")
public void testConstructorDelegationCall() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/introduceVariable/ConstructorDelegationCall.kt");
diff --git a/idea/tests/org/jetbrains/kotlin/psi/patternMatching/JetPsiUnifierTestGenerated.java b/idea/tests/org/jetbrains/kotlin/psi/patternMatching/JetPsiUnifierTestGenerated.java
index 0fa82c8a107..64ac7eb507c 100644
--- a/idea/tests/org/jetbrains/kotlin/psi/patternMatching/JetPsiUnifierTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/psi/patternMatching/JetPsiUnifierTestGenerated.java
@@ -389,6 +389,12 @@ public class JetPsiUnifierTestGenerated extends AbstractJetPsiUnifierTest {
doTest(fileName);
}
+ @TestMetadata("callAndCalleeRuntime.kt")
+ public void testCallAndCalleeRuntime() throws Exception {
+ String fileName = JetTestUtils.navigationMetadata("idea/testData/unifier/equivalence/expressions/calls/callAndCalleeRuntime.kt");
+ doTest(fileName);
+ }
+
@TestMetadata("callTypeArgumentsRuntime.kt")
public void testCallTypeArgumentsRuntime() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/unifier/equivalence/expressions/calls/callTypeArgumentsRuntime.kt");