FIR checker: fix REFERENCE_BY_QUALIFIED positioning strategy to consider callable reference
This commit is contained in:
committed by
Mikhail Glukhikh
parent
8d8ed4cc18
commit
bfc7eb7bab
+2
-2
@@ -24,7 +24,7 @@ fun <T> Foo2<T>.setX(y: T): T {
|
||||
fun Float.bar() {}
|
||||
|
||||
fun test1() {
|
||||
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown"), UNRESOLVED_REFERENCE!>Foo<*>::setX<!>
|
||||
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown")!>Foo<*>::<!UNRESOLVED_REFERENCE!>setX<!><!>
|
||||
val foo = Foo<Float>(1f)
|
||||
|
||||
fooSetRef.<!UNRESOLVED_REFERENCE!>invoke<!>(foo, 1)
|
||||
@@ -42,7 +42,7 @@ fun test2() {
|
||||
}
|
||||
|
||||
fun test3() {
|
||||
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown"), UNRESOLVED_REFERENCE!>Foo2<*>::setX<!>
|
||||
val fooSetRef = <!DEBUG_INFO_EXPRESSION_TYPE("Type is unknown")!>Foo2<*>::<!UNRESOLVED_REFERENCE!>setX<!><!>
|
||||
val foo = Foo2<Int>(1)
|
||||
|
||||
fooSetRef.<!UNRESOLVED_REFERENCE!>invoke<!>(foo, "")
|
||||
|
||||
+22
-22
@@ -27,22 +27,22 @@ interface Foo {
|
||||
// CR on property with to receivers are forbidden
|
||||
fun <T: Foo> test() {
|
||||
// with LHS and property
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(<!UNRESOLVED_REFERENCE!>Foo::x1<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(<!UNRESOLVED_REFERENCE!>Foo::x1<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(<!UNRESOLVED_REFERENCE!>Foo::x1<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(Foo::<!UNRESOLVED_REFERENCE!>x1<!>)
|
||||
|
||||
// with LHS and mutable property
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(<!UNRESOLVED_REFERENCE!>Foo::x2<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(<!UNRESOLVED_REFERENCE!>Foo::x2<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(<!UNRESOLVED_REFERENCE!>Foo::x2<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(Foo::<!UNRESOLVED_REFERENCE!>x2<!>)
|
||||
|
||||
// with LHS and propery + mutable property (mixed)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(<!UNRESOLVED_REFERENCE!>Foo::x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(<!UNRESOLVED_REFERENCE!>Foo::x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(<!UNRESOLVED_REFERENCE!>Foo::x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!><T>(<!UNRESOLVED_REFERENCE!>Foo::x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!><Foo>(<!UNRESOLVED_REFERENCE!>Foo::x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!>(<!UNRESOLVED_REFERENCE!>Foo::x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar8<!>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!><T>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!><Foo>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar9<!>(Foo::<!UNRESOLVED_REFERENCE!>x3<!>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,14 +84,14 @@ fun <T : Foo, R: Number, D: Int> main() {
|
||||
bar1(::resolve) // OK
|
||||
|
||||
// with LHS and conflicting projection
|
||||
bar2<T>(<!UNRESOLVED_REFERENCE!>Foo::resolve<!>)
|
||||
bar2<Foo>(<!UNRESOLVED_REFERENCE!>Foo::resolve<!>)
|
||||
bar2(<!UNRESOLVED_REFERENCE!>Foo::resolve<!>)
|
||||
bar2<T>(Foo::<!UNRESOLVED_REFERENCE!>resolve<!>)
|
||||
bar2<Foo>(Foo::<!UNRESOLVED_REFERENCE!>resolve<!>)
|
||||
bar2(Foo::<!UNRESOLVED_REFERENCE!>resolve<!>)
|
||||
|
||||
// with LHS and Any? expected type
|
||||
bar3<T>(<!UNRESOLVED_REFERENCE!>Foo::resolve<!>)
|
||||
bar3<Foo>(<!UNRESOLVED_REFERENCE!>Foo::resolve<!>)
|
||||
bar3(<!UNRESOLVED_REFERENCE!>Foo::resolve<!>)
|
||||
bar3<T>(Foo::<!UNRESOLVED_REFERENCE!>resolve<!>)
|
||||
bar3<Foo>(Foo::<!UNRESOLVED_REFERENCE!>resolve<!>)
|
||||
bar3(Foo::<!UNRESOLVED_REFERENCE!>resolve<!>)
|
||||
|
||||
// with LHS and `Function` expected type
|
||||
bar4<T>(Foo::resolve) // ERROR before the fix in NI
|
||||
@@ -114,14 +114,14 @@ fun <T : Foo, R: Number, D: Int> main() {
|
||||
bar7(Foo::resolve) // OK
|
||||
|
||||
// with LHS and sentension function expected type
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><D>(<!UNRESOLVED_REFERENCE!>Int::x1<!>) // ERROR before the fix in NI
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><D>(Int::<!UNRESOLVED_REFERENCE!>x1<!>) // ERROR before the fix in NI
|
||||
bar10<Int>(Int::x1) // OK
|
||||
bar10(Int::x1) // OK
|
||||
|
||||
fun Int.ext() {
|
||||
// with LHS and sentension function expected type
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><D>(<!UNRESOLVED_REFERENCE!>::x1<!>) // ERROR before the fix in NI
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><Int>(<!UNRESOLVED_REFERENCE!>::x1<!>) // OK
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!>(<!UNRESOLVED_REFERENCE!>::x1<!>) // OK
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><D>(::<!UNRESOLVED_REFERENCE!>x1<!>) // ERROR before the fix in NI
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!><Int>(::<!UNRESOLVED_REFERENCE!>x1<!>) // OK
|
||||
<!INAPPLICABLE_CANDIDATE!>bar10<!>(::<!UNRESOLVED_REFERENCE!>x1<!>) // OK
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -12,5 +12,5 @@ fun <V, T : V?> G<T>.foo(vararg values: V2<V?>) = build()
|
||||
fun forReference(ref: Any?) {}
|
||||
|
||||
fun test() {
|
||||
forReference(<!UNRESOLVED_REFERENCE!>G<Int?>::foo<!>)
|
||||
forReference(G<Int?>::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
}
|
||||
|
||||
+1
-1
@@ -7,5 +7,5 @@ fun foo(i: Long) {}
|
||||
fun bar(f: (Boolean) -> Unit) {}
|
||||
|
||||
fun test() {
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(<!UNRESOLVED_REFERENCE!>::foo<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
}
|
||||
|
||||
@@ -6,5 +6,5 @@ fun foo(x: Float) = 10f
|
||||
fun foo(x: String) = ""
|
||||
|
||||
fun main() {
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(<!UNRESOLVED_REFERENCE!>::foo<!>) // no report about unresolved callable reference for `foo`
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(::<!UNRESOLVED_REFERENCE!>foo<!>) // no report about unresolved callable reference for `foo`
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -3,5 +3,5 @@ fun <T, U> T.map(f: (T) -> U) = f(this)
|
||||
fun consume(s: String) {}
|
||||
|
||||
fun test() {
|
||||
consume(1.<!INAPPLICABLE_CANDIDATE!>map<!>(<!UNRESOLVED_REFERENCE!>::foo<!>))
|
||||
}
|
||||
consume(1.<!INAPPLICABLE_CANDIDATE!>map<!>(::<!UNRESOLVED_REFERENCE!>foo<!>))
|
||||
}
|
||||
|
||||
+2
-2
@@ -3,13 +3,13 @@
|
||||
class Foo
|
||||
|
||||
fun main1() = when {
|
||||
else -> <!UNRESOLVED_REFERENCE!>Foo::plus<!>
|
||||
else -> Foo::<!UNRESOLVED_REFERENCE!>plus<!>
|
||||
}
|
||||
|
||||
fun main2() = if (true) Foo::minus else Foo::times
|
||||
|
||||
fun main3() = if (true) { Foo::minus } else { Foo::times }
|
||||
|
||||
fun main4() = try { Foo::minus } finally { <!UNRESOLVED_REFERENCE!>Foo::times<!> }
|
||||
fun main4() = try { Foo::minus } finally { Foo::<!UNRESOLVED_REFERENCE!>times<!> }
|
||||
|
||||
fun main5() = Foo::minus ?: Foo::times
|
||||
|
||||
+12
-12
@@ -129,7 +129,7 @@ fun poll36(flag: Boolean) {
|
||||
}
|
||||
|
||||
fun poll4() {
|
||||
val inv = try { ::bar } finally { <!UNRESOLVED_REFERENCE!>::foo<!> }
|
||||
val inv = try { ::bar } finally { ::<!UNRESOLVED_REFERENCE!>foo<!> }
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ fun poll41() {
|
||||
}
|
||||
|
||||
fun poll42() {
|
||||
val inv = try { ::bar3 } finally { <!UNRESOLVED_REFERENCE!>::foo3<!> }
|
||||
val inv = try { ::bar3 } finally { ::<!UNRESOLVED_REFERENCE!>foo3<!> }
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ fun poll43() {
|
||||
}
|
||||
|
||||
fun poll44() {
|
||||
val inv = try { ::bar5 } finally { <!UNRESOLVED_REFERENCE!>::foo5<!> }
|
||||
val inv = try { ::bar5 } finally { ::<!UNRESOLVED_REFERENCE!>foo5<!> }
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ fun poll46() {
|
||||
}
|
||||
|
||||
fun poll5() {
|
||||
val inv = try { ::bar } catch (e: Exception) { ::foo } finally { <!UNRESOLVED_REFERENCE!>::foo<!> }
|
||||
val inv = try { ::bar } catch (e: Exception) { ::foo } finally { ::<!UNRESOLVED_REFERENCE!>foo<!> }
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -174,7 +174,7 @@ fun poll51() {
|
||||
}
|
||||
|
||||
fun poll52() {
|
||||
val inv = try { ::bar3 } catch (e: Exception) { ::foo3 } finally { <!UNRESOLVED_REFERENCE!>::foo3<!> }
|
||||
val inv = try { ::bar3 } catch (e: Exception) { ::foo3 } finally { ::<!UNRESOLVED_REFERENCE!>foo3<!> }
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ fun poll53() {
|
||||
}
|
||||
|
||||
fun poll54() {
|
||||
val inv = try { ::bar5 } catch (e: Exception) { ::foo5 } finally { <!UNRESOLVED_REFERENCE!>::foo5<!> }
|
||||
val inv = try { ::bar5 } catch (e: Exception) { ::foo5 } finally { ::<!UNRESOLVED_REFERENCE!>foo5<!> }
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ fun poll56() {
|
||||
}
|
||||
|
||||
fun poll6() {
|
||||
val inv = <!UNRESOLVED_REFERENCE!>::bar<!>
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar<!>
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@ fun poll61() {
|
||||
}
|
||||
|
||||
fun poll62() {
|
||||
val inv = <!UNRESOLVED_REFERENCE!>::bar3<!>
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar3<!>
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ fun poll63() {
|
||||
}
|
||||
|
||||
fun poll64() {
|
||||
val inv = <!UNRESOLVED_REFERENCE!>::bar5<!>
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar5<!>
|
||||
inv
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ fun poll76() {
|
||||
}
|
||||
|
||||
fun poll8() {
|
||||
val inv = <!UNRESOLVED_REFERENCE!>::bar<!> <!NONE_APPLICABLE!>in<!> <!NONE_APPLICABLE!>setOf<!>(<!UNRESOLVED_REFERENCE!>::foo<!>)
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar<!> <!NONE_APPLICABLE!>in<!> <!NONE_APPLICABLE!>setOf<!>(::<!UNRESOLVED_REFERENCE!>foo<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -279,7 +279,7 @@ fun poll81() {
|
||||
}
|
||||
|
||||
fun poll82() {
|
||||
val inv = <!UNRESOLVED_REFERENCE!>::bar3<!> <!NONE_APPLICABLE!>in<!> <!NONE_APPLICABLE!>setOf<!>(<!UNRESOLVED_REFERENCE!>::foo3<!>)
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar3<!> <!NONE_APPLICABLE!>in<!> <!NONE_APPLICABLE!>setOf<!>(::<!UNRESOLVED_REFERENCE!>foo3<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>inv<!>()
|
||||
}
|
||||
|
||||
@@ -289,7 +289,7 @@ fun poll83() {
|
||||
}
|
||||
|
||||
fun poll84() {
|
||||
val inv = <!UNRESOLVED_REFERENCE!>::bar5<!> <!NONE_APPLICABLE!>in<!> <!NONE_APPLICABLE!>setOf<!>(<!UNRESOLVED_REFERENCE!>::foo5<!>)
|
||||
val inv = ::<!UNRESOLVED_REFERENCE!>bar5<!> <!NONE_APPLICABLE!>in<!> <!NONE_APPLICABLE!>setOf<!>(::<!UNRESOLVED_REFERENCE!>foo5<!>)
|
||||
inv
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user