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

// @dart = 2.7

import 'package:expect/expect.dart';

_field4() => 4;

class Class1 {
  var field1 = 0;

  @pragma('dart2js:noElision')
  var field2 = 1;

  var field3 = 2;

  var field4 = _field4;
}

@pragma('dart2js:noInline')
method1(Class1 c) {
  return c.field1;
}

@pragma('dart2js:noInline')
method2(Class1 c) {
  return c.field2;
}

class Class2 {
  var field3 = 3;
}

@pragma('dart2js:noInline')
method3(c) {
  return c.field3;
}

class Class3 extends Class1 {
  @pragma('dart2js:noInline')
  method4() {
    return super.field1;
  }
}

class Class4 extends Class1 {
  @pragma('dart2js:noInline')
  method5() {
    return super.field4();
  }
}

@pragma('dart2js:noInline')
method6(Class1 c) {
  return c.field1;
}

@pragma('dart2js:noInline')
method7(Class1 c) {
  return c.field4();
}

main() {
  Expect.equals(0, method1(new Class1()));
  Expect.equals(1, method2(new Class1()));
  Expect.equals(2, method3(new Class1()));
  Expect.equals(3, method3(new Class2()));
  Expect.equals(0, new Class3().method4());
  Expect.equals(4, new Class4().method5());
  Expect.equals(0, method6(new Class1()));
  Expect.throws(() => method6(null));
  Expect.equals(4, method7(new Class1()));
  Expect.throws(() => method7(null));
}
