mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-04-17 15:52:30 +00:00
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 }
|
||||
}
|
||||
|
||||
val lambdaArgument = lambdaExpression.parent as? KtLambdaArgument ?: return null
|
||||
val callExpression = lambdaArgument.parent as? KtCallExpression ?: return null
|
||||
val call = callExpression.getResolvedCall(bindingContext) ?: return null
|
||||
val callExpression = when (val argument = lambdaExpression.parent) {
|
||||
is KtLambdaArgument -> {
|
||||
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()
|
||||
}
|
||||
|
||||
|
||||
@@ -904,6 +904,11 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat
|
||||
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")
|
||||
public void testLambdaFun1() throws Exception {
|
||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/frame/lambdaFun1.kt");
|
||||
|
||||
@@ -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
|
||||
@@ -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