Generate line numbers for function call parameters

Before this fix line numbers for function call arguments were not generated,
 so if argument was on another line than function call it was
 impossible to stop on argument line during debugging.
 Now line number for each argument is generated if necessary
 (another line than function call line).

 #KT-17144 Fixed
This commit is contained in:
Mikhael Bogdanov
2017-04-16 15:05:47 +02:00
parent b60efab62e
commit 708bfdbd5f
11 changed files with 51 additions and 34 deletions
@@ -51,21 +51,6 @@ public class CallBasedArgumentGenerator extends ArgumentGenerator {
"Value parameters and their types mismatch in sizes: " + valueParameters.size() + " != " + valueParameterTypes.size();
}
@NotNull
@Override
public DefaultCallArgs generate(
@NotNull List<? extends ResolvedValueArgument> valueArgumentsByIndex,
@NotNull List<? extends ResolvedValueArgument> valueArgs,
@Nullable CallableDescriptor calleeDescriptor
) {
boolean shouldMarkLineNumbers = this.codegen.isShouldMarkLineNumbers();
this.codegen.setShouldMarkLineNumbers(false);
DefaultCallArgs defaultArgs = super.generate(valueArgumentsByIndex, valueArgs, calleeDescriptor);
this.codegen.setShouldMarkLineNumbers(shouldMarkLineNumbers);
return defaultArgs;
}
@Override
protected void generateExpression(int i, @NotNull ExpressionValueArgument argument) {
ValueParameterDescriptor parameter = valueParameters.get(i);
+13 -13
View File
@@ -5,8 +5,8 @@ package test
fun testProperLineNumberAfterInline(): String {
var exceptionCount = 0;
try {
checkEquals(test(),
"12")
fail(inlineFun(),
"12")
}
catch(e: AssertionError) {
val entry = (e as java.lang.Throwable).getStackTrace()!!.get(1)
@@ -18,8 +18,8 @@ fun testProperLineNumberAfterInline(): String {
}
try {
checkEquals("12",
test())
fail("12",
inlineFun())
}
catch(e: AssertionError) {
val entry = e.stackTrace!![1]
@@ -36,13 +36,13 @@ fun testProperLineNumberAfterInline(): String {
fun testProperLineForOtherParameters(): String {
var exceptionCount = 0;
try {
checkEquals(test(),
fail())
fail(inlineFun(),
fail())
}
catch(e: AssertionError) {
val entry = e.stackTrace!![1]
val actual = "${entry.getFileName()}:${entry.getLineNumber()}"
if ("simpleCallWithParams.kt:39" != actual) {
if ("simpleCallWithParams.kt:40" != actual) {
return "fail 3: ${actual}"
}
exceptionCount++
@@ -50,8 +50,8 @@ fun testProperLineForOtherParameters(): String {
}
try {
checkEquals(fail(),
test())
fail(fail(),
inlineFun())
}
catch(e: AssertionError) {
val entry = e.stackTrace!![1]
@@ -63,7 +63,7 @@ fun testProperLineForOtherParameters(): String {
}
try {
checkEquals(fail(), test())
fail(fail(), inlineFun())
}
catch(e: AssertionError) {
val entry = e.stackTrace!![1]
@@ -75,7 +75,7 @@ fun testProperLineForOtherParameters(): String {
}
try {
checkEquals(fail(), test())
fail(fail(), inlineFun())
}
catch(e: AssertionError) {
val entry = e.stackTrace!![1]
@@ -97,11 +97,11 @@ fun box(): String {
return testProperLineForOtherParameters()
}
public fun checkEquals(p1: String, p2: String) {
public fun fail(p1: String, p2: String) {
throw AssertionError("fail")
}
inline fun test(): String {
inline fun inlineFun(): String {
return "123"
}
@@ -14,4 +14,4 @@ fun foo() {
}
// 2 1 5 8 9 15
// 2 1 5 8 9 +10 +11 10 9 15
@@ -7,4 +7,4 @@ fun foo() {
fun foo(i: Int) {
}
// 2 5 8
// 2 +3 2 5 8
+1 -1
View File
@@ -6,4 +6,4 @@ fun foo() {
infix fun Int.foo(i: Int) {
}
// 2 4 7
// 2 3 2 4 7
@@ -18,4 +18,4 @@ fun fail() : String {
throw AssertionError("fail")
}
// 2 22 2 5 23 5 7 10 14 18
// 2 22 3 2 5 6 23 5 7 10 14 18
@@ -16,4 +16,4 @@ fun fail() : String {
throw AssertionError("fail")
}
// 1 4 20 4 7 21 7 9 12 16
// 1 4 20 5 4 7 8 21 7 9 12 16
@@ -18,4 +18,4 @@ fun fail() : String {
throw AssertionError("fail")
}
// 2 22 2 23 5 24 5 25 7 10 14 18
// 2 22 3 2 23 5 6 24 5 25 7 10 14 18
+8
View File
@@ -0,0 +1,8 @@
LineBreakpoint created at kt17144.kt:9
Run Java
Connected to the target VM
kt17144.kt:9
Disconnected from the target VM
Process finished with exit code 0
foo
@@ -0,0 +1,18 @@
package kt17144
fun main(args: Array<String>) {
val a = true
1 + when (a) {
true -> {
println("foo")
//Breakpoint!
1
}
else -> {
println("bar")
2
}
}
}
//RESUME: 1
@@ -1088,6 +1088,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest {
doCustomTest(fileName);
}
@TestMetadata("kt17144.kt")
public void testKt17144() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/custom/kt17144.kt");
doCustomTest(fileName);
}
@TestMetadata("kt17295.kt")
public void testKt17295() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/custom/kt17295.kt");