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

// ignore: import_internal_library
import 'dart:_js_helper';

/*element: field2a:read*/
@JSName('field2a')
get field2a => 42;

@JSName('field2a')
set field2a(_) {}

@JSName('field2b')
get field2b => 42;

/*element: field2b=:write*/
@JSName('field2b')
set field2b(_) {}

/*element: field2c:read*/
@JSName('field2c')
get field2c => 42;

/*element: field2c=:write*/
@JSName('field2c')
set field2c(_) {}

@Native('Class')
class Class {
  /*element: Class.field1a:read*/
  var field1a;

  /*element: Class.field1b:write*/
  var field1b;

  /*element: Class.field1c:read,write*/
  var field1c;

  /*element: Class.field2a:read*/
  get field2a => 42;

  set field2a(_) {}

  get field2b => 42;

  /*element: Class.field2b=:write*/
  set field2b(_) {}

  /*element: Class.field2c:read*/
  get field2c => 42;

  /*element: Class.field2c=:write*/
  set field2c(_) {}

  var field3a = 0;

  /*element: Class.field3b:init*/
  var field3b;

  /*element: Class.:invoke=(0)*/
  Class([this.field3b]);

  /*element: Class.test:invoke*/
  test() {
    field1a;
    field1b = 42;
    field1c = field1c;

    field2a;
    field2b = 42;
    field2c = field2c;
  }
}

/*element: main:invoke*/
main() {
  field2a;
  field2b = 42;
  field2c = field2c;

  new Class().test();
}
