// 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 an extension declaration is a top-level declaration with a grammar
/// similar to:
/// <extension> ::=
///   `extension' <identifier>? <typeParameters>? `on' <type> `?'? `{'
///     memberDeclaration*
///   `}'
/// ...
/// The member declarations can be any non-abstract static or instance member
/// declaration except for instance variables and constructors, and they cannot
/// have the same name as a member declared by Object (==, hashCode , toString,
/// runtimeType or noSuchMethod)
///
/// @description Check that it is a compile error if extension declares members
/// with the same name as a member declared by  Object (==, hashCode , toString,
/// runtimeType or noSuchMethod)
/// @author sgrekhov@unipro.ru



extension ExtendedList<T> on List<T> {
  dynamic noSuchMethod (Invocation invocation) => null;
  //      ^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EXTENSION_DECLARES_MEMBER_OF_OBJECT
  // [cfe] This extension member conflicts with Object member 'noSuchMethod'.
  bool operator == (dynamic other) => true;
  //            ^^
  // [analyzer] COMPILE_TIME_ERROR.EXTENSION_DECLARES_MEMBER_OF_OBJECT
  // [cfe] This extension member conflicts with Object member '=='.
  int get hashCode => 42;
  //      ^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EXTENSION_DECLARES_MEMBER_OF_OBJECT
  // [cfe] This extension member conflicts with Object member 'hashCode'.
  Type get runtimeType => this.runtimeType;
  //       ^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EXTENSION_DECLARES_MEMBER_OF_OBJECT
  // [cfe] This extension member conflicts with Object member 'runtimeType'.
  String toString() => "Run, Forrest, run";
  //     ^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EXTENSION_DECLARES_MEMBER_OF_OBJECT
  // [cfe] This extension member conflicts with Object member 'toString'.
}

main() {
  List<String> list = ["Lily", "was", "here"];
}
