getPropertyInView function

Expression getPropertyInView(
  1. Expression property,
  2. CompileView callingView,
  3. CompileView definedView
)

Implementation

o.Expression getPropertyInView(
  o.Expression property,
  CompileView callingView,
  CompileView definedView,
) {
  if (identical(callingView, definedView)) {
    return property;
  } else {
    o.Expression? viewProp;
    var currView = callingView;
    while (!identical(currView, definedView) &&
        currView.declarationElement.view != null) {
      currView = currView.declarationElement.view!;
      viewProp = viewProp == null
          ? o.ReadClassMemberExpr('parentView')
          : viewProp.prop('parentView');
      viewProp = viewProp.notNull();
    }
    if (!identical(currView, definedView)) {
      throw StateError('Internal error: Could not calculate a property '
          'in a parent view: $property');
    }

    // Don't cast properties of `RenderView`.
    return replaceReadClassMemberInExpression(
        property,
        (name) => _renderViewProperties.contains(name)
            ? viewProp!
            : unsafeCast(viewProp!, definedView.classType));
  }
}