Create getInnerDeclarations function to extract statements from parent
This function is needed to be able to work with files and scripts
This commit is contained in:
+8
-4
@@ -31,6 +31,10 @@ class IrCompileTimeChecker(
|
|||||||
|
|
||||||
override fun visitElement(element: IrElement, data: Nothing?) = false
|
override fun visitElement(element: IrElement, data: Nothing?) = false
|
||||||
|
|
||||||
|
private fun IrDeclarationParent.getInnerDeclarations(): List<IrStatement> {
|
||||||
|
return (this as? IrDeclarationContainer)?.declarations ?: (this as? IrStatementContainer)?.statements ?: emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
private fun visitStatements(statements: List<IrStatement>, data: Nothing?): Boolean {
|
private fun visitStatements(statements: List<IrStatement>, data: Nothing?): Boolean {
|
||||||
if (mode == EvaluationMode.ONLY_BUILTINS || mode == EvaluationMode.ONLY_INTRINSIC_CONST) {
|
if (mode == EvaluationMode.ONLY_BUILTINS || mode == EvaluationMode.ONLY_INTRINSIC_CONST) {
|
||||||
val statement = statements.singleOrNull() ?: return false
|
val statement = statements.singleOrNull() ?: return false
|
||||||
@@ -149,8 +153,8 @@ class IrCompileTimeChecker(
|
|||||||
receiverComputable && initializerComputable
|
receiverComputable && initializerComputable
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
val parent = owner.parent as IrDeclarationContainer
|
val declarations = owner.parent.getInnerDeclarations()
|
||||||
val getter = parent.declarations.filterIsInstance<IrProperty>().singleOrNull { it == property }?.getter ?: return false
|
val getter = declarations.filterIsInstance<IrProperty>().singleOrNull { it == property }?.getter ?: return false
|
||||||
visitedStack.contains(getter)
|
visitedStack.contains(getter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,8 +164,8 @@ class IrCompileTimeChecker(
|
|||||||
if (expression.accessesTopLevelOrObjectField()) return false
|
if (expression.accessesTopLevelOrObjectField()) return false
|
||||||
//todo check receiver?
|
//todo check receiver?
|
||||||
val property = expression.symbol.owner.correspondingPropertySymbol?.owner
|
val property = expression.symbol.owner.correspondingPropertySymbol?.owner
|
||||||
val parent = expression.symbol.owner.parent as IrDeclarationContainer
|
val declarations = expression.symbol.owner.parent.getInnerDeclarations()
|
||||||
val setter = parent.declarations.filterIsInstance<IrProperty>().single { it == property }.setter ?: return false
|
val setter = declarations.filterIsInstance<IrProperty>().single { it == property }.setter ?: return false
|
||||||
return visitedStack.contains(setter) && expression.value.accept(this, data)
|
return visitedStack.contains(setter) && expression.value.accept(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user