[FIR] Improve diagnostic reporting & don't use error symbol for candidate if possible
Also introduce few new diagnostics: - NONE_APPLICABLE more many inapplicable candidates - HIDDEN for visible candidates
This commit is contained in:
committed by
Mikhail Glukhikh
parent
5c0528b61e
commit
f283f2db43
+2
-2
@@ -34,13 +34,13 @@ fun main() {
|
||||
<!AMBIGUITY!>foo3<!>(KotlinClass::baz)
|
||||
|
||||
// Type mismatch
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(KotlinClass::bar)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo1<!>(<!UNRESOLVED_REFERENCE!>KotlinClass::bar<!>)
|
||||
foo2(KotlinClass::bar)
|
||||
foo3(KotlinClass::bar)
|
||||
|
||||
foo1(KotlinClass2::bar)
|
||||
// Type mismatch
|
||||
<!INAPPLICABLE_CANDIDATE!>foo2<!>(KotlinClass2::bar)
|
||||
<!INAPPLICABLE_CANDIDATE!>foo2<!>(<!UNRESOLVED_REFERENCE!>KotlinClass2::bar<!>)
|
||||
foo3(KotlinClass2::bar)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -53,10 +53,10 @@ FILE: main.kt
|
||||
R|/foo1|(Q|KotlinClass|::R|/KotlinClass.Companion.baz|)
|
||||
R|/foo2|(Q|KotlinClass|::R|/KotlinClass.baz|)
|
||||
<Ambiguity: foo3, [/foo3, /foo3]>#(Q|KotlinClass|::R|/KotlinClass.baz|)
|
||||
<Inapplicable(INAPPLICABLE): [/foo1]>#(Q|KotlinClass|::R|/JavaClass.bar|)
|
||||
<Inapplicable(INAPPLICABLE): /foo1>#(Q|KotlinClass|::<Unresolved reference: bar>#)
|
||||
R|/foo2|(Q|KotlinClass|::R|/JavaClass.bar|)
|
||||
R|/foo3|(Q|KotlinClass|::R|/JavaClass.bar|)
|
||||
R|/foo1|(Q|KotlinClass2|::R|/KotlinClass2.Companion.bar|)
|
||||
<Inapplicable(INAPPLICABLE): [/foo2]>#(Q|KotlinClass2|::R|/KotlinClass2.bar|)
|
||||
<Inapplicable(INAPPLICABLE): /foo2>#(Q|KotlinClass2|::<Unresolved reference: bar>#)
|
||||
R|/foo3|(Q|KotlinClass2|::R|/KotlinClass2.Companion.bar|)
|
||||
}
|
||||
|
||||
+2
-2
@@ -7,6 +7,6 @@ fun <T> bar(f: (T) -> Unit, e: T) {}
|
||||
fun <T> baz(e: T, f: (T) -> Unit) {}
|
||||
|
||||
fun test(a: A, b: B) {
|
||||
<!INAPPLICABLE_CANDIDATE!>baz<!>(a, ::fooB)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(::fooB, a)
|
||||
<!INAPPLICABLE_CANDIDATE!>baz<!>(a, <!UNRESOLVED_REFERENCE!>::fooB<!>)
|
||||
<!INAPPLICABLE_CANDIDATE!>bar<!>(<!UNRESOLVED_REFERENCE!>::fooB<!>, a)
|
||||
}
|
||||
|
||||
+2
-2
@@ -10,6 +10,6 @@ FILE: resolveCallableReferencesAfterAllSimpleArguments.kt
|
||||
public final fun <T> baz(e: R|T|, f: R|(T) -> kotlin/Unit|): R|kotlin/Unit| {
|
||||
}
|
||||
public final fun test(a: R|A|, b: R|B|): R|kotlin/Unit| {
|
||||
<Inapplicable(INAPPLICABLE): [/baz]>#(R|<local>/a|, ::R|/fooB|)
|
||||
<Inapplicable(INAPPLICABLE): [/bar]>#(::R|/fooB|, R|<local>/a|)
|
||||
<Inapplicable(INAPPLICABLE): /baz>#<R|A|>(R|<local>/a|, ::<Unresolved reference: fooB>#)
|
||||
<Inapplicable(INAPPLICABLE): /bar>#<R|A|>(::<Unresolved reference: fooB>#, R|<local>/a|)
|
||||
}
|
||||
|
||||
+1
-1
@@ -3,5 +3,5 @@ fun <T, R> use(x: (T) -> R): (T) -> R = x
|
||||
fun foo() = use(::bar)
|
||||
fun bar(x: String) = 1
|
||||
|
||||
fun loop1() = <!INAPPLICABLE_CANDIDATE!>use<!>(::loop2)
|
||||
fun loop1() = <!INAPPLICABLE_CANDIDATE!>use<!>(<!UNRESOLVED_REFERENCE!>::loop2<!>)
|
||||
fun loop2() = loop1()
|
||||
|
||||
Vendored
+2
-2
@@ -8,8 +8,8 @@ FILE: implicitTypes.kt
|
||||
public final fun bar(x: R|kotlin/String|): R|kotlin/Int| {
|
||||
^bar Int(1)
|
||||
}
|
||||
public final fun loop1(): <ERROR TYPE REF: Inapplicable(INAPPLICABLE): [/use]> {
|
||||
^loop1 <Inapplicable(INAPPLICABLE): [/use]>#(::R|/loop2|)
|
||||
public final fun loop1(): R|(kotlin/Any?) -> kotlin/Nothing| {
|
||||
^loop1 <Inapplicable(INAPPLICABLE): /use>#<R|kotlin/Any?|, R|kotlin/Nothing|>(::<Unresolved reference: loop2>#)
|
||||
}
|
||||
public final fun loop2(): <ERROR TYPE REF: cycle> {
|
||||
^loop2 R|/loop1|()
|
||||
|
||||
Vendored
+1
-1
@@ -10,7 +10,7 @@ FILE: notIsNullOrEmpty.kt
|
||||
public final fun test_2(s: R|kotlin/String?|): R|kotlin/Unit| {
|
||||
when () {
|
||||
R|<local>/s|.R|kotlin/text/isNullOrEmpty|() -> {
|
||||
R|<local>/s|.<Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#
|
||||
R|<local>/s|.<Inapplicable(WRONG_RECEIVER): kotlin/String.length>#
|
||||
}
|
||||
else -> {
|
||||
R|<local>/s|.R|kotlin/String.length|
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ FILE: eqNotEq.kt
|
||||
R|<local>/x|.R|kotlin/String.length|
|
||||
}
|
||||
else -> {
|
||||
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [kotlin/String.length]>#
|
||||
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): kotlin/String.length>#
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ FILE: receivers.kt
|
||||
this@R|special/anonymous|.R|/myRequireNotNull|()
|
||||
}
|
||||
)
|
||||
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): [/foo]>#()
|
||||
R|<local>/x|.<Inapplicable(WRONG_RECEIVER): /foo>#()
|
||||
}
|
||||
public final fun test_4(x: R|A?|): R|kotlin/Unit| {
|
||||
R|kotlin/with|<R|A?|, R|kotlin/Unit|>(R|<local>/x|, <L> = with@fun R|A?|.<anonymous>(): R|kotlin/Unit| <kind=EXACTLY_ONCE> {
|
||||
|
||||
+8
-8
@@ -22,24 +22,24 @@ import j.JavaProtected
|
||||
import j.JavaPackageLocal
|
||||
|
||||
class A {
|
||||
val p1 = JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaPPackage<!>
|
||||
val p2 = JavaProtected.<!INAPPLICABLE_CANDIDATE!>javaPProtectedStatic<!>
|
||||
val p3 = JavaProtected().<!INAPPLICABLE_CANDIDATE!>javaPProtectedPackage<!>
|
||||
val p1 = JavaPackageLocal.<!HIDDEN!>javaPPackage<!>
|
||||
val p2 = JavaProtected.<!HIDDEN!>javaPProtectedStatic<!>
|
||||
val p3 = JavaProtected().<!HIDDEN!>javaPProtectedPackage<!>
|
||||
|
||||
fun test() {
|
||||
JavaProtected.<!INAPPLICABLE_CANDIDATE!>javaMProtectedStatic<!>()
|
||||
JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaMPackage<!>()
|
||||
JavaProtected.<!HIDDEN!>javaMProtectedStatic<!>()
|
||||
JavaPackageLocal.<!HIDDEN!>javaMPackage<!>()
|
||||
}
|
||||
}
|
||||
|
||||
class B : JavaProtected() {
|
||||
val p1 = JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaPPackage<!>
|
||||
val p1 = JavaPackageLocal.<!HIDDEN!>javaPPackage<!>
|
||||
val p2 = JavaProtected.javaPProtectedStatic
|
||||
val p3 = javaPProtectedPackage
|
||||
|
||||
fun test() {
|
||||
JavaProtected.javaMProtectedStatic()
|
||||
JavaPackageLocal.<!INAPPLICABLE_CANDIDATE!>javaMPackage<!>()
|
||||
JavaPackageLocal.<!HIDDEN!>javaMPackage<!>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,4 +59,4 @@ class C {
|
||||
JavaProtected.javaMProtectedStatic()
|
||||
JavaPackageLocal.javaMPackage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
-11
@@ -4,18 +4,18 @@ FILE: k.kt
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final val p1: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]> = Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>
|
||||
public final val p1: R|kotlin/Int| = Q|j/JavaPackageLocal|.<HIDDEN: j/JavaPackageLocal.javaPPackage is invisible>#
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val p2: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedStatic]> = Q|j/JavaProtected|.<Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedStatic]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedStatic]>
|
||||
public final val p2: R|kotlin/Int| = Q|j/JavaProtected|.<HIDDEN: j/JavaProtected.javaPProtectedStatic is invisible>#
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val p3: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedPackage]> = R|j/JavaProtected.JavaProtected|().<Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedPackage]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaProtected.javaPProtectedPackage]>
|
||||
public final val p3: R|kotlin/Int| = R|j/JavaProtected.JavaProtected|().<HIDDEN: j/JavaProtected.javaPProtectedPackage is invisible>#
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
Q|j/JavaProtected|.<Inapplicable(HIDDEN): [j/JavaProtected.javaMProtectedStatic]>#()
|
||||
Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaMPackage]>#()
|
||||
Q|j/JavaProtected|.<HIDDEN: j/JavaProtected.javaMProtectedStatic is invisible>#()
|
||||
Q|j/JavaPackageLocal|.<HIDDEN: j/JavaPackageLocal.javaMPackage is invisible>#()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,8 +24,8 @@ FILE: k.kt
|
||||
super<R|j/JavaProtected|>()
|
||||
}
|
||||
|
||||
public final val p1: <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]> = Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>#
|
||||
public get(): <ERROR TYPE REF: Inapplicable(HIDDEN): [j/JavaPackageLocal.javaPPackage]>
|
||||
public final val p1: R|kotlin/Int| = Q|j/JavaPackageLocal|.<HIDDEN: j/JavaPackageLocal.javaPPackage is invisible>#
|
||||
public get(): R|kotlin/Int|
|
||||
|
||||
public final val p2: R|kotlin/Int| = Q|j/JavaProtected|.R|j/JavaProtected.javaPProtectedStatic|
|
||||
public get(): R|kotlin/Int|
|
||||
@@ -35,7 +35,7 @@ FILE: k.kt
|
||||
|
||||
public final fun test(): R|kotlin/Unit| {
|
||||
Q|j/JavaProtected|.R|j/JavaProtected.javaMProtectedStatic|()
|
||||
Q|j/JavaPackageLocal|.<Inapplicable(HIDDEN): [j/JavaPackageLocal.javaMPackage]>#()
|
||||
Q|j/JavaPackageLocal|.<HIDDEN: j/JavaPackageLocal.javaMPackage is invisible>#()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Vendored
+2
-2
@@ -7,9 +7,9 @@ FILE: K1.kt
|
||||
}
|
||||
public final fun main(k: R|KSub|, vString: R|SuperClass.NestedInSuperClass<kotlin/String>|, vInt: R|SuperClass.NestedInSuperClass<kotlin/Int>|): R|kotlin/Unit| {
|
||||
R|<local>/k|.R|/J1.getImpl|().R|FakeOverride</J1.NestedIImpl.nestedI: R|kotlin/Unit|>|(R|<local>/vString|)
|
||||
R|<local>/k|.R|/J1.getImpl|().<Inapplicable(INAPPLICABLE): [/J1.NestedIImpl.nestedI]>#(R|<local>/vInt|)
|
||||
R|<local>/k|.R|/J1.getImpl|().<Inapplicable(INAPPLICABLE): /J1.NestedIImpl.nestedI>#(R|<local>/vInt|)
|
||||
R|<local>/k|.R|/J1.getNestedSubClass|().R|FakeOverride</J1.NestedSubClass.nested: R|kotlin/Unit|>|(String())
|
||||
R|<local>/k|.R|/J1.getNestedSubClass|().<Inapplicable(INAPPLICABLE): [/J1.NestedSubClass.nested]>#(Int(1))
|
||||
R|<local>/k|.R|/J1.getNestedSubClass|().<Inapplicable(INAPPLICABLE): /J1.NestedSubClass.nested>#(Int(1))
|
||||
}
|
||||
FILE: K2.kt
|
||||
public open class KFirst : R|SuperClass<kotlin/String>|, R|SuperI<kotlin/Int>| {
|
||||
|
||||
+1
-1
@@ -8,5 +8,5 @@ FILE: K1.kt
|
||||
FILE: K2.kt
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
Q|JavaClass|.R|/JavaClass.baz|(R|/KotlinClass.KotlinClass|())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): [/JavaClass.baz]>#(String())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): /JavaClass.baz>#(String())
|
||||
}
|
||||
|
||||
+2
-2
@@ -9,6 +9,6 @@ FILE: K2.kt
|
||||
public final fun main(): R|kotlin/Unit| {
|
||||
Q|JavaClass|.R|/JavaClass.baz|(R|/KotlinClass.KotlinClass|<R|ft<kotlin/Int, kotlin/Int?>!|>())
|
||||
Q|JavaClass|.R|/JavaClass.baz|(R|/KotlinClass.KotlinClass|<R|kotlin/Int|>())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): [/JavaClass.baz]>#(R|/KotlinClass.KotlinClass|<R|kotlin/String|>())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): [/JavaClass.baz]>#(String())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): /JavaClass.baz>#(R|/KotlinClass.KotlinClass|<R|kotlin/String|>())
|
||||
Q|JavaClass|.<Inapplicable(INAPPLICABLE): /JavaClass.baz>#(String())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user