Fix quick evaluation for array expressions (KT-13268)
This commit is contained in:
@@ -70,42 +70,20 @@ class KotlinEditorTextProvider : EditorTextProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun KtExpression.qualifiedParentOrSelf(isSelector: Boolean = true): KtExpression {
|
||||||
|
val parent = parent
|
||||||
|
return if (parent is KtQualifiedExpression && (!isSelector || parent.selectorExpression == this)) parent else this
|
||||||
|
}
|
||||||
|
|
||||||
val parent = ktElement.parent
|
val parent = ktElement.parent
|
||||||
|
|
||||||
val newExpression = when (parent) {
|
val newExpression = when (parent) {
|
||||||
is KtThisExpression -> parent
|
is KtThisExpression -> parent
|
||||||
is KtSuperExpression -> {
|
is KtSuperExpression -> parent.qualifiedParentOrSelf(isSelector = false)
|
||||||
val pparent = parent.parent
|
is KtArrayAccessExpression -> if (parent.arrayExpression == ktElement) ktElement else parent.qualifiedParentOrSelf()
|
||||||
when (pparent) {
|
is KtReferenceExpression -> parent.qualifiedParentOrSelf()
|
||||||
is KtQualifiedExpression -> pparent
|
is KtQualifiedExpression -> if (parent.receiverExpression != ktElement) parent else null
|
||||||
else -> parent
|
is KtOperationExpression -> if (parent.operationReference == ktElement) parent else null
|
||||||
}
|
|
||||||
}
|
|
||||||
is KtReferenceExpression -> {
|
|
||||||
val pparent = parent.parent
|
|
||||||
if (pparent is KtQualifiedExpression && pparent.selectorExpression == parent) {
|
|
||||||
pparent
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
parent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
is KtQualifiedExpression -> {
|
|
||||||
if (parent.receiverExpression != ktElement) {
|
|
||||||
parent
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
is KtOperationExpression -> {
|
|
||||||
if (parent.operationReference == ktElement) {
|
|
||||||
parent
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fun foo(arr: Array<String>) {
|
||||||
|
a<caret>rr[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECTED: arr
|
||||||
idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java
Generated
+5
@@ -36,6 +36,11 @@ public class SelectExpressionForDebuggerTestGenerated extends AbstractSelectExpr
|
|||||||
runTest("idea/testData/debugger/selectExpression/annotation.kt");
|
runTest("idea/testData/debugger/selectExpression/annotation.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayExpression.kt")
|
||||||
|
public void testArrayExpression() throws Exception {
|
||||||
|
runTest("idea/testData/debugger/selectExpression/arrayExpression.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("binaryExpression.kt")
|
@TestMetadata("binaryExpression.kt")
|
||||||
public void testBinaryExpression() throws Exception {
|
public void testBinaryExpression() throws Exception {
|
||||||
runTest("idea/testData/debugger/selectExpression/binaryExpression.kt");
|
runTest("idea/testData/debugger/selectExpression/binaryExpression.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user