// 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.

/*member: field1a:init,read*/
var field1a;

/*member: field1b:init,write*/
var field1b;

/*member: field1c:init,read,write*/
var field1c;

// Invocations of static/top level fields are converted into 'field1d.call(...)`
// so we don't have an invocation of the field but instead an additional dynamic
// call to 'call'.
/*member: field1d:init,read*/
var field1d;

/*member: field2a:read*/
get field2a => 42;

set field2a(_) {}

get field2b => 42;

/*member: field2b=:write*/
set field2b(_) {}

/*member: field2c:read*/
get field2c => 42;

/*member: field2c=:write*/
set field2c(_) {}

// Invocations of static/top level getters are converted into
// 'field2d.call(...)` so we don't have an invocation of the field but instead
// an additional dynamic call to 'call'.
/*member: field2d:read*/
get field2d => 42;

set field2d(_) {}

class Class {
  /*member: Class.field1a:init,read*/
  var field1a;

  /*member: Class.field1b:init,write*/
  var field1b;

  /*member: Class.field1c:init,read,write*/
  var field1c;

  /*member: Class.field1d:init,invoke,read=static*/
  var field1d;

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

  set field2a(_) {}

  get field2b => 42;

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

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

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

  /*member: Class.field2d:invoke,read=static*/
  get field2d => null;

  set field2d(_) {}

  /*member: Class.field3a:init*/
  var field3a = 0;

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

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

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

    field2a;
    field2b = 42;
    field2c = field2c;
    field2d();
  }
}

/*member: main:invoke*/
main() {
  field1a;
  field1b = 42;
  field1c = field1c;
  field1d();

  field2a;
  field2b = 42;
  field2c = field2c;
  field2d();

  new Class().test();
}
