meta: Introduce TargetKind.constructor
Fixes https://github.com/dart-lang/sdk/issues/47421
Doc nits while I was looking:
* wrap CHANGELOG to 80 characters
* correct docs on field, getter, method, parameter, setter, typedef,
type parameter,
Change-Id: I97476e08b6773be53dbce190007443f22626d498
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/360124
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/meta/CHANGELOG.md b/pkg/meta/CHANGELOG.md
index c0387497..2fb5385 100644
--- a/pkg/meta/CHANGELOG.md
+++ b/pkg/meta/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 1.14.0-wip
+
+* Introduce `TargetKind.constructor`, to indicate that an annotation is valid on
+ any constructor.
+* Introduce `TargetKind.typeParamteer`, to indicate that an annotation is valid
+ on any type parameter.
+
## 1.13.0
* Add type checks for the `@ResourceIdentifier` experimental annotation.
@@ -6,20 +13,19 @@
* Introduce the `@ResourceIdentifier` experimental annotation for static methods
whose constant literal arguments should be collected during compilation.
-* Indicate that `@required` and `@Required` are set
- to be deprecated for later removal.
+* Indicate that `@required` and `@Required` are set to be deprecated for later
+ removal.
## 1.11.0
-* Introduce `TargetKind.extensionType` to indicate that an annotation
- is valid on any extension type declaration.
+* Introduce `TargetKind.extensionType` to indicate that an annotation is valid
+ on any extension type declaration.
## 1.10.0
* Introduce `@redeclare` to annotate extension type members that redeclare
members from a superinterface.
-* Migrate the `TargetKind` enum to a class to ease the addition of new
- kinds.
+* Migrate the `TargetKind` enum to a class to ease the addition of new kinds.
## 1.9.1
@@ -64,8 +70,8 @@
* Introduce `TargetKind.topLevelVariable` that indicates that an annotation
is valid on any top-level variable declaration.
-* Introduce `@useResult` to annotate methods, fields, or getters that
- return values that should be used - stored, passed as arguments, etc.
+* Introduce `@useResult` to annotate methods, fields, or getters that return
+ values that should be used - stored, passed as arguments, etc.
* Updates for documentation.
## 1.3.0
@@ -75,11 +81,11 @@
## 1.3.0-nullsafety.6
* Update SDK constraints to `>=2.12.0-0 <3.0.0` based on beta release
- guidelines.
+ guidelines.
## 1.3.0-nullsafety.5
-* Allow prerelease versions of the `2.12` sdk.
+* Allow prerelease versions of the `2.12` SDK.
## 1.3.0-nullsafety.4
@@ -92,11 +98,11 @@
## 1.3.0-nullsafety.2
-* Update for the 2.10 dev sdk.
+* Update for the 2.10 dev SDK.
## 1.3.0-nullsafety.1
-* Allow the <=2.9.10 stable sdk.
+* Allow the <=2.9.10 stable SDK.
## 1.3.0-nullsafety
@@ -119,9 +125,9 @@
* Introduce `unawaited` to mark invocations that return a `Future` where it's
intentional that the future is not being awaited. (Moved from
`package:pedantic`.)
-* Introduce `@doNotStore` to annotate methods, getters and functions to
- indicate that values obtained by invoking them should not be stored in a
- field or top-level variable.
+* Introduce `@doNotStore` to annotate methods, getters and functions to indicate
+ that values obtained by invoking them should not be stored in a field or
+ top-level variable.
## 1.1.8
diff --git a/pkg/meta/lib/meta_meta.dart b/pkg/meta/lib/meta_meta.dart
index 62fc36c..f1de463 100644
--- a/pkg/meta/lib/meta_meta.dart
+++ b/pkg/meta/lib/meta_meta.dart
@@ -42,6 +42,12 @@
/// Indicates that an annotation is valid on any class declaration.
static const classType = TargetKind._('classes', 'classType');
+ /// Indicates that an annotation is valid on any constructor declaration, both
+ /// factory and generative constructors, whether it's in a class, enum, or
+ /// extension type. Extension type primary constructors are not supported,
+ /// because there is no way to annotate a primary constructor.
+ static const constructor = TargetKind._('constructors', 'constructor');
+
/// Indicates that an annotation is valid on any enum declaration.
static const enumType = TargetKind._('enums', 'enumType');
@@ -52,7 +58,8 @@
static const extensionType = TargetKind._('extension types', 'extensionType');
/// Indicates that an annotation is valid on any field declaration, both
- /// instance and static fields, whether it's in a class, mixin or extension.
+ /// instance and static fields, whether it's in a class, enum, mixin, or
+ /// extension.
static const field = TargetKind._('fields', 'field');
/// Indicates that an annotation is valid on any top-level function
@@ -65,24 +72,26 @@
static const library = TargetKind._('libraries', 'library');
/// Indicates that an annotation is valid on any getter declaration, both
- /// instance or static getters, whether it's in a class, mixin, extension, or
- /// at the top-level of a library.
+ /// instance or static getters, whether it's in a class, enum, mixin,
+ /// extension, extension type, or at the top-level of a library.
static const getter = TargetKind._('getters', 'getter');
/// Indicates that an annotation is valid on any method declaration, both
- /// instance and static methods, whether it's in a class, mixin or extension.
+ /// instance and static methods, whether it's in a class, enum, mixin,
+ /// extension, or extension type.
static const method = TargetKind._('methods', 'method');
/// Indicates that an annotation is valid on any mixin declaration.
static const mixinType = TargetKind._('mixins', 'mixinType');
/// Indicates that an annotation is valid on any formal parameter declaration,
- /// whether it's in a function (named or anonymous), method, or constructor.
+ /// whether it's in a constructor, function (named or anonymous), function
+ /// type, function-typed formal parameter, or method.
static const parameter = TargetKind._('parameters', 'parameter');
/// Indicates that an annotation is valid on any setter declaration, both
- /// instance or static setters, whether it's in a class, mixin, extension, or
- /// at the top-level of a library.
+ /// instance or static setters, whether it's in a class, enum, mixin,
+ /// extension, extension type, or at the top-level of a library.
static const setter = TargetKind._('setters', 'setter');
/// Indicates that an annotation is valid on any top-level variable
@@ -91,24 +100,25 @@
TargetKind._('top-level variables', 'topLevelVariable');
/// Indicates that an annotation is valid on any declaration that introduces a
- /// type. This includes classes, enums, mixins and typedefs, but does not
+ /// type. This includes classes, enums, mixins, and typedefs, but does not
/// include extensions because extensions don't introduce a type.
+ // TODO(srawlins): This should include extension types.
static const type =
TargetKind._('types (classes, enums, mixins, or typedefs)', 'type');
- /// Indicates that an annotation is valid on any typedef declaration.`
+ /// Indicates that an annotation is valid on any typedef declaration.
static const typedefType = TargetKind._('typedefs', 'typedefType');
/// Indicates that an annotation is valid on any type parameter declaration,
/// whether it's on a class, enum, function type, function, mixin, extension,
/// extension type, or typedef.
- static const typeParameter = TargetKind._(
- 'type parameters (classes, enums, mixins, or typedefs)', 'typeParameter');
+ static const typeParameter = TargetKind._('type parameters', 'typeParameter');
/// All current [TargetKind] values of targets to
/// which an annotation can be applied.
static const values = [
classType,
+ constructor,
enumType,
extension,
extensionType,
@@ -122,8 +132,8 @@
setter,
topLevelVariable,
type,
- typeParameter,
typedefType,
+ typeParameter,
];
/// A user visible string used to describe this target kind.
diff --git a/pkg/meta/pubspec.yaml b/pkg/meta/pubspec.yaml
index be2dcf9..895e879 100644
--- a/pkg/meta/pubspec.yaml
+++ b/pkg/meta/pubspec.yaml
@@ -1,7 +1,7 @@
name: meta
# Note, because version `2.0.0` was mistakenly released,
# the next major version must be `3.x.y`.
-version: 1.13.0
+version: 1.14.0-wip
description: >-
Annotations used to express developer intentions that can't otherwise be
deduced by statically analyzing source code.