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
}
}