diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.fir.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.fir.txt index bf84fa6d262..304448a68f5 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.fir.txt @@ -13,8 +13,8 @@ FILE: superIsNotAnExpression.kt public final fun act(): R|kotlin/Unit| { #() #() - #( = @fun .(): { - println#(ERROR_EXPR(Incorrect character: 'weird')) + #( = @fun (): R|ERROR CLASS: Unresolved name: println| { + ^ #(ERROR_EXPR(Incorrect character: 'weird')) } ) } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.kt index ad4f40fa5f2..22f7caf5bcd 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/superIsNotAnExpression.kt @@ -7,7 +7,7 @@ class B: A() { invoke() super { - println('weird') + println('weird') } } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 61f458b8844..ed23f1d3193 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -262,7 +262,14 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform if (functionCall.calleeReference is FirResolvedNamedReference && functionCall.resultType is FirImplicitTypeRef) { storeTypeFromCallee(functionCall) } - if (functionCall.calleeReference !is FirSimpleNamedReference) return functionCall.compose() + if (functionCall.calleeReference !is FirSimpleNamedReference) { + // The callee reference can be resolved as an error very early, e.g., `super` as a callee during raw FIR creation. + // We still need to visit/transform other parts, e.g., call arguments, to check if any other errors are there. + if (functionCall.calleeReference !is FirResolvedNamedReference) { + functionCall.transformChildren(transformer, data) + } + return functionCall.compose() + } if (functionCall.calleeReference is FirNamedReferenceWithCandidate) return functionCall.compose() dataFlowAnalyzer.enterCall() functionCall.transformAnnotations(transformer, data)