[Inliner] Skip LDP accessors in `LocalClassesInInlineLambdasLowering`
^KT-77103 Fixed
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt
index 534c4bc..01204fe 100644
--- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/LocalClasses.kt
@@ -24,6 +24,7 @@
import org.jetbrains.kotlin.ir.util.isInlineParameter
import org.jetbrains.kotlin.ir.util.setDeclarationsParent
import org.jetbrains.kotlin.ir.visitors.*
+import org.jetbrains.kotlin.utils.addIfNotNull
/**
* Extracts local classes from inline lambdas.
@@ -69,7 +70,7 @@
val localClasses = mutableSetOf<IrClass>()
val localFunctions = mutableSetOf<IrFunction>()
- val adaptedFunctions = mutableSetOf<IrSimpleFunction>()
+ val functionsToSkip = mutableSetOf<IrSimpleFunction>()
val transformer = this
for (lambda in inlineLambdas) {
lambda.acceptChildrenVoid(object : IrVisitorVoid() {
@@ -77,6 +78,17 @@
element.acceptChildrenVoid(this)
}
+ override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty) {
+ functionsToSkip.add(declaration.getter)
+ functionsToSkip.addIfNotNull(declaration.setter)
+ }
+ })
+
+ lambda.acceptChildrenVoid(object : IrVisitorVoid() {
+ override fun visitElement(element: IrElement) {
+ element.acceptChildrenVoid(this)
+ }
+
override fun visitClass(declaration: IrClass) {
declaration.transformChildren(transformer, declaration)
@@ -120,7 +132,7 @@
// Skip adapted function references and inline lambdas - they will be inlined later.
val shouldSkip = argument != null && (argument.isAdaptedFunctionReference() || argument.isInlineLambdaBlock())
if (parameter.isInlineParameter() && shouldSkip)
- adaptedFunctions += (argument as IrBlock).statements[0] as IrSimpleFunction
+ functionsToSkip += (argument as IrBlock).statements[0] as IrSimpleFunction
else
argument?.acceptVoid(this)
}
@@ -150,7 +162,7 @@
// are also present in the inline lambda's parent declaration,
// which we will extract the local class to.
remapCapturedTypesInExtractedLocalDeclarations = false,
- ).lower(irBlock, container, data, localClasses, adaptedFunctions)
+ ).lower(irBlock, container, data, localClasses, functionsToSkip)
irBlock.statements.addAll(0, localClasses)
for (lambda in inlineLambdas) {