// Copyright (c) 2017, 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.

@JS()
library js_interop;

import 'package:js/js.dart';

/*element: main:[null]*/
main() {
  anonymousClass();
  jsInteropClass();
}

@JS()
@anonymous
class Class1 {
  /*element: Class1.:[null|subclass=Object]*/
  external factory Class1(
      {/*[exact=JSUInt31]*/ a, /*Value([exact=JSString], value: "")*/ b});
}

/*strong.element: anonymousClass:[null|subclass=JavaScriptObject]*/
anonymousClass() => new Class1(a: 1, b: '');

@JS()
class JsInteropClass {
  /*element: JsInteropClass.:[null|subclass=Object]*/
  external JsInteropClass();

  /*element: JsInteropClass.getter:[null|subclass=Object]*/
  external int get getter;

  external void set setter(int /*[subclass=JSInt]*/ value);

  /*element: JsInteropClass.method:[null|subclass=Object]*/
  external int method(int /*[exact=JSUInt31]*/ a);
}

/*element: jsInteropClass:[subclass=JSInt]*/
jsInteropClass() {
  JsInteropClass cls = new JsInteropClass();
  return cls. /*update: [null|subclass=JavaScriptObject]*/ setter =
      cls. /*[null|subclass=JavaScriptObject]*/ getter
          /*invoke: [null|subclass=JSInt]*/ +
          cls. /*invoke: [subclass=JavaScriptObject]*/ method(0)
          /*invoke: [subclass=JSInt]*/ +
          10;
}
