diff --git a/compiler/fir/analysis-tests/testData/resolve/localClasses/lambdaWithAnonymousObject.fir.txt b/compiler/fir/analysis-tests/testData/resolve/localClasses/lambdaWithAnonymousObject.fir.txt index 2311d2364f2..48718f08349 100644 --- a/compiler/fir/analysis-tests/testData/resolve/localClasses/lambdaWithAnonymousObject.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/localClasses/lambdaWithAnonymousObject.fir.txt @@ -13,8 +13,8 @@ FILE: lambdaWithAnonymousObject.kt super() } - public open override val action: R|() -> kotlin/Unit| = myRun@fun (): R|kotlin/Unit| { - ^@myRun Unit + public open override val action: R|() -> kotlin/Unit| = fun (): R|kotlin/Unit| { + ^ Unit } public get(): R|() -> kotlin/Unit| diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 84d40b27565..7cdbc3914b4 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -1186,7 +1186,11 @@ class DeclarationsConverter( accessors += it } BACKING_FIELD -> fieldDeclaration = it - else -> if (it.isExpression()) propertyInitializer = expressionConverter.getAsFirExpression(it, "Should have initializer") + else -> if (it.isExpression()) { + context.calleeNamesForLambda += null + propertyInitializer = expressionConverter.getAsFirExpression(it, "Should have initializer") + context.calleeNamesForLambda.removeLast() + } } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 0aeb1aa3592..a70103e2f11 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1722,9 +1722,14 @@ open class RawFirBuilder( private fun KtDeclarationWithInitializer.toInitializerExpression() = runIf(hasInitializer()) { - buildOrLazyExpression(null) { + this@RawFirBuilder.context.calleeNamesForLambda += null + + val expression = buildOrLazyExpression(null) { initializer.toFirExpression("Should have initializer") } + + this@RawFirBuilder.context.calleeNamesForLambda.removeLast() + expression } private fun KtProperty.toFirProperty( diff --git a/compiler/testData/diagnostics/tests/labels/labelToOuterLambda.kt b/compiler/testData/diagnostics/tests/labels/labelToOuterLambda.kt index c9c6b56abe1..9cf72daa58f 100644 --- a/compiler/testData/diagnostics/tests/labels/labelToOuterLambda.kt +++ b/compiler/testData/diagnostics/tests/labels/labelToOuterLambda.kt @@ -1,5 +1,6 @@ // FIR_IDENTICAL -// ISSUE: KT-57880 +// ISSUE: KT-57880, KT-58076 +// DIAGNOSTICS: -UNUSED_VARIABLE, -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE fun outerLambda(action: String.() -> Unit) {} var lambda: Int.() -> Unit = {} @@ -18,4 +19,16 @@ fun main() { consumeInt(this@innerLambda) } } + + lateinit var c: Int.() -> Unit + val a = "hello".apply { + val b: Int.() -> Unit = { + this@apply.hello() + } + c = { + this@apply.hello() + } + } } + +fun String.hello() = this