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

/// @assertion The effect of a static getter declaration in class C is to add 
/// an instance getter with the same name and signature to the Type object for 
/// class C that forwards to the static getter.
/// @description Check that the instance getter, added to the Type object by 
/// static getter declaration, is not added to the Type object of the current
/// class and not added to the Type object of the ancestor. Test type alias
/// @author sgrekhov@unipro.ru
/// @issue 23721

import "dart:core";
import "../../../Utils/expect.dart";

abstract class A<V> {
  int get g1 => 1;
  get g2 => null;
  static get g3 => null;
  static int get g4 => 4;
  V? get g5 => null;
}

typedef AAlias<V> = A<V>;

class C<V> extends AAlias<V> {
  static int get g6 => 6;
}

main() {
  C c = new C<String>();
  dynamic t = c.runtimeType;

  Expect.throws(() {t.g1;}, (e) => e is NoSuchMethodError);
  Expect.throws(() {t.g2;}, (e) => e is NoSuchMethodError);
  Expect.throws(() {t.g3;}, (e) => e is NoSuchMethodError);
  Expect.throws(() {t.g4;}, (e) => e is NoSuchMethodError);
  Expect.throws(() {t.g5;}, (e) => e is NoSuchMethodError);
  Expect.throws(() {t.g6;}, (e) => e is NoSuchMethodError);
}
