EA-211010: Fix receiver parameter name for lambdas passed as value arguments
This commit is contained in:
@@ -461,10 +461,18 @@ fun getCallLabelForLambdaArgument(declaration: KtFunctionLiteral, bindingContext
|
|||||||
lambdaExpressionParent.name?.let { return it }
|
lambdaExpressionParent.name?.let { return it }
|
||||||
}
|
}
|
||||||
|
|
||||||
val lambdaArgument = lambdaExpression.parent as? KtLambdaArgument ?: return null
|
val callExpression = when (val argument = lambdaExpression.parent) {
|
||||||
val callExpression = lambdaArgument.parent as? KtCallExpression ?: return null
|
is KtLambdaArgument -> {
|
||||||
val call = callExpression.getResolvedCall(bindingContext) ?: return null
|
argument.parent as? KtCallExpression ?: return null
|
||||||
|
}
|
||||||
|
is KtValueArgument -> {
|
||||||
|
val valueArgumentList = argument.parent as? KtValueArgumentList ?: return null
|
||||||
|
valueArgumentList.parent as? KtCallExpression ?: return null
|
||||||
|
}
|
||||||
|
else -> return null
|
||||||
|
}
|
||||||
|
|
||||||
|
val call = callExpression.getResolvedCall(bindingContext) ?: return null
|
||||||
return call.resultingDescriptor.name.asString()
|
return call.resultingDescriptor.name.asString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
@@ -904,6 +904,11 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat
|
|||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/inlineFunThisKotlinVariables.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/inlineFunThisKotlinVariables.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambdaAsValueArgument.kt")
|
||||||
|
public void testLambdaAsValueArgument() throws Exception {
|
||||||
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/lambdaAsValueArgument.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambdaFun1.kt")
|
@TestMetadata("lambdaFun1.kt")
|
||||||
public void testLambdaFun1() throws Exception {
|
public void testLambdaFun1() throws Exception {
|
||||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/lambdaFun1.kt");
|
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/lambdaFun1.kt");
|
||||||
|
|||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
package lambdaAsValueArgument
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
contactMapper.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
object MyContext
|
||||||
|
|
||||||
|
data class User(val firstName: String, val lastName: String, val age: Int)
|
||||||
|
|
||||||
|
fun foo(block: User.(User) -> Unit) {
|
||||||
|
val item = User("a", "b", 10)
|
||||||
|
item.block(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
val contactMapper = MyContext.run {
|
||||||
|
foo({ i ->
|
||||||
|
//Breakpoint!
|
||||||
|
this.copy(
|
||||||
|
firstName = "Foo",
|
||||||
|
lastName = "Bar",
|
||||||
|
age = 100
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRINT_FRAME
|
||||||
|
// SHOW_KOTLIN_VARIABLES
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
LineBreakpoint created at lambdaAsValueArgument.kt:19
|
||||||
|
Run Java
|
||||||
|
Connected to the target VM
|
||||||
|
lambdaAsValueArgument.kt:19
|
||||||
|
frame = invoke:19, LambdaAsValueArgumentKt$contactMapper$1$1 {lambdaAsValueArgument}
|
||||||
|
local = this: lambdaAsValueArgument.User = {lambdaAsValueArgument.User@uniqueID}User(firstName=a, lastName=b, age=10) (sp = null)
|
||||||
|
field = firstName: java.lang.String = a (sp = lambdaAsValueArgument.kt, 9)
|
||||||
|
field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!)
|
||||||
|
element = 0 = 'a' 97
|
||||||
|
field = hash: int = 0 (sp = String.!EXT!)
|
||||||
|
field = lastName: java.lang.String = b (sp = lambdaAsValueArgument.kt, 9)
|
||||||
|
field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!)
|
||||||
|
element = 0 = 'b' 98
|
||||||
|
field = hash: int = 0 (sp = String.!EXT!)
|
||||||
|
field = age: int = 10 (sp = lambdaAsValueArgument.kt, 9)
|
||||||
|
local = i: lambdaAsValueArgument.User = {lambdaAsValueArgument.User@uniqueID}User(firstName=a, lastName=b, age=10) (sp = lambdaAsValueArgument.kt, 17)
|
||||||
|
field = firstName: java.lang.String = a (sp = lambdaAsValueArgument.kt, 9)
|
||||||
|
field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!)
|
||||||
|
element = 0 = 'a' 97
|
||||||
|
field = hash: int = 0 (sp = String.!EXT!)
|
||||||
|
field = lastName: java.lang.String = b (sp = lambdaAsValueArgument.kt, 9)
|
||||||
|
field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!)
|
||||||
|
element = 0 = 'b' 98
|
||||||
|
field = hash: int = 0 (sp = String.!EXT!)
|
||||||
|
field = age: int = 10 (sp = lambdaAsValueArgument.kt, 9)
|
||||||
|
Disconnected from the target VM
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
Reference in New Issue
Block a user