Fix breakpoints in function literals in inline calls (KT-11521, KT-12734, KT-12470)

#KT-11521 Fixed
 #KT-12734 Fixed
 #KT-12470 Fixed
This commit is contained in:
Nikolay Krasko
2016-11-16 16:28:22 +03:00
committed by Nikolay Krasko
parent 59a349a4ae
commit 1889f4f7b1
21 changed files with 394 additions and 10 deletions
@@ -0,0 +1,21 @@
package stopInInlineCallLocalFunLambda
fun main(args: Array<String>) {
var prop = 1
inlineFun {
fun local() {
{
//Breakpoint!
foo(12)
}()
}
local()
}
}
inline fun inlineFun(f: () -> Unit) {
f()
}
fun foo(a: Any) {}
@@ -0,0 +1,24 @@
package stopInInlinedInSpecialNamedFun
// KT-12470
class Foo(bar: Bar) {
init {
with(bar) {
{
//Breakpoint!
nop()
nop()
}()
}
}
fun nop() {}
}
fun main(args: Array<String>) {
Foo(Bar())
}
class Bar
@@ -0,0 +1,28 @@
package stopInInlinedInSpecialNamedFunWithGet
// KT-12470
class Foo(bar: Bar) {
init {
with(bar) {
get<String> {
//Breakpoint!
nop()
nop()
}
}
}
private fun nop() {}
}
fun main(args: Array<String>) {
Foo(Bar())
}
class Bar
class BarContext
inline fun <reified T : Any> Bar.get(noinline body: BarContext.() -> Unit) {
BarContext().body()
}
@@ -0,0 +1,19 @@
package stopInLambdaInlineCallLambda
fun main(args: Array<String>) {
var prop = 1
{
inlineFun {
{
//Breakpoint!
foo(12)
}()
}
}()
}
inline fun inlineFun(f: () -> Unit) {
f()
}
fun foo(a: Any) {}
@@ -0,0 +1,21 @@
package stopInLocalFunInlineCallLambda
fun main(args: Array<String>) {
var prop = 1
fun local() {
inlineFun {
{
//Breakpoint!
foo(12)
}()
}
}
local()
}
inline fun inlineFun(f: () -> Unit) {
f()
}
fun foo(a: Any) {}
@@ -0,0 +1,22 @@
package stopInNonInlinedLambdaInInlineCallWithClosure
fun main(args: Array<String>) {
var prop = 1
inlineFun {
notInlineFun {
//Breakpoint!
foo(prop)
foo(prop)
}
}
}
inline fun inlineFun(f: () -> Unit) {
f()
}
fun notInlineFun(f: () -> Unit) {
f()
}
fun foo(a: Any) {}
@@ -0,0 +1,21 @@
package stopInNonInlinedLambdaInInlineCallWithoutClosure
fun main(args: Array<String>) {
var prop = 1
inlineFun {
notInlineFun {
//Breakpoint!
foo(12)
}
}
}
inline fun inlineFun(f: () -> Unit) {
f()
}
fun notInlineFun(f: () -> Unit) {
f()
}
fun foo(a: Any) {}
@@ -0,0 +1,23 @@
package stopInObjectLiteralInInlineCallNoClosure
// KT-12734
fun main(args: Array<String>) {
val a = 12
inlineF {
val s = object: () -> Unit {
override fun invoke() {
//Breakpoint!
nop()
nop()
}
}
s()
}
}
inline fun <R> inlineF(block: () -> R): R = block()
fun nop() {}
@@ -0,0 +1,23 @@
package stopInObjectLiteralInInlineCallWithClosure
// KT-12734
fun main(args: Array<String>) {
val a = 12
inlineF {
val s = object: () -> Unit {
override fun invoke() {
//Breakpoint!
nop(a)
nop(a)
}
}
s()
}
}
inline fun <R> inlineF(block: () -> R): R = block()
fun nop(a: Any) {}