| // Copyright (c) 2021, 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. |
| |
| // Test that identifiers in type parameter metadata can refer to other type |
| // parameters in the same declaration; they are in scope and take precedence |
| // over top level declarations, even if this leads to compile errors. |
| |
| /// Top level declaration of T; nothing should resolve to this. |
| void T() {} |
| |
| class Annotation { |
| const Annotation(dynamic d); |
| } |
| |
| class Class<T, @Annotation(T) U> {} |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT |
| // [cfe] Type variables can't be used in static members. |
| |
| void function<T, @Annotation(T) U>() {} |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT |
| // [cfe] Type variables can't be used as constants. |
| |
| extension Extension<T, @Annotation(T) U> on Map<T, U> {} |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT |
| // [cfe] Type variables can't be used in static members. |
| |
| class C { |
| void method<T, @Annotation(T) U>() {} |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT |
| // [cfe] Type variables can't be used as constants. |
| } |
| |
| mixin Mixin<T, @Annotation(T) U> {} |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT |
| // [cfe] Type variables can't be used in static members. |
| |
| typedef void Typedef1<T, @Annotation(T) U>(T t, U u); |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT |
| // [cfe] Type variables can't be used as constants. |
| |
| typedef Typedef2<T, @Annotation(T) U> = void Function(T t, U u); |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONSTANT_ARGUMENT |
| // [cfe] Type variables can't be used as constants. |