// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.7

/*member: AppView.:[subclass=AppView]*/
abstract class AppView<T> {
  /*member: AppView.ctx:Union(null, [exact=CardComponent2], [exact=CardComponent])*/
  T ctx;
}

/*member: CardComponent.:[exact=CardComponent]*/
class CardComponent {
  /*member: CardComponent.title:Value([null|exact=JSString], value: "foo")*/
  String title;
}

/*member: ViewCardComponent.:[exact=ViewCardComponent]*/
class ViewCardComponent extends AppView<CardComponent> {
  /*member: ViewCardComponent._title:Value([null|exact=JSString], value: "foo")*/
  var _title;

  @pragma('dart2js:noInline')
  set ng_title(String /*Value([exact=JSString], value: "foo")*/ value) {
    if (/*invoke: [exact=ViewCardComponent]*/ checkBinding(
        /*[exact=ViewCardComponent]*/ _title, value)) {
      /*[exact=ViewCardComponent]*/ ctx
          . /*update: [null|exact=CardComponent]*/ title = value;
      /*update: [exact=ViewCardComponent]*/ _title = value;
    }
  }

  /*member: ViewCardComponent.checkBinding:Value([exact=JSBool], value: true)*/
  checkBinding(/*Value([null|exact=JSString], value: "foo")*/ a,
          /*Value([exact=JSString], value: "foo")*/ b) =>
      true;
}

/*member: CardComponent2.:[exact=CardComponent2]*/
class CardComponent2 {
  /*member: CardComponent2.title:Value([null|exact=JSString], value: "bar")*/
  String title;
}

/*member: ViewCardComponent2.:[exact=ViewCardComponent2]*/
class ViewCardComponent2 extends AppView<CardComponent2> {
  /*member: ViewCardComponent2._title:Value([null|exact=JSString], value: "bar")*/
  var _title;

  @pragma('dart2js:noInline')
  set ng_title(String /*Value([exact=JSString], value: "bar")*/ value) {
    if (/*invoke: [exact=ViewCardComponent2]*/ checkBinding(
        /*[exact=ViewCardComponent2]*/ _title, value)) {
      /*[exact=ViewCardComponent2]*/ ctx
          . /*update: [null|exact=CardComponent2]*/ title = value;
      /*update: [exact=ViewCardComponent2]*/ _title = value;
    }
  }

  /*member: ViewCardComponent2.checkBinding:Value([exact=JSBool], value: true)*/
  checkBinding(/*Value([null|exact=JSString], value: "bar")*/ a,
          /*Value([exact=JSString], value: "bar")*/ b) =>
      true;
}

/*member: main:[null]*/
main() {
  var c1 = new ViewCardComponent();
  c1. /*update: [exact=ViewCardComponent]*/ ctx = new CardComponent();
  c1. /*update: [exact=ViewCardComponent]*/ ng_title = 'foo';
  var c2 = new ViewCardComponent2();
  c2. /*update: [exact=ViewCardComponent2]*/ ctx = new CardComponent2();
  c2. /*update: [exact=ViewCardComponent2]*/ ng_title = 'bar';
}
