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.
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
d6907222cd
commit
fb14b03824
+4
-4
@@ -3,18 +3,18 @@
|
||||
fun test1() {
|
||||
if (<!UNRESOLVED_REFERENCE!>rr<!>) {
|
||||
if (<!UNRESOLVED_REFERENCE!>l<!>) {
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.<!UNRESOLVED_REFERENCE!>q<!>()
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.q()
|
||||
}
|
||||
else {
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.<!UNRESOLVED_REFERENCE!>w<!>()
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.w()
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (<!UNRESOLVED_REFERENCE!>n<!>) {
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.<!UNRESOLVED_REFERENCE!>t<!>()
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.t()
|
||||
}
|
||||
else {
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.<!UNRESOLVED_REFERENCE!>u<!>()
|
||||
<!UNRESOLVED_REFERENCE!>a<!>.u()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -4,5 +4,5 @@ package bar
|
||||
fun main() {
|
||||
class Some
|
||||
|
||||
Some[<!SYNTAX!><!>] <!UNRESOLVED_REFERENCE!>names<!> <!SYNTAX!>=<!> <!NO_GET_METHOD!>["ads"]<!>
|
||||
Some[<!SYNTAX!><!>] names <!SYNTAX!>=<!> <!NO_GET_METHOD!>["ads"]<!>
|
||||
}
|
||||
|
||||
-50
@@ -1,50 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
fun println(x: String) {
|
||||
}
|
||||
|
||||
fun run(block: () -> Unit) {}
|
||||
|
||||
val propertyNameOnTheNextLine = 1
|
||||
|
||||
fun foo() {
|
||||
val<!SYNTAX!><!>
|
||||
println("abc")
|
||||
|
||||
val<!SYNTAX!><!>
|
||||
run {
|
||||
println("abc")
|
||||
}
|
||||
|
||||
val<!SYNTAX!><!>
|
||||
if (1 == 1) {
|
||||
|
||||
}
|
||||
|
||||
val<!SYNTAX!><!>
|
||||
(1 + 2)
|
||||
|
||||
// `propertyNameOnTheNextLine` parsed as simple name expression
|
||||
val<!SYNTAX!><!>
|
||||
propertyNameOnTheNextLine
|
||||
|
||||
val<!SYNTAX!><!>
|
||||
// comment
|
||||
propertyNameOnTheNextLine
|
||||
|
||||
val<!SYNTAX!><!> /* comment */
|
||||
propertyNameOnTheNextLine
|
||||
|
||||
// Correct properties
|
||||
val
|
||||
property1 = 1
|
||||
|
||||
val
|
||||
propertyWithBy by <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>lazy<!> { 1 }
|
||||
|
||||
val
|
||||
propertyWithType: Int
|
||||
|
||||
val
|
||||
(a, b) = <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>1<!>
|
||||
}
|
||||
compiler/testData/diagnostics/tests/incompleteCode/diagnosticWithSyntaxError/valWithNoNameInBlock.kt
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
|
||||
|
||||
fun println(x: String) {
|
||||
|
||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
||||
package b
|
||||
|
||||
fun foo() {
|
||||
<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>for (i in <!UNRESOLVED_REFERENCE!>collection<!>) {
|
||||
<!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>for (i in <!UNRESOLVED_REFERENCE!>collection<!>) {
|
||||
{
|
||||
break
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
fun foo(a: Int) {
|
||||
<!UNRESOLVED_REFERENCE!>!<!><!UNRESOLVED_REFERENCE!>bbb<!>
|
||||
!<!UNRESOLVED_REFERENCE!>bbb<!>
|
||||
<!UNRESOLVED_REFERENCE!>bbb<!> + a
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user