diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt index 699112ce93a..cf9bdd15d16 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt @@ -31,6 +31,10 @@ class IrCompileTimeChecker( override fun visitElement(element: IrElement, data: Nothing?) = false + private fun IrDeclarationParent.getInnerDeclarations(): List { + return (this as? IrDeclarationContainer)?.declarations ?: (this as? IrStatementContainer)?.statements ?: emptyList() + } + private fun visitStatements(statements: List, data: Nothing?): Boolean { if (mode == EvaluationMode.ONLY_BUILTINS || mode == EvaluationMode.ONLY_INTRINSIC_CONST) { val statement = statements.singleOrNull() ?: return false @@ -149,8 +153,8 @@ class IrCompileTimeChecker( receiverComputable && initializerComputable } else -> { - val parent = owner.parent as IrDeclarationContainer - val getter = parent.declarations.filterIsInstance().singleOrNull { it == property }?.getter ?: return false + val declarations = owner.parent.getInnerDeclarations() + val getter = declarations.filterIsInstance().singleOrNull { it == property }?.getter ?: return false visitedStack.contains(getter) } } @@ -160,8 +164,8 @@ class IrCompileTimeChecker( if (expression.accessesTopLevelOrObjectField()) return false //todo check receiver? val property = expression.symbol.owner.correspondingPropertySymbol?.owner - val parent = expression.symbol.owner.parent as IrDeclarationContainer - val setter = parent.declarations.filterIsInstance().single { it == property }.setter ?: return false + val declarations = expression.symbol.owner.parent.getInnerDeclarations() + val setter = declarations.filterIsInstance().single { it == property }.setter ?: return false return visitedStack.contains(setter) && expression.value.accept(this, data) }