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 newExpression = when (parent) {
|
||||
is KtThisExpression -> parent
|
||||
is KtSuperExpression -> {
|
||||
val pparent = parent.parent
|
||||
when (pparent) {
|
||||
is KtQualifiedExpression -> pparent
|
||||
else -> parent
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
is KtSuperExpression -> parent.qualifiedParentOrSelf(isSelector = false)
|
||||
is KtArrayAccessExpression -> if (parent.arrayExpression == ktElement) ktElement else parent.qualifiedParentOrSelf()
|
||||
is KtReferenceExpression -> parent.qualifiedParentOrSelf()
|
||||
is KtQualifiedExpression -> if (parent.receiverExpression != ktElement) parent else null
|
||||
is KtOperationExpression -> if (parent.operationReference == ktElement) parent 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");
|
||||
}
|
||||
|
||||
@TestMetadata("arrayExpression.kt")
|
||||
public void testArrayExpression() throws Exception {
|
||||
runTest("idea/testData/debugger/selectExpression/arrayExpression.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("binaryExpression.kt")
|
||||
public void testBinaryExpression() throws Exception {
|
||||
runTest("idea/testData/debugger/selectExpression/binaryExpression.kt");
|
||||
|
||||
Reference in New Issue
Block a user