mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 12:24:24 +00:00
Revert "[analyzer][meta] Refactor TargetKind to be a class, add a value in TargetKind to represent type parameter"
This reverts commit 82143e6c95
.
Reason for revert: This commit appears to have negatively affected the analyze benchmark:
* https://golem.corp.goog/Revision?repository=flutter-analyze&team=dartanalyzer&revision=114193
We need to revert and analyze it.
Original change's description:
> [analyzer][meta] Refactor TargetKind to be a class, add a value in TargetKind to represent type parameter
>
> Bug: https://github.com/dart-lang/sdk/issues/49796
> Change-Id: Ide144ceb57bae94a71b9d1a7ec841d03363fc121
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/258200
> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: https://github.com/dart-lang/sdk/issues/49796
Change-Id: I6ec04ffe8d85c417d138626ffa4f1a7ac7dafe2b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/268380
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
fa6840ae13
commit
813ca7faf6
5 changed files with 127 additions and 171 deletions
|
@ -29,103 +29,95 @@ class Target {
|
|||
|
||||
/// An enumeration of the kinds of targets to which an annotation can be
|
||||
/// applied.
|
||||
///
|
||||
/// More values will be added in the future, as the Dart language evolves.
|
||||
class TargetKind {
|
||||
// This class is not meant to be instantiated or extended; this constructor
|
||||
// prevents instantiation and extension.
|
||||
const TargetKind._(this.displayString, this.name);
|
||||
|
||||
/// A numeric identifier for the enumerated value.
|
||||
int get index => values.indexOf(this);
|
||||
|
||||
/// A user visible string used to describe this target kind.
|
||||
final String displayString;
|
||||
|
||||
/// The name of the [TargetKind] value.
|
||||
///
|
||||
/// The name is a string containing the source identifier used to declare the [TargetKind] value.
|
||||
/// For example, the result of `TargetKind.classType.name` is the string "classType".
|
||||
final String name;
|
||||
|
||||
enum TargetKind {
|
||||
/// Indicates that an annotation is valid on any class declaration.
|
||||
static const classType = TargetKind._('classes', 'classType');
|
||||
classType,
|
||||
|
||||
/// Indicates that an annotation is valid on any enum declaration.
|
||||
static const enumType = TargetKind._('enums', 'enumType');
|
||||
enumType,
|
||||
|
||||
/// Indicates that an annotation is valid on any extension declaration.
|
||||
static const extension = TargetKind._('extensions', 'extension');
|
||||
extension,
|
||||
|
||||
/// Indicates that an annotation is valid on any field declaration, both
|
||||
/// instance and static fields, whether it's in a class, mixin or extension.
|
||||
static const field = TargetKind._('fields', 'field');
|
||||
field,
|
||||
|
||||
/// Indicates that an annotation is valid on any top-level function
|
||||
/// declaration.
|
||||
static const function = TargetKind._('top-level functions', 'function');
|
||||
function,
|
||||
|
||||
/// Indicates that an annotation is valid on the first directive in a library,
|
||||
/// whether that's a `library`, `import`, `export` or `part` directive. This
|
||||
/// doesn't include the `part of` directive in a part file.
|
||||
static const library = TargetKind._('libraries', 'library');
|
||||
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.
|
||||
static const getter = TargetKind._('getters', 'getter');
|
||||
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.
|
||||
static const method = TargetKind._('methods', 'method');
|
||||
method,
|
||||
|
||||
/// Indicates that an annotation is valid on any mixin declaration.
|
||||
static const mixinType = TargetKind._('mixins', 'mixinType');
|
||||
mixinType,
|
||||
|
||||
/// Indicates that an annotation is valid on any formal parameter declaration,
|
||||
/// whether it's in a function, method, constructor, or closure.
|
||||
static const parameter = TargetKind._('parameters', 'parameter');
|
||||
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.
|
||||
static const setter = TargetKind._('setters', 'setter');
|
||||
setter,
|
||||
|
||||
/// Indicates that an annotation is valid on any top-level variable
|
||||
/// declaration.
|
||||
static const topLevelVariable =
|
||||
TargetKind._('top-level variables', 'topLevelVariable');
|
||||
topLevelVariable,
|
||||
|
||||
/// Indicates that an annotation is valid on any declaration that introduces a
|
||||
/// type. This includes classes, enums, mixins and typedefs, but does not
|
||||
/// include extensions because extensions don't introduce a type.
|
||||
static const type =
|
||||
TargetKind._('types (classes, enums, mixins, or typedefs)', 'type');
|
||||
|
||||
/// 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.
|
||||
static const typeParameter = TargetKind._('type parameters', 'typeParameter');
|
||||
|
||||
static const values = [
|
||||
classType,
|
||||
enumType,
|
||||
extension,
|
||||
field,
|
||||
function,
|
||||
library,
|
||||
getter,
|
||||
method,
|
||||
mixinType,
|
||||
parameter,
|
||||
setter,
|
||||
topLevelVariable,
|
||||
type,
|
||||
typedefType,
|
||||
typeParameter,
|
||||
];
|
||||
|
||||
@override
|
||||
String toString() => 'TargetKind.$name';
|
||||
/// Indicates that an annotation is valid on any typedef declaration.
|
||||
typedefType,
|
||||
}
|
||||
|
||||
extension TargetKindExtension on TargetKind {
|
||||
/// Return a user visible string used to describe this target kind.
|
||||
String get displayString {
|
||||
switch (this) {
|
||||
case TargetKind.classType:
|
||||
return 'classes';
|
||||
case TargetKind.enumType:
|
||||
return 'enums';
|
||||
case TargetKind.extension:
|
||||
return 'extensions';
|
||||
case TargetKind.field:
|
||||
return 'fields';
|
||||
case TargetKind.function:
|
||||
return 'top-level functions';
|
||||
case TargetKind.library:
|
||||
return 'libraries';
|
||||
case TargetKind.getter:
|
||||
return 'getters';
|
||||
case TargetKind.method:
|
||||
return 'methods';
|
||||
case TargetKind.mixinType:
|
||||
return 'mixins';
|
||||
case TargetKind.parameter:
|
||||
return 'parameters';
|
||||
case TargetKind.setter:
|
||||
return 'setters';
|
||||
case TargetKind.topLevelVariable:
|
||||
return 'top-level variables';
|
||||
case TargetKind.type:
|
||||
return 'types (classes, enums, mixins, or typedefs)';
|
||||
case TargetKind.typedefType:
|
||||
return 'typedefs';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,9 +40,14 @@ extension ElementAnnotationExtensions on ElementAnnotation {
|
|||
// We can't directly translate the index from the analyzed TargetKind
|
||||
// constant to TargetKinds.values because the analyzer from the SDK
|
||||
// may have been compiled with a different version of pkg:meta.
|
||||
final stringRepresentation =
|
||||
kindObject.getField('name')!.toStringValue()!;
|
||||
final name = 'TargetKind.$stringRepresentation';
|
||||
var index = kindObject.getField('index')!.toIntValue()!;
|
||||
var targetKindClass =
|
||||
(kindObject.type as InterfaceType).element as EnumElementImpl;
|
||||
// Instead, map constants to their TargetKind by comparing getter
|
||||
// names.
|
||||
var getter = targetKindClass.constants[index];
|
||||
var name = 'TargetKind.${getter.name}';
|
||||
|
||||
var foundTargetKind = _targetKindsByName[name];
|
||||
if (foundTargetKind != null) {
|
||||
kinds.add(foundTargetKind);
|
||||
|
|
|
@ -1762,8 +1762,6 @@ class BestPracticesVerifier extends RecursiveAstVisitor<void> {
|
|||
kinds.contains(TargetKind.type);
|
||||
} else if (target is TopLevelVariableDeclaration) {
|
||||
return kinds.contains(TargetKind.topLevelVariable);
|
||||
} else if (target is TypeParameter) {
|
||||
return kinds.contains(TargetKind.typeParameter);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -230,33 +230,7 @@ class Target {
|
|||
const Target(this.kinds);
|
||||
}
|
||||
|
||||
class TargetKind {
|
||||
const TargetKind._(this.displayString, this.name);
|
||||
|
||||
int get index => values.indexOf(this);
|
||||
|
||||
final String displayString;
|
||||
final String name;
|
||||
|
||||
static const classType = TargetKind._('classes', 'classType');
|
||||
static const enumType = TargetKind._('enums', 'enumType');
|
||||
static const extension = TargetKind._('extensions', 'extension');
|
||||
static const field = TargetKind._('fields', 'field');
|
||||
static const function = TargetKind._('top-level functions', 'function');
|
||||
static const library = TargetKind._('libraries', 'library');
|
||||
static const getter = TargetKind._('getters', 'getter');
|
||||
static const method = TargetKind._('methods', 'method');
|
||||
static const mixinType = TargetKind._('mixins', 'mixinType');
|
||||
static const parameter = TargetKind._('parameters', 'parameter');
|
||||
static const setter = TargetKind._('setters', 'setter');
|
||||
static const topLevelVariable =
|
||||
TargetKind._('top-level variables', 'topLevelVariable');
|
||||
static const type =
|
||||
TargetKind._('types (classes, enums, mixins, or typedefs)', 'type');
|
||||
static const typedefType = TargetKind._('typedefs', 'typedefType');
|
||||
static const typeParameter = TargetKind._('type parameters', 'typeParameter');
|
||||
|
||||
static const values = [
|
||||
enum TargetKind {
|
||||
classType,
|
||||
enumType,
|
||||
extension,
|
||||
|
@ -271,11 +245,6 @@ class TargetKind {
|
|||
topLevelVariable,
|
||||
type,
|
||||
typedefType,
|
||||
typeParameter,
|
||||
];
|
||||
|
||||
@override
|
||||
String toString() => 'TargetKind.$name';
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
|
|
@ -29,103 +29,95 @@ class Target {
|
|||
|
||||
/// An enumeration of the kinds of targets to which an annotation can be
|
||||
/// applied.
|
||||
///
|
||||
/// More values will be added in the future, as the Dart language evolves.
|
||||
class TargetKind {
|
||||
// This class is not meant to be instantiated or extended; this constructor
|
||||
// prevents instantiation and extension.
|
||||
const TargetKind._(this.displayString, this.name);
|
||||
|
||||
/// A numeric identifier for the enumerated value.
|
||||
int get index => values.indexOf(this);
|
||||
|
||||
/// A user visible string used to describe this target kind.
|
||||
final String displayString;
|
||||
|
||||
/// The name of the [TargetKind] value.
|
||||
///
|
||||
/// The name is a string containing the source identifier used to declare the [TargetKind] value.
|
||||
/// For example, the result of `TargetKind.classType.name` is the string "classType".
|
||||
final String name;
|
||||
|
||||
enum TargetKind {
|
||||
/// Indicates that an annotation is valid on any class declaration.
|
||||
static const classType = TargetKind._('classes', 'classType');
|
||||
classType,
|
||||
|
||||
/// Indicates that an annotation is valid on any enum declaration.
|
||||
static const enumType = TargetKind._('enums', 'enumType');
|
||||
enumType,
|
||||
|
||||
/// Indicates that an annotation is valid on any extension declaration.
|
||||
static const extension = TargetKind._('extensions', 'extension');
|
||||
extension,
|
||||
|
||||
/// Indicates that an annotation is valid on any field declaration, both
|
||||
/// instance and static fields, whether it's in a class, mixin or extension.
|
||||
static const field = TargetKind._('fields', 'field');
|
||||
field,
|
||||
|
||||
/// Indicates that an annotation is valid on any top-level function
|
||||
/// declaration.
|
||||
static const function = TargetKind._('top-level functions', 'function');
|
||||
function,
|
||||
|
||||
/// Indicates that an annotation is valid on the first directive in a library,
|
||||
/// whether that's a `library`, `import`, `export` or `part` directive. This
|
||||
/// doesn't include the `part of` directive in a part file.
|
||||
static const library = TargetKind._('libraries', 'library');
|
||||
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.
|
||||
static const getter = TargetKind._('getters', 'getter');
|
||||
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.
|
||||
static const method = TargetKind._('methods', 'method');
|
||||
method,
|
||||
|
||||
/// Indicates that an annotation is valid on any mixin declaration.
|
||||
static const mixinType = TargetKind._('mixins', 'mixinType');
|
||||
mixinType,
|
||||
|
||||
/// Indicates that an annotation is valid on any formal parameter declaration,
|
||||
/// whether it's in a function, method, constructor, or closure.
|
||||
static const parameter = TargetKind._('parameters', 'parameter');
|
||||
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.
|
||||
static const setter = TargetKind._('setters', 'setter');
|
||||
setter,
|
||||
|
||||
/// Indicates that an annotation is valid on any top-level variable
|
||||
/// declaration.
|
||||
static const topLevelVariable =
|
||||
TargetKind._('top-level variables', 'topLevelVariable');
|
||||
topLevelVariable,
|
||||
|
||||
/// Indicates that an annotation is valid on any declaration that introduces a
|
||||
/// type. This includes classes, enums, mixins and typedefs, but does not
|
||||
/// include extensions because extensions don't introduce a type.
|
||||
static const type =
|
||||
TargetKind._('types (classes, enums, mixins, or typedefs)', 'type');
|
||||
|
||||
/// 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.
|
||||
static const typeParameter = TargetKind._('type parameters', 'typeParameter');
|
||||
|
||||
static const values = [
|
||||
classType,
|
||||
enumType,
|
||||
extension,
|
||||
field,
|
||||
function,
|
||||
library,
|
||||
getter,
|
||||
method,
|
||||
mixinType,
|
||||
parameter,
|
||||
setter,
|
||||
topLevelVariable,
|
||||
type,
|
||||
typedefType,
|
||||
typeParameter,
|
||||
];
|
||||
|
||||
@override
|
||||
String toString() => 'TargetKind.$name';
|
||||
/// Indicates that an annotation is valid on any typedef declaration.
|
||||
typedefType,
|
||||
}
|
||||
|
||||
extension TargetKindExtension on TargetKind {
|
||||
/// Return a user visible string used to describe this target kind.
|
||||
String get displayString {
|
||||
switch (this) {
|
||||
case TargetKind.classType:
|
||||
return 'classes';
|
||||
case TargetKind.enumType:
|
||||
return 'enums';
|
||||
case TargetKind.extension:
|
||||
return 'extensions';
|
||||
case TargetKind.field:
|
||||
return 'fields';
|
||||
case TargetKind.function:
|
||||
return 'top-level functions';
|
||||
case TargetKind.library:
|
||||
return 'libraries';
|
||||
case TargetKind.getter:
|
||||
return 'getters';
|
||||
case TargetKind.method:
|
||||
return 'methods';
|
||||
case TargetKind.mixinType:
|
||||
return 'mixins';
|
||||
case TargetKind.parameter:
|
||||
return 'parameters';
|
||||
case TargetKind.setter:
|
||||
return 'setters';
|
||||
case TargetKind.topLevelVariable:
|
||||
return 'top-level variables';
|
||||
case TargetKind.type:
|
||||
return 'types (classes, enums, mixins, or typedefs)';
|
||||
case TargetKind.typedefType:
|
||||
return 'typedefs';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue