/*
 * 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 It is a compile-time error if the extension does not declare a
 * member with the provided name.
 * @description Check that compile time error is thrown if the extension does
 * not declare a member with the given name
 * @author iarkh@unipro.ru
 */


extension MySimpleExt on String {
  bool get test => false;
  int getANum() => 12345;
  void tryme() {}
}

main() {
  bool res = MySimpleExt("testme").test;
  int i = MySimpleExt("testme").getANum();
  MySimpleExt("testme").tryme();

  bool res1 = MySimpleExt("testme").test1;
  //                                ^^^^^
  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_GETTER
  // [cfe] Getter not found: 'test1'.
  dynamic res2 = MySimpleExt("testme").getAString;
  //                                   ^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_GETTER
  // [cfe] Getter not found: 'getAString'.
  MySimpleExt("testme").put(11);
  //                    ^^^
  // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_METHOD
  // [cfe] Method not found: 'put'.
}
