fun computedProp()

in platf-skia/src/commonMain/kotlin/org/jetbrains/letsPlot/skia/shape/Node.kt [62:87]


    fun <T> computedProp(
        vararg dependencies: KProperty<*>,
        managed: Boolean,
        valueProvider: () -> T,
    ): PropertyDelegateProvider<Node, ReadOnlyProperty<Node, T>> {
        return PropertyDelegateProvider<Node, ReadOnlyProperty<Node, T>> { thisRef, property ->
            val computedProperty = ComputedProperty(valueProvider, thisRef::handlePropertyChange)
            computedPropInstances[property] = computedProperty

            val fullDeps = dependencies.map { directDep ->
                when (directDep) {
                    in computedPropDependencies -> computedPropDependencies[directDep]!!
                    in visualPropInstances -> setOf(directDep)
                    else -> error("Missing dependency: ${directDep.name}. All dependencies must be defines before")
                }
            }.flatten()

            computedPropDependencies[property] = fullDeps.toSet()

            if (managed) {
                propFinalizers[property] = { computedProperty.getValue(thisRef, property) as Managed? }
            }

            return@PropertyDelegateProvider computedProperty
        }
    }