| // Copyright (c) 2020, 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. | 
 |  | 
 | import 'package:analyzer/src/error/codes.dart'; | 
 | import 'package:test_reflective_loader/test_reflective_loader.dart'; | 
 |  | 
 | import '../dart/resolution/context_collection_resolution.dart'; | 
 |  | 
 | main() { | 
 |   defineReflectiveSuite(() { | 
 |     defineReflectiveTests(InvalidAnnotationTarget_MustBeOverriddenTest); | 
 |     defineReflectiveTests(InvalidAnnotationTarget_MustCallSuperTest); | 
 |     defineReflectiveTests(InvalidAnnotationTarget_RedeclareTest); | 
 |     defineReflectiveTests(InvalidAnnotationTargetTest); | 
 |   }); | 
 | } | 
 |  | 
 | @reflectiveTest | 
 | class InvalidAnnotationTarget_MustBeOverriddenTest | 
 |     extends PubPackageResolutionTest { | 
 |   @override | 
 |   void setUp() { | 
 |     super.setUp(); | 
 |     writeTestPackageConfigWithMeta(); | 
 |   } | 
 |  | 
 |   test_class_instance_field() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustBeOverridden | 
 |   int f = 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_instance_getter() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustBeOverridden | 
 |   int get f => 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_instance_method() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustBeOverridden | 
 |   void m() {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_instance_setter() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustBeOverridden | 
 |   void set s(int value) {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_static_field() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustBeOverridden | 
 |   static int f = 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 16)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_class_static_getter() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustBeOverridden | 
 |   static int get f => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 16)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_class_static_method() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustBeOverridden | 
 |   static void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 16)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_class_static_setter() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustBeOverridden | 
 |   static void set f(int value) {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 16)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_constructor() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   @mustBeOverridden | 
 |   C(); | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 47, 16)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_enum_member() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | enum E { | 
 |   one, two; | 
 |   @mustBeOverridden | 
 |   void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 58, 16)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_extension_member() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | extension E on String { | 
 |   @mustBeOverridden | 
 |   void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 61, 16)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_mixin_instance_method() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | mixin M { | 
 |   @mustBeOverridden | 
 |   void m() {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_topLevel() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | @mustBeOverridden | 
 | void m() {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 35, 16)], | 
 |     ); | 
 |   } | 
 | } | 
 |  | 
 | @reflectiveTest | 
 | class InvalidAnnotationTarget_MustCallSuperTest | 
 |     extends PubPackageResolutionTest { | 
 |   @override | 
 |   void setUp() { | 
 |     super.setUp(); | 
 |     writeTestPackageConfigWithMeta(); | 
 |   } | 
 |  | 
 |   test_class_instance_field() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustCallSuper | 
 |   int f = 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_instance_getter() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustCallSuper | 
 |   int get f => 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_instance_method() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustCallSuper | 
 |   void m() {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_instance_setter() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class A { | 
 |   @mustCallSuper | 
 |   void set s(int value) {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_class_static_field() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustCallSuper | 
 |   static int f = 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 13)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_class_static_getter() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustCallSuper | 
 |   static int get f => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 13)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_class_static_method() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustCallSuper | 
 |   static void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 13)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_class_static_setter() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 | class A { | 
 |   @mustCallSuper | 
 |   static void set f(int value) {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 46, 13)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_constructor() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   @mustCallSuper | 
 |   C(); | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 47, 13)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_enum_member() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | enum E { | 
 |   one, two; | 
 |   @mustCallSuper | 
 |   void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 58, 13)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_extension_member() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | extension E on String { | 
 |   @mustCallSuper | 
 |   void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 61, 13)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_mixin_instance_method() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | mixin M { | 
 |   @mustCallSuper | 
 |   void m() {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_topLevel() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | @mustCallSuper | 
 | void m() {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 35, 13)], | 
 |     ); | 
 |   } | 
 | } | 
 |  | 
 | @reflectiveTest | 
 | class InvalidAnnotationTarget_RedeclareTest extends PubPackageResolutionTest { | 
 |   @override | 
 |   void setUp() { | 
 |     super.setUp(); | 
 |     writeTestPackageConfigWithMeta(); | 
 |   } | 
 |  | 
 |   test_class_instance_method() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   @redeclare | 
 |   void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 47, 9)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_extensionType_instance_getter() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   int get g => 0;  | 
 | } | 
 |  | 
 | extension type E(C c) implements C { | 
 |   @redeclare | 
 |   int get g => 0;  | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_extensionType_instance_method() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   void m() {} | 
 | } | 
 |  | 
 | extension type E(C c) implements C { | 
 |   @redeclare | 
 |   void m() {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_extensionType_instance_setter() async { | 
 |     await assertNoErrorsInCode(r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   set g(int i) {} | 
 | } | 
 |  | 
 | extension type E(C c) implements C { | 
 |   @redeclare | 
 |   set g(int i) {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   test_extensionType_static_getter() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   static int get g => 0;  | 
 | } | 
 |  | 
 | extension type E(C c) { | 
 |   @redeclare | 
 |   static int get g => 0;  | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 100, 9)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_extensionType_static_method() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   static void m() {} | 
 | } | 
 |  | 
 | extension type E(C c) { | 
 |   @redeclare | 
 |   static void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 95, 9)], | 
 |     ); | 
 |   } | 
 |  | 
 |   test_extensionType_static_setter() async { | 
 |     await assertErrorsInCode( | 
 |       r''' | 
 | import 'package:meta/meta.dart'; | 
 |  | 
 | class C { | 
 |   static set g(int i) {} | 
 | } | 
 |  | 
 | extension type E(C c) { | 
 |   @redeclare | 
 |   static set g(int i) {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 99, 9)], | 
 |     ); | 
 |   } | 
 | } | 
 |  | 
 | @reflectiveTest | 
 | class InvalidAnnotationTargetTest extends PubPackageResolutionTest { | 
 |   @override | 
 |   void setUp() { | 
 |     super.setUp(); | 
 |     writeTestPackageConfigWithMeta(); | 
 |   } | 
 |  | 
 |   // TODO(pq): add tests for topLevelVariables: | 
 |   // https://dart-review.googlesource.com/c/sdk/+/200301 | 
 |   void test_classType_class() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.classType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_classType_classTypeAlias() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.classType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | mixin M {} | 
 |  | 
 | @A() | 
 | class C = Object with M; | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_classType_mixin() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.classType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | mixin M {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 98, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_classType_topLevelVariable_constructor() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.classType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | int x = 0; | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 98, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_classType_topLevelVariable_topLevelConstant() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.classType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | const a = A(); | 
 |  | 
 | @a | 
 | int x = 0; | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 114, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_constructor_constructor() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.constructor}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() C(); | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_constructor_method() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.constructor}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() void m() {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 112, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_directive_class() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.directive}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 98, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_directive_directive() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @A() | 
 | import 'dart:core'; | 
 |  | 
 | @Target({TargetKind.directive}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_enumType_class() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.enumType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 97, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_enumType_enum() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.enumType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | enum E {a, b} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_enumValue_enumValue() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.enumValue}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | enum E { | 
 |   @A() one, two; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_enumValue_field() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.enumValue}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() int f = 7; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 110, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_extension_class() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.extension}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 98, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_extension_extension() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.extension}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | extension on C {} | 
 | class C {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_extension_type_parameter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.parameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | extension type const E(@A() int x) {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_field_field() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.field}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int f = 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_function_function() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.function}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | int f(int x) => 0; | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_function_method() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.function}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int M(int x) => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 109, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_function_topLevelGetter() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.function}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | int get x => 0; | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 97, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_function_topLevelSetter() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.function}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | set x(_x) {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 97, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_getter_getter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.getter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int get x => 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_getter_method() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.getter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int m(int x) => x; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 107, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_getter_setter() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.getter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   set x(int _x) {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 107, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_getter_topLevelGetter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.getter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | int get x => 0; | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_library_class() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.library}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 96, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_library_import() async { | 
 |     await assertNoErrorsInCode(''' | 
 | @A() | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.library}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_library_library() async { | 
 |     await assertNoErrorsInCode(''' | 
 | @A() | 
 | library test; | 
 |  | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.library}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_method_getter() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.method}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int get x => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 107, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_method_method() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.method}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int m(int x) => x; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_method_operator() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.method}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int operator +(int x) => x; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_method_setter() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.method}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   set x(int _x) {} | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 107, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_method_topLevelFunction() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.method}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | int f(int x) => x; | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 95, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_mixinType_class() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.mixinType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 98, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_mixinType_mixin() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.mixinType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | mixin M {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_multiple_invalid() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.classType, TargetKind.method}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | int x = 0; | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 117, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_multiple_valid() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.classType, TargetKind.method}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C { | 
 |   @A() | 
 |   int m(int x) => x; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_optionalParameter_optionalNamed() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.optionalParameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | void f({@A() int? x}) {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_optionalParameter_optionalPositional() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.optionalParameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | void f([@A() int? x]) {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_optionalParameter_requiredNamed() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.optionalParameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | void f({@A() required int x}) {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 114, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_optionalParameter_requiredPositional() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.optionalParameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | void f(@A() int x) {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 113, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_overridableMember_constructor() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   C(); | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 118, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_overridableMember_instanceGetter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int get x => 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_overridableMember_instanceMethod() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int x() => 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_overridableMember_instanceMethod_onEnum() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | enum E { | 
 |   one, two; | 
 |   @A() | 
 |   int x() => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 129, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_overridableMember_instanceMethod_onExtension() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | extension E on int { | 
 |   @A() | 
 |   int x() => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 129, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_overridableMember_instanceMethod_onMixin() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | mixin M { | 
 |   @A() | 
 |   int x() => 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_overridableMember_instanceOperator() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int operator +(int value) => 0; | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_overridableMember_instanceSetter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   set x(int value) {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_overridableMember_staticMethod() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.overridableMember}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   static int x() => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 118, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_parameter_function() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.parameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | void f(int x) {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 98, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_parameter_parameter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.parameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | void f(@A() int x) {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_setter_getter() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.setter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int get x => 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 107, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_setter_method() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.setter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   int m(int x) => x; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 107, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_setter_setter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.setter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C { | 
 |   @A() | 
 |   set x(int _x) {} | 
 | } | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_setter_topLevelSetter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.setter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | set x(_x) {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_topLevelVariable_field() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.topLevelVariable}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class B { | 
 |   @A() | 
 |   int f = 0; | 
 | } | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 117, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_topLevelVariable_topLevelVariable() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.topLevelVariable}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | int f = 0; | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_type_class() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.type}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | class C {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_type_classTypeAlias() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.type}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | mixin M {} | 
 |  | 
 | @A() | 
 | class C = Object with M; | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_type_enum() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.type}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | enum E {a, b} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_type_extension() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.type}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | extension on C {} | 
 | class C {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 93, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_type_genericTypeAlias() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.type}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | typedef F = void Function(int); | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_type_mixin() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.type}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | mixin M {} | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_typedefType_genericTypeAlias() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.typedefType}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | @A() | 
 | typedef F = void Function(int); | 
 | '''); | 
 |   } | 
 |  | 
 |   void test_typeParameter_parameter() async { | 
 |     await assertErrorsInCode( | 
 |       ''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.typeParameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | void f(@A() p) {} | 
 | ''', | 
 |       [error(WarningCode.INVALID_ANNOTATION_TARGET, 109, 1)], | 
 |     ); | 
 |   } | 
 |  | 
 |   void test_typeParameter_typeParameter() async { | 
 |     await assertNoErrorsInCode(''' | 
 | import 'package:meta/meta_meta.dart'; | 
 |  | 
 | @Target({TargetKind.typeParameter}) | 
 | class A { | 
 |   const A(); | 
 | } | 
 |  | 
 | class C<@A() T> {} | 
 | '''); | 
 |   } | 
 | } |