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

/**
 * @assertion It is a compile-time error if a built-in identifier is used as
 * the declared name of a prefix, class, type parameter or type alias.
 * @description  Checks that when a built-in identifier is used in an identifier
 * reference, but since no declaration with that name can exist, lookup fails
 * eventually with the type of error depending on context. This test checks that
 * in a class instance scope, referencing a built-in identifier results in
 * a compile error
 * @author rodionov
 */

class A {
  test() {
    abstract();
//  ^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
// [cfe] The method 'abstract' isn't defined for the class 'A'.
    1 + as;
    //  ^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'as' isn't defined for the class 'A'.
    1 << export;
    //   ^^^^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'export' isn't defined for the class 'A'.
    external ^ 0;
//  ^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'external' isn't defined for the class 'A'.
    1 * factory;
    //  ^^^^^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'factory' isn't defined for the class 'A'.
    1 >= get;
    //   ^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'get' isn't defined for the class 'A'.
    var x = implements;
    //      ^^^^^^^^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'implements' isn't defined for the class 'A'.
    1 == import;
    //   ^^^^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'import' isn't defined for the class 'A'.
    1 == library;
    //   ^^^^^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'library' isn't defined for the class 'A'.
    operator.x;
//  ^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'operator' isn't defined for the class 'A'.
    1 == part;
    //   ^^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'part' isn't defined for the class 'A'.
    --set;
// [error line 63, column 0]
// [analyzer] unspecified
// [cfe] unspecified
    true && static;
    //      ^^^^^^
    // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
    // [cfe] The getter 'static' isn't defined for the class 'A'.
    ++typedef;
// [error line 71, column 0]
// [analyzer] unspecified
// [cfe] unspecified
  }
}

main() {
  new A().test();
}
