FIR: introduce & use REFERENCE_BY_QUALIFIER positioning strategy

This commit is contained in:
Mikhail Glukhikh
2021-02-18 11:54:22 +03:00
parent 0accaf0f30
commit 34c90aab3b
138 changed files with 415 additions and 372 deletions
@@ -33,8 +33,8 @@ operator fun CustomDelegate3.setValue(thisRef: Any?, prop: KProperty<*>, value:
class Example {
var a by <!INAPPLICABLE_CANDIDATE!>CustomDelegate()<!>
val aval by <!INAPPLICABLE_CANDIDATE!>CustomDelegate()<!>
var a by <!INAPPLICABLE_CANDIDATE!>CustomDelegate<!>()
val aval by <!INAPPLICABLE_CANDIDATE!>CustomDelegate<!>()
var b by OkDelegate()
var c by CustomDelegate2()
var d by CustomDelegate3()
@@ -28,20 +28,20 @@ fun <T> fooT2() : (t : T) -> T {
fun main(args : Array<String>) {
args.foo()()
<!INAPPLICABLE_CANDIDATE!>args.foo1()()<!>
<!INAPPLICABLE_CANDIDATE!><!UNRESOLVED_REFERENCE!>a<!>.foo1()()<!>
args.<!INAPPLICABLE_CANDIDATE!>foo1<!>()()
<!UNRESOLVED_REFERENCE!>a<!>.<!INAPPLICABLE_CANDIDATE!>foo1<!>()()
<!UNRESOLVED_REFERENCE!>a<!>.foo1()(<!UNRESOLVED_REFERENCE!>a<!>)
args.foo1()(1)
<!INAPPLICABLE_CANDIDATE!>args.foo1()("1")<!>
<!INAPPLICABLE_CANDIDATE!><!UNRESOLVED_REFERENCE!>a<!>.foo1()("1")<!>
args.<!INAPPLICABLE_CANDIDATE!>foo1<!>()("1")
<!UNRESOLVED_REFERENCE!>a<!>.<!INAPPLICABLE_CANDIDATE!>foo1<!>()("1")
<!UNRESOLVED_REFERENCE!>a<!>.foo1()(<!UNRESOLVED_REFERENCE!>a<!>)
foo2()({})
<!INAPPLICABLE_CANDIDATE!>foo2<!>(){}
(foo2()){}
<!INAPPLICABLE_CANDIDATE!>(foo2()){x -> }<!>
<!INAPPLICABLE_CANDIDATE!>foo2()({x -> })<!>
<!INAPPLICABLE_CANDIDATE!>(foo2())<!>{x -> }
<!INAPPLICABLE_CANDIDATE!>foo2<!>()({x -> })
val a = fooT1(1)()
checkSubtype<Int>(a)
@@ -50,25 +50,25 @@ fun main(args : Array<String>) {
checkSubtype<Int>(b)
fooT2()(1) // : Any?
<!UNRESOLVED_REFERENCE!>1()<!>
<!UNRESOLVED_REFERENCE!>1{}<!>
<!UNRESOLVED_REFERENCE!>1(){}<!>
<!UNRESOLVED_REFERENCE!>1<!>()
<!UNRESOLVED_REFERENCE!>1<!>{}
<!UNRESOLVED_REFERENCE!>1<!>(){}
}
fun f() : Int.() -> Unit = {}
fun main1() {
1.<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)()<!>;
1.<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)<!>();
{1}();
(fun (x : Int) = x)(1)
1.<!UNRESOLVED_REFERENCE!>(fun Int.(x : Int) = x)(1)<!>;
1.<!UNRESOLVED_REFERENCE!>(fun Int.(x : Int) = x)<!>(1);
l@{1}()
1.<!UNRESOLVED_REFERENCE!>((fun Int.() = 1))()<!>
1.<!UNRESOLVED_REFERENCE!>(f())()<!>
1.<!UNRESOLVED_REFERENCE!>if(true){f()}else{f()}()<!>
1.<!UNRESOLVED_REFERENCE!>if(true)(fun Int.() {})else{f()}()<!>
1.<!UNRESOLVED_REFERENCE!>((fun Int.() = 1))<!>()
1.<!UNRESOLVED_REFERENCE!>(f())<!>()
1.<!UNRESOLVED_REFERENCE!>if(true){f()}else{f()}<!>()
1.<!UNRESOLVED_REFERENCE!>if(true)(fun Int.() {})else{f()}<!>()
1.<!UNRESOLVED_REFERENCE!>"sdf"()<!>
1.<!UNRESOLVED_REFERENCE!>"sdf"<!>()
1."sdf"
1.{}
@@ -76,12 +76,12 @@ fun main1() {
}
fun test() {
<!INAPPLICABLE_CANDIDATE!>{x : Int -> 1}()<!>;
<!INAPPLICABLE_CANDIDATE!>(fun Int.() = 1)()<!>
"sd".<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)()<!>
<!INAPPLICABLE_CANDIDATE!>{x : Int -> 1}<!>();
<!INAPPLICABLE_CANDIDATE!>(fun Int.() = 1)<!>()
"sd".<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)<!>()
val i : Int? = null
i.<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)()<!>;
<!INAPPLICABLE_CANDIDATE!>{}<Int>()<!>
1?.<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)()<!>
1.<!UNRESOLVED_REFERENCE!>{}()<!>
i.<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)<!>();
<!INAPPLICABLE_CANDIDATE!>{}<!><Int>()
1?.<!UNRESOLVED_REFERENCE!>(fun Int.() = 1)<!>()
1.<!UNRESOLVED_REFERENCE!>{}<!>()
}
@@ -28,7 +28,7 @@ abstract class My(@Field arg: Int, @Field val w: Int) {
fun foo() {}
@Field
val v: Int by <!UNRESOLVED_REFERENCE!><!UNRESOLVED_REFERENCE!>Delegates<!>.<!UNRESOLVED_REFERENCE!>lazy<!> { 42 }<!>
val v: Int by <!UNRESOLVED_REFERENCE!>Delegates<!>.<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>lazy<!> { 42 }
}
enum class Your {
@@ -13,5 +13,5 @@ class B : A() {
fun test() {
B::foo checkType { _<KFunction2<B, String, String>>() }
<!INAPPLICABLE_CANDIDATE!>(B::hashCode)("No.")<!>
<!INAPPLICABLE_CANDIDATE!>(B::hashCode)<!>("No.")
}
@@ -29,7 +29,7 @@ private fun <T> lazy(init: () -> T): <!UNRESOLVED_REFERENCE!>kotlin.Lazy<T><!> {
}
object DefaultHttpClientWithBy : HttpClient by client {
val client by <!UNRESOLVED_REFERENCE!>lazy { HttpClientImpl() }<!>
val client by <!UNRESOLVED_REFERENCE!>lazy<!> { HttpClientImpl() }
}
object DefaultFqHttpClient : HttpClient by DefaultFqHttpClient.client {
@@ -11,7 +11,7 @@ fun test() {
const val <T> a3 = 0
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0
val <T> a5 by Delegate<Int>()
val <T> a6 by <!INAPPLICABLE_CANDIDATE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
val <T> a6 by <!INAPPLICABLE_CANDIDATE!>Delegate<!><<!UNRESOLVED_REFERENCE!>T<!>>()
}
class Delegate<F> {
@@ -11,7 +11,7 @@ fun test() {
const val <T> a3 = 0
<!INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> val <T> a4 = 0
val <T> a5 by Delegate<Int>()
val <T> a6 by <!INAPPLICABLE_CANDIDATE!>Delegate<<!UNRESOLVED_REFERENCE!>T<!>>()<!>
val <T> a6 by <!INAPPLICABLE_CANDIDATE!>Delegate<!><<!UNRESOLVED_REFERENCE!>T<!>>()
}
class Delegate<F> {
@@ -45,7 +45,7 @@ fun test() {
x4 checkType { _<Function1<Int, Unit>>() }
{ y: Int -> fun named14(): Int {return 1} }
val b = <!UNRESOLVED_REFERENCE!>(<!EXPRESSION_REQUIRED!>fun named15(): Boolean { return true }<!>)()<!>
val b = <!UNRESOLVED_REFERENCE!>(<!EXPRESSION_REQUIRED!>fun named15(): Boolean { return true }<!>)<!>()
baz(<!EXPRESSION_REQUIRED!>fun named16(){}<!>)
}
@@ -5,10 +5,10 @@ import kotlin.reflect.KProperty
class A
class D {
val c: Int by <!UNRESOLVED_REFERENCE!>IncorrectThis<A>()<!>
val c: Int by <!UNRESOLVED_REFERENCE!>IncorrectThis<!><A>()
}
val cTopLevel: Int by <!UNRESOLVED_REFERENCE!>IncorrectThis<A>()<!>
val cTopLevel: Int by <!UNRESOLVED_REFERENCE!>IncorrectThis<!><A>()
class IncorrectThis<T> {
fun <R> get(t: Any?, p: KProperty<*>): Int {
@@ -4,10 +4,10 @@ package foo
import kotlin.reflect.KProperty
open class A {
val B.w: Int by <!INAPPLICABLE_CANDIDATE!>MyProperty()<!>
val B.w: Int by <!INAPPLICABLE_CANDIDATE!>MyProperty<!>()
}
val B.r: Int by <!INAPPLICABLE_CANDIDATE!>MyProperty()<!>
val B.r: Int by <!INAPPLICABLE_CANDIDATE!>MyProperty<!>()
val A.e: Int by MyProperty()
@@ -5,7 +5,7 @@ package test
import first.*
import second.*
val a12 by <!AMBIGUITY!>A()<!>
val a12 by <!AMBIGUITY!>A<!>()
// FILE: first.kt
package first
@@ -8,4 +8,4 @@ class ValueWrapper()
fun setValue(v: Int) { backingValue = v }
}
val foo by <!INAPPLICABLE_CANDIDATE!>ValueWrapper()<!>
val foo by <!INAPPLICABLE_CANDIDATE!>ValueWrapper<!>()
@@ -1,3 +1,3 @@
val a: Int by <!UNRESOLVED_REFERENCE!>A()<!>
val a: Int by <!UNRESOLVED_REFERENCE!>A<!>()
class A
@@ -5,7 +5,7 @@
import kotlin.reflect.KProperty
class B {
val c by <!INAPPLICABLE_CANDIDATE!><!INAPPLICABLE_CANDIDATE!>Delegate<!>(<!UNRESOLVED_REFERENCE!>ag<!>)<!>
val c by <!INAPPLICABLE_CANDIDATE, INAPPLICABLE_CANDIDATE!>Delegate<!>(<!UNRESOLVED_REFERENCE!>ag<!>)
}
class Delegate<T: Any>(val init: T) {
@@ -10,5 +10,5 @@ object T2 {
operator fun <T> Foo<T>.getValue(receiver: String, p: Any?): T = TODO()
val String.test1: String by delegate()
val test2: String by <!INAPPLICABLE_CANDIDATE!>delegate()<!>
val test2: String by <!INAPPLICABLE_CANDIDATE!>delegate<!>()
}
@@ -4,7 +4,7 @@
import kotlin.reflect.KProperty
class A {
var a: Int by <!INAPPLICABLE_CANDIDATE!>Delegate()<!>
var a: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!>()
}
var aTopLevel: Int by Delegate()
@@ -4,10 +4,10 @@
import kotlin.reflect.KProperty
class A {
var a: Int by <!INAPPLICABLE_CANDIDATE!>Delegate()<!>
var a: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!>()
}
var aTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate()<!>
var aTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!>()
class Delegate {
fun getValue(t: Nothing, p: KProperty<*>): Int {
@@ -3,7 +3,7 @@
import kotlin.reflect.KProperty
class A {
val c: Int by <!NONE_APPLICABLE!>Delegate()<!>
val c: Int by <!NONE_APPLICABLE!>Delegate<!>()
}
class Delegate {
@@ -5,10 +5,10 @@ import kotlin.reflect.KProperty
class A
class B {
val b: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<A>()<!>
val b: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!><A>()
}
val bTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<A>()<!>
val bTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!><A>()
class C {
val c: Int by Delegate<C>()
@@ -4,10 +4,10 @@
import kotlin.reflect.KProperty
class B {
val b: Int by <!INAPPLICABLE_CANDIDATE!>Delegate()<!>
val b: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!>()
}
val bTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate()<!>
val bTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!>()
class A
@@ -3,10 +3,10 @@
import kotlin.reflect.KProperty
class A {
val a: Int by <!INAPPLICABLE_CANDIDATE!>Delegate()<!>
val a: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!>()
}
val aTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate()<!>
val aTopLevel: Int by <!INAPPLICABLE_CANDIDATE!>Delegate<!>()
class Delegate {
fun getValue(t: Any?, p: KProperty<*>, a: Int): Int {
@@ -35,7 +35,7 @@ fun test4() {
// should be an error on receiver, shouldn't be thrown away
fun test5() {
1.<!UNRESOLVED_REFERENCE!>(fun String.()=1)()<!>
1.<!UNRESOLVED_REFERENCE!>(fun String.()=1)<!>()
}
fun <R: Any> R?.sure() : R = this!!
@@ -1,9 +1,9 @@
// !WITH_NEW_INFERENCE
val receiver = { Int.(<!SYNTAX!><!>) <!SYNTAX!>-><!> }
val receiverWithParameter = { Int.(<!UNRESOLVED_REFERENCE!>a<!>) <!SYNTAX!>-><!> }
val receiverWithParameter = { <!UNRESOLVED_REFERENCE!>Int.(a)<!> <!SYNTAX!>-><!> }
val receiverAndReturnType = { Int.(<!SYNTAX!><!>)<!SYNTAX!>: Int -> 5<!> }
val receiverAndReturnTypeWithParameter = { Int.(<!UNRESOLVED_REFERENCE!>a<!><!SYNTAX!><!SYNTAX!><!>: Int): Int -> 5<!> }
val receiverAndReturnTypeWithParameter = { Int.(a<!SYNTAX!><!SYNTAX!><!>: Int): Int -> 5<!> }
val returnType = { (<!SYNTAX!><!>): Int -> 5 }
val returnTypeWithParameter = { <!COMPONENT_FUNCTION_MISSING!>(b: Int): Int<!> -> 5 }
@@ -7,4 +7,4 @@ object Z {
infix fun add(b : Foo.() -> Unit) : Z = Z
}
val t2 = Z <!INAPPLICABLE_CANDIDATE!>add<!> <!INAPPLICABLE_CANDIDATE!>{ } { }<!>
val t2 = Z <!INAPPLICABLE_CANDIDATE!>add<!> <!INAPPLICABLE_CANDIDATE!>{ }<!> { }
@@ -40,7 +40,7 @@ fun foo() {
property1 = 1
val
propertyWithBy by <!UNRESOLVED_REFERENCE!><!UNRESOLVED_REFERENCE!>lazy<!> { 1 }<!>
propertyWithBy by <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>lazy<!> { 1 }
val
propertyWithType: Int
@@ -2,6 +2,6 @@ fun test1(i: Int) = { i ->
i
}(i)
fun test2() = <!INAPPLICABLE_CANDIDATE!>{ i -> i }()<!>
fun test2() = <!INAPPLICABLE_CANDIDATE!>{ i -> i }<!>()
fun test3() = { i -> i }(1)
+1 -1
View File
@@ -3,5 +3,5 @@ fun Any.foo1() : (i : Int) -> Unit {
}
fun test(a : Any) {
<!INAPPLICABLE_CANDIDATE!>a.foo1()()<!>
a.<!INAPPLICABLE_CANDIDATE!>foo1<!>()()
}
+2 -2
View File
@@ -6,13 +6,13 @@ package toplevelObjectDeclarations
<!INAPPLICABLE_CANDIDATE!>class T : Foo {}<!>
<!INAPPLICABLE_CANDIDATE!>object A<!> : Foo {
<!INAPPLICABLE_CANDIDATE!>object A : Foo {
val x : Int = 2
fun test() : Int {
return x + foo()
}
}
}<!>
object B : A {}
@@ -19,5 +19,5 @@ public class J {
// FILE: k.kt
var A by J.staticNN
var B by <!UNSAFE_CALL!>J.staticN<!>
var B by J<!UNSAFE_CALL!>.<!>staticN
var C by J.staticJ
@@ -1,2 +1,2 @@
// !WITH_NEW_INFERENCE
val unwrapped = <!UNRESOLVED_REFERENCE!>some<!><!UNRESOLVED_REFERENCE!><<!><!UNRESOLVED_REFERENCE!><!UNRESOLVED_REFERENCE!><!UNRESOLVED_REFERENCE!><!UNRESOLVED_REFERENCE!>sdf<!>()()<!><out Any><!>::unwrap<!>
val unwrapped = <!UNRESOLVED_REFERENCE!>some<!><!UNRESOLVED_REFERENCE!><<!><!UNRESOLVED_REFERENCE!><!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>sdf<!>()()<out Any>::unwrap<!>
@@ -14,5 +14,5 @@ import foo.foo as invoke
import foo.invoke
fun main(args: Array<String>) {
<!AMBIGUITY!>42()<!>
<!AMBIGUITY!>42<!>()
}
@@ -7,5 +7,5 @@ fun Int.invoke(a: Any, i: Int) {}
fun foo(i: Int) {
<!AMBIGUITY!>i<!>(1, 1)
<!AMBIGUITY!>5(1, 2)<!>
<!AMBIGUITY!>5<!>(1, 2)
}
@@ -6,5 +6,5 @@ class My {
fun My.foo(i: Int) {
<!HIDDEN!>i<!>("")
<!HIDDEN!>1("")<!>
<!HIDDEN!>1<!>("")
}
@@ -7,5 +7,5 @@ fun test1(f: String.() -> Unit) {
fun test2(f: (Int) -> Int) {
1.<!UNRESOLVED_REFERENCE!>f<!>(2)
2.(<!UNRESOLVED_REFERENCE!>f<!>)(2)
2.<!UNRESOLVED_REFERENCE!>(f)<!>(2)
}
@@ -10,5 +10,5 @@ fun foo(s: String, ai: A<Int>) {
<!INAPPLICABLE_CANDIDATE!>s<!>(ai)
<!INAPPLICABLE_CANDIDATE!>""(ai)<!>
<!INAPPLICABLE_CANDIDATE!>""<!>(ai)
}
@@ -1,5 +1,5 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
fun foo(i: Int) {
<!UNRESOLVED_REFERENCE!>i<!>()
<!UNRESOLVED_REFERENCE!>1()<!>
<!UNRESOLVED_REFERENCE!>1<!>()
}
@@ -6,5 +6,5 @@ operator fun String.invoke(i: Int) {}
fun foo(s: String?) {
<!UNSAFE_IMPLICIT_INVOKE_CALL!>s<!>(1)
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(s ?: null)(1)<!>
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(s ?: null)<!>(1)
}
@@ -1,17 +1,17 @@
// !WITH_NEW_INFERENCE
fun test1() {
1. <!UNRESOLVED_REFERENCE!>(fun String.(i: Int) = i )(1)<!>
1.<!UNRESOLVED_REFERENCE!>(label@ fun String.(i: Int) = i )(1)<!>
1. <!UNRESOLVED_REFERENCE!>(fun String.(i: Int) = i )<!>(1)
1.<!UNRESOLVED_REFERENCE!>(label@ fun String.(i: Int) = i )<!>(1)
}
fun test2(f: String.(Int) -> Unit) {
11.(<!INAPPLICABLE_CANDIDATE!>f<!>)(1)
11.(<!INAPPLICABLE_CANDIDATE!>f<!>)()
11.<!INAPPLICABLE_CANDIDATE!>(f)<!>(1)
11.<!INAPPLICABLE_CANDIDATE!>(f)<!>()
}
fun test3() {
fun foo(): String.(Int) -> Unit = {}
1.<!UNRESOLVED_REFERENCE!>(foo())(1)<!>
1.<!UNRESOLVED_REFERENCE!>(foo())<!>(1)
}
@@ -6,5 +6,5 @@ fun String.invoke(i: Int) {}
fun foo(i: Int) {
<!INAPPLICABLE_CANDIDATE!>i<!>(1)
<!INAPPLICABLE_CANDIDATE!>1(1)<!>
<!INAPPLICABLE_CANDIDATE!>1<!>(1)
}
@@ -2,17 +2,17 @@ class A(val x: (String.() -> Unit)?)
fun test(a: A) {
if (a.x != null) {
"".<!UNRESOLVED_REFERENCE!>(a.x)()<!>
"".<!UNRESOLVED_REFERENCE!>(a.x)<!>()
a.x("") // todo
(a.x)("")
}
"".<!UNRESOLVED_REFERENCE!>(a.x)()<!>
"".<!UNRESOLVED_REFERENCE!>(a.x)<!>()
a.<!UNSAFE_IMPLICIT_INVOKE_CALL!>x<!>("")
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)("")<!>
<!UNSAFE_IMPLICIT_INVOKE_CALL!>(a.x)<!>("")
with("") {
a.<!INAPPLICABLE_CANDIDATE!>x<!>()
<!INAPPLICABLE_CANDIDATE!>(a.x)()<!>
<!INAPPLICABLE_CANDIDATE!>(a.x)<!>()
if (a.x != null) {
a.<!INAPPLICABLE_CANDIDATE!>x<!>() // todo
(a.x)()
@@ -8,7 +8,7 @@ class B
val A.foo: B.() -> Unit get() = {}
fun test(a: A, b: B) {
b.<!UNRESOLVED_REFERENCE!>(a.foo)()<!>
b.<!UNRESOLVED_REFERENCE!>(a.foo)<!>()
(a.foo)(b)
a.foo(b)
@@ -17,7 +17,7 @@ fun test(a: A, b: B) {
b.(foo)()
<!INAPPLICABLE_CANDIDATE!>(b.<!INAPPLICABLE_CANDIDATE!>foo<!>)()<!>
<!INAPPLICABLE_CANDIDATE!>(b.<!INAPPLICABLE_CANDIDATE!>foo<!>)<!>()
foo(b)
(foo)(b)
@@ -25,7 +25,7 @@ fun test(a: A, b: B) {
with(b) {
a.<!INAPPLICABLE_CANDIDATE!>foo<!>()
a.(<!INAPPLICABLE_CANDIDATE!>foo<!>)()
a.<!INAPPLICABLE_CANDIDATE!>(foo)<!>()
(a.foo)()
@@ -50,7 +50,7 @@ class A {
class B
fun test(a: A, b: B) {
b.<!UNRESOLVED_REFERENCE!>(a.foo)()<!>
b.<!UNRESOLVED_REFERENCE!>(a.foo)<!>()
(a.foo)(b)
a.foo(b)
@@ -59,7 +59,7 @@ fun test(a: A, b: B) {
b.(foo)()
<!UNRESOLVED_REFERENCE!>(b.<!UNRESOLVED_REFERENCE!>foo<!>)()<!>
<!UNRESOLVED_REFERENCE!>(b.<!UNRESOLVED_REFERENCE!>foo<!>)<!>()
foo(b)
(foo)(b)
@@ -67,7 +67,7 @@ fun test(a: A, b: B) {
with(b) {
a.<!INAPPLICABLE_CANDIDATE!>foo<!>()
a.(<!INAPPLICABLE_CANDIDATE!>foo<!>)()
a.<!INAPPLICABLE_CANDIDATE!>(foo)<!>()
(a.foo)()
-15
View File
@@ -1,15 +0,0 @@
// !WITH_NEW_INFERENCE
fun f(s: String, action: (String.() -> Unit)?) {
s.foo().bar().<!UNSAFE_IMPLICIT_INVOKE_CALL!>action<!>()
}
fun String.foo() = ""
fun String.bar() = ""
// --------------------------------------------------------
val functions: Map<String, () -> Any> = TODO()
fun run(name: String) = <!UNSAFE_IMPLICIT_INVOKE_CALL!>functions[name]()<!>
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !WITH_NEW_INFERENCE
fun f(s: String, action: (String.() -> Unit)?) {
@@ -5,7 +5,7 @@ class D : C {
{
val s = ""
<!UNRESOLVED_REFERENCE!>s<!>()
<!UNRESOLVED_REFERENCE!>""()<!>
<!UNRESOLVED_REFERENCE!>""<!>()
42
}())
@@ -2,6 +2,6 @@
open class A(p1: String)
class B() : A("") {
<!INAPPLICABLE_CANDIDATE, PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED!>constructor(s: String)<!> {
<!PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED!>constructor(s: String)<!><!INAPPLICABLE_CANDIDATE!><!> {
}
}
@@ -2,6 +2,6 @@ class A {
open inner class Inner
class Nested : Inner {
<!UNRESOLVED_REFERENCE!>constructor()<!>
constructor()<!UNRESOLVED_REFERENCE!><!>
}
}
@@ -2,5 +2,5 @@
open class A(p1: String, p2: String, p3: String, p4: String, p5: String)
class B : A {
<!INAPPLICABLE_CANDIDATE!>constructor(s: String)<!>
constructor(s: String)<!INAPPLICABLE_CANDIDATE!><!>
}