package testing.groovytest class Test { fun foo(a: Any) = this val test: Test = this fun test() = this fun get(index: Int) = this fun i() = 0 var i: Int = 0 } fun bar() = Test() fun test() { val t = Test() val s = t /*false*/t.test() /*false*/t.test()!! /*false*/t.test()?.test /*false*/t.test()[0] /*false*/t.test[0] /*false*/t.test[t.i()]!! /*false*/t.test /*false*/t!!.test /*false*/t?.test t[/*false*/s.i()] t[/*false*/s!!.i()] t[/*false*/s?.i()] t[/*false*/s[0]?.i()] /*false*/t[0].test /*false*/t[0]!!.test /*false*/t[0]?.test bar()./*true*/test bar()!!./*true*/test bar()?./*true*/test t[0]./*true*/test() t[0]!!./*true*/test() t[0]?./*true*/test() t.foo(/*false*/t.test) t.foo(/*false*/t!!.test) t.foo(/*false*/t?.test) t.foo(/*false*/t[0].test) t.foo(t./*true*/test()) t.foo(t!!./*true*/test) t.foo(t?./*true*/test()) t.foo(t[0]./*true*/test) /*false*/t.i++ /*false*/t!!.i++ /*false*/t?.i++ /*false*/t[0].i++ /*false*/t.test.i++ t./*true*/i++ t!!./*true*/i++ t?./*true*/i++ t[0]./*true*/i++ t.test./*true*/i++ val t1 = 1 val t2 = /*false*/t1 /*false*/t1 + /*false*/t2 }