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

// Dart test for testing access to private fields.
library PrivateOther;

import "private_test.dart";

class LibOther3 {
  static accessFieldA3(var a) => a.fieldA;
  static accessFieldB3(var b) => b._fieldB;
  static int c_field1b(c) => c._field1;
  static int c_field2b(c) => c._field2;
}

class AImported extends AExposed {
  AImported() : super();
  getFieldA() => fieldA;
}

class C2 extends C1 {
  int _field1;
  C2()
      : _field1 = 99,
        super();

  field1b() => _field1;
}

class C4 extends C3 {
  int _field2;
  C4()
      : _field2 = 1024,
        super();

  field2b() => _field2;
  field1d() => _field1;
}
