[FIR] Don't report duplicated errors in function calls typeRefs
This commit is contained in:
+22
-4
@@ -12,10 +12,7 @@ import org.jetbrains.kotlin.fir.analysis.collectors.components.*
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBreakExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirContinueExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirErrorLoop
|
||||
import org.jetbrains.kotlin.fir.expressions.FirLoopJump
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.SessionHolder
|
||||
import org.jetbrains.kotlin.fir.resolve.collectImplicitReceivers
|
||||
@@ -71,6 +68,27 @@ abstract class AbstractDiagnosticCollector(
|
||||
element.acceptChildren(this)
|
||||
}
|
||||
|
||||
override fun visitFunctionCall(functionCall: FirFunctionCall) {
|
||||
functionCall.runComponents()
|
||||
// no need to visit typeRef because if there's
|
||||
// an error it should've been reported at the
|
||||
// corresponding declaration
|
||||
functionCall.annotations.forEach { it.accept(visitor) }
|
||||
functionCall.typeArguments.forEach { it.accept(visitor) }
|
||||
functionCall.explicitReceiver?.accept(visitor)
|
||||
if (functionCall.dispatchReceiver !== functionCall.explicitReceiver) {
|
||||
functionCall.dispatchReceiver.accept(visitor)
|
||||
}
|
||||
if (
|
||||
functionCall.extensionReceiver !== functionCall.explicitReceiver &&
|
||||
functionCall.extensionReceiver !== functionCall.dispatchReceiver
|
||||
) {
|
||||
functionCall.extensionReceiver.accept(visitor)
|
||||
}
|
||||
functionCall.argumentList.accept(visitor)
|
||||
functionCall.calleeReference.accept(visitor)
|
||||
}
|
||||
|
||||
private fun visitJump(loopJump: FirLoopJump) {
|
||||
loopJump.runComponents()
|
||||
loopJump.acceptChildren(this)
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ val x = object<T, K: Comparable<K>> {
|
||||
|
||||
fun case_4() {
|
||||
val x = object<T> {
|
||||
fun test() = 10 as <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>T<!>
|
||||
fun test() = 10 as <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>T<!>
|
||||
}
|
||||
|
||||
val y = x.test() // type y is T
|
||||
|
||||
Vendored
+1
-1
@@ -20,7 +20,7 @@ val x = object<T, K: Comparable<K>> {
|
||||
|
||||
fun case_4() {
|
||||
val x = object<T> {
|
||||
fun test() = 10 as <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>T<!>
|
||||
fun test() = 10 as <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>T<!>
|
||||
}
|
||||
|
||||
val y = x.test() // type y is T
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@ object DefaultHttpClientWithFun : HttpClient by fClient() {
|
||||
|
||||
private fun fClient() = HttpClientImpl()
|
||||
|
||||
private fun <T> lazy(init: () -> T): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>kotlin.Lazy<T><!> {
|
||||
private fun <T> lazy(init: () -> T): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>kotlin.Lazy<T><!> {
|
||||
init()
|
||||
null!!
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
data class A(val i: Int, val j: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>G<!>)
|
||||
data class B(val i: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>G<!>, val j: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>G<!>)
|
||||
data class A(val i: Int, val j: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>G<!>)
|
||||
data class B(val i: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>G<!>, val j: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>G<!>)
|
||||
|
||||
|
||||
fun fa(a: A) {
|
||||
|
||||
Vendored
+2
-2
@@ -7,14 +7,14 @@ open class Outer<X, Y> {
|
||||
|
||||
class Derived : Outer<String, Int>() {
|
||||
fun foo(): Inner<Char> = null!!
|
||||
fun baz(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>Alias<Char><!> = null!!
|
||||
fun baz(): <!UNRESOLVED_REFERENCE!>Alias<Char><!> = null!!
|
||||
}
|
||||
|
||||
|
||||
class A : Outer<Double, Short>() {
|
||||
class B : Outer<Float, Long>() {
|
||||
fun bar(): Inner<String> = null!!
|
||||
fun x(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>Alias<String><!> = null!!
|
||||
fun x(): <!UNRESOLVED_REFERENCE!>Alias<String><!> = null!!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -15,7 +15,7 @@ private fun <E> foobar() = {
|
||||
|
||||
class Derived : LocalOuter<Double, Short>() {
|
||||
fun foo(): LocalInner<Long> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LocalAlias<Char><!> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias<Char><!> = null!!
|
||||
}
|
||||
|
||||
Derived()
|
||||
@@ -32,7 +32,7 @@ private fun noParameters() = {
|
||||
|
||||
class Derived2 : LocalOuter2<Double, Short>() {
|
||||
fun foo(): LocalInner2<Long> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LocalAlias2<Char><!> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias2<Char><!> = null!!
|
||||
}
|
||||
|
||||
Derived2()
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ class Outer<T> {
|
||||
|
||||
class Derived : LocalOuter<Double, Short>() {
|
||||
fun foo(): LocalInner<Long> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LocalAlias<Char><!> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias<Char><!> = null!!
|
||||
}
|
||||
|
||||
Derived()
|
||||
@@ -34,7 +34,7 @@ class Outer<T> {
|
||||
|
||||
class Derived2 : LocalOuter2<Double, Short>() {
|
||||
fun foo(): LocalInner2<Long> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LocalAlias2<Char><!> = null!!
|
||||
fun bar(): <!UNRESOLVED_REFERENCE!>LocalAlias2<Char><!> = null!!
|
||||
}
|
||||
Derived2()
|
||||
}
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ open class BaseDerived2<X> : BaseDerived1<String, X>()
|
||||
|
||||
class Derived : BaseDerived2<Int>() {
|
||||
fun foo(): Inner<Char> = null!!
|
||||
fun baz(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>Alias<Char><!> = null!!
|
||||
fun baz(): <!UNRESOLVED_REFERENCE!>Alias<Char><!> = null!!
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
|
||||
@@ -8,7 +8,7 @@ fun <T> foo() {
|
||||
|
||||
val a: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LT<!> = emptyList()
|
||||
|
||||
fun localFun(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LT<!> {
|
||||
fun localFun(): <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LT<!> {
|
||||
typealias LLT = List<T>
|
||||
|
||||
val b: <!UNRESOLVED_REFERENCE, UNRESOLVED_REFERENCE!>LLT<!> = a
|
||||
|
||||
Reference in New Issue
Block a user