diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt index 9d71945b1bf..a6b4ca5e990 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt @@ -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) diff --git a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt index e9f346c80c5..c2dd8466f4b 100644 --- a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt +++ b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject.fir.kt @@ -20,7 +20,7 @@ val x = object> { fun case_4() { val x = object { - fun test() = 10 as T + fun test() = 10 as T } val y = x.test() // type y is T diff --git a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt index c07d58c4067..01ac5be3a6a 100644 --- a/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt +++ b/compiler/testData/diagnostics/tests/classObjects/typeParametersInAnnonymousObject_after.fir.kt @@ -20,7 +20,7 @@ val x = object> { fun case_4() { val x = object { - fun test() = 10 as T + fun test() = 10 as T } val y = x.test() // type y is T diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/fieldAsClassDelegate.fir.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/fieldAsClassDelegate.fir.kt index 01e93109cf9..897eecc371a 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/fieldAsClassDelegate.fir.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/fieldAsClassDelegate.fir.kt @@ -23,7 +23,7 @@ object DefaultHttpClientWithFun : HttpClient by fClient() { private fun fClient() = HttpClientImpl() -private fun lazy(init: () -> T): kotlin.Lazy { +private fun lazy(init: () -> T): kotlin.Lazy { init() null!! } diff --git a/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt index 214862adfa0..8e62bac1471 100644 --- a/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt +++ b/compiler/testData/diagnostics/tests/dataClasses/errorTypesInDataClasses.fir.kt @@ -1,6 +1,6 @@ // !DIAGNOSTICS: -UNUSED_VARIABLE -data class A(val i: Int, val j: G) -data class B(val i: G, val j: G) +data class A(val i: Int, val j: G) +data class B(val i: G, val j: G) fun fa(a: A) { diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClasses.fir.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClasses.fir.kt index f0bc990e2d0..15dfefa3581 100644 --- a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClasses.fir.kt +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClasses.fir.kt @@ -7,14 +7,14 @@ open class Outer { class Derived : Outer() { fun foo(): Inner = null!! - fun baz(): Alias = null!! + fun baz(): Alias = null!! } class A : Outer() { class B : Outer() { fun bar(): Inner = null!! - fun x(): Alias = null!! + fun x(): Alias = null!! } } diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocal.fir.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocal.fir.kt index 91b3301689c..56416b2ca57 100644 --- a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocal.fir.kt +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocal.fir.kt @@ -15,7 +15,7 @@ private fun foobar() = { class Derived : LocalOuter() { fun foo(): LocalInner = null!! - fun bar(): LocalAlias = null!! + fun bar(): LocalAlias = null!! } Derived() @@ -32,7 +32,7 @@ private fun noParameters() = { class Derived2 : LocalOuter2() { fun foo(): LocalInner2 = null!! - fun bar(): LocalAlias2 = null!! + fun bar(): LocalAlias2 = null!! } Derived2() diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocalInsideInner.fir.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocalInsideInner.fir.kt index 1c3eef0747c..75447981b2f 100644 --- a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocalInsideInner.fir.kt +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesLocalInsideInner.fir.kt @@ -17,7 +17,7 @@ class Outer { class Derived : LocalOuter() { fun foo(): LocalInner = null!! - fun bar(): LocalAlias = null!! + fun bar(): LocalAlias = null!! } Derived() @@ -34,7 +34,7 @@ class Outer { class Derived2 : LocalOuter2() { fun foo(): LocalInner2 = null!! - fun bar(): LocalAlias2 = null!! + fun bar(): LocalAlias2 = null!! } Derived2() } diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesTransitive.fir.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesTransitive.fir.kt index 619348762a3..ccefd06ca5b 100644 --- a/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesTransitive.fir.kt +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/implicitArguments/fromSuperClassesTransitive.fir.kt @@ -10,7 +10,7 @@ open class BaseDerived2 : BaseDerived1() class Derived : BaseDerived2() { fun foo(): Inner = null!! - fun baz(): Alias = null!! + fun baz(): Alias = null!! } fun foo() { diff --git a/compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt b/compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt index 31df5e25d34..0d9ae2aef79 100644 --- a/compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt +++ b/compiler/testData/diagnostics/tests/typealias/localTypeAlias.kt @@ -8,7 +8,7 @@ fun foo() { val a: LT = emptyList() - fun localFun(): LT { + fun localFun(): LT { typealias LLT = List val b: LLT = a