From f1c2bdbe8c84cf8b01dc8d0348e5aa50f36818c3 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Thu, 25 Mar 2021 12:20:18 -0700 Subject: [PATCH] FIR checker: skip error named reference if receiver is unresolved Currently, FIR reports errors caused by previous resolution failure. For example with unresolved `a` and `b` in code `a.b`, both `a` and `b` are highlighted. FE1.0 only highlights `a` since it's the root cause. This change applies this heuristics when reporting FirDiagnostics. Original commit: fb14b0382428d0482b11b95e32606903293a128b GitOrigin-RevId: 20ba20c1b51cdb1e991d592112cf72e0ccff8118 --- .../testData/checker/LocalObjects.fir.kt | 21 +++++++++++++++++++ .../tests/testData/checker/LocalObjects.kt | 4 +--- .../testData/checker/NestedObjects.fir.kt | 2 +- .../tests/testData/checker/Unresolved.fir.kt | 4 ++-- .../testData/checker/infos/SmartCasts.fir.kt | 2 +- 5 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/checker/LocalObjects.fir.kt diff --git a/plugins/kotlin/idea/tests/testData/checker/LocalObjects.fir.kt b/plugins/kotlin/idea/tests/testData/checker/LocalObjects.fir.kt new file mode 100644 index 000000000000..09ad82edd1d0 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/checker/LocalObjects.fir.kt @@ -0,0 +1,21 @@ + object A { + val x : Int = 0 + } + + open class Foo { + fun foo() : Int = 1 + } + + fun test() { + A.x + val b = object : Foo() { + } + b.foo() + + object B { + fun foo() {} + } + B.foo() + } + + val bb = B.foo() diff --git a/plugins/kotlin/idea/tests/testData/checker/LocalObjects.kt b/plugins/kotlin/idea/tests/testData/checker/LocalObjects.kt index 5ef4a7a617f7..54adfe831ffe 100644 --- a/plugins/kotlin/idea/tests/testData/checker/LocalObjects.kt +++ b/plugins/kotlin/idea/tests/testData/checker/LocalObjects.kt @@ -1,5 +1,3 @@ -// FIR_IDENTICAL -// FIR_COMPARISON object A { val x : Int = 0 } @@ -20,4 +18,4 @@ B.foo() } - val bb = B.foo() + val bb = B.foo() diff --git a/plugins/kotlin/idea/tests/testData/checker/NestedObjects.fir.kt b/plugins/kotlin/idea/tests/testData/checker/NestedObjects.fir.kt index bcc77fbb2381..6232df7b6a23 100644 --- a/plugins/kotlin/idea/tests/testData/checker/NestedObjects.fir.kt +++ b/plugins/kotlin/idea/tests/testData/checker/NestedObjects.fir.kt @@ -25,4 +25,4 @@ package nestedObjects val b = B val c = A.B val d = A.B.A - val e = B.A.B + val e = B.A.B diff --git a/plugins/kotlin/idea/tests/testData/checker/Unresolved.fir.kt b/plugins/kotlin/idea/tests/testData/checker/Unresolved.fir.kt index 9a089ddb0901..1cc971d3c58a 100644 --- a/plugins/kotlin/idea/tests/testData/checker/Unresolved.fir.kt +++ b/plugins/kotlin/idea/tests/testData/checker/Unresolved.fir.kt @@ -23,11 +23,11 @@ fun testUnresolved() { else -> a } - for (j in collection) { + for (j in collection) { var i: Int = j i += 1 foo1(j) - } + } } fun foo1(i: Int) {} diff --git a/plugins/kotlin/idea/tests/testData/checker/infos/SmartCasts.fir.kt b/plugins/kotlin/idea/tests/testData/checker/infos/SmartCasts.fir.kt index 4aae9cdb2dd1..91c16c332fe1 100644 --- a/plugins/kotlin/idea/tests/testData/checker/infos/SmartCasts.fir.kt +++ b/plugins/kotlin/idea/tests/testData/checker/infos/SmartCasts.fir.kt @@ -103,7 +103,7 @@ fun f13(a : A?) { } else { a?.foo() - c.bar() + c.bar() } a?.foo()