[element model] migrate `annotate_overrides`
Bug: https://github.com/dart-lang/linter/issues/5099
Change-Id: I7e1c18d4f8d911d041f0da69599ce680b4c61a2b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/389340
Auto-Submit: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 43ac505..13799fb 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -10361,6 +10361,7 @@
// that's true then this getter isn't necessary and should be removed.
return switch (this) {
LibraryFragment(:var metadata) => metadata,
+ PropertyInducingFragment(:var metadata) => metadata,
TypeDefiningFragment(:var metadata) => metadata,
TypeParameterizedFragment(:var metadata) => metadata,
FormalParameterFragment(:var metadata) => metadata,
diff --git a/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
index 6d67184..45a9cf5 100644
--- a/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
@@ -741,6 +741,52 @@
topLevelVariables
v
firstFragment: <testLibraryFragment>::@topLevelVariable::v
+ metadata
+ Annotation
+ atSign: @ @29
+ name: SimpleIdentifier
+ token: A @30
+ staticElement: <testLibraryFragment>::@class::A
+ element: <testLibraryFragment>::@class::A#element
+ staticType: null
+ typeArguments: TypeArgumentList
+ leftBracket: < @31
+ arguments
+ GenericFunctionType
+ returnType: NamedType
+ name: int @32
+ element: dart:core::<fragment>::@class::int
+ element2: dart:core::<fragment>::@class::int#element
+ type: int
+ functionKeyword: Function @36
+ parameters: FormalParameterList
+ leftParenthesis: ( @44
+ parameter: SimpleFormalParameter
+ type: NamedType
+ name: String @45
+ element: dart:core::<fragment>::@class::String
+ element2: dart:core::<fragment>::@class::String#element
+ type: String
+ name: a @52
+ declaredElement: a@52
+ type: String
+ rightParenthesis: ) @53
+ declaredElement: GenericFunctionTypeElement
+ parameters
+ a
+ kind: required positional
+ type: String
+ returnType: int
+ type: int Function(String)
+ type: int Function(String)
+ rightBracket: > @54
+ arguments: ArgumentList
+ leftParenthesis: ( @55
+ rightParenthesis: ) @56
+ element: ConstructorMember
+ base: <testLibraryFragment>::@class::A::@constructor::new
+ substitution: {T: int Function(String)}
+ element2: <testLibraryFragment>::@class::A::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::v#element
setter: <testLibraryFragment>::@setter::v#element
diff --git a/pkg/analyzer/test/src/summary/elements/metadata_test.dart b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
index 9bfcbcf..4db2fc5 100644
--- a/pkg/analyzer/test/src/summary/elements/metadata_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
@@ -8494,11 +8494,31 @@
getter: <testLibraryFragment>::@getter::foo#element
isNotConst
firstFragment: <testLibraryFragment>::@topLevelVariable::isNotConst
+ metadata
+ Annotation
+ atSign: @ @16
+ name: SimpleIdentifier
+ token: foo @17
+ staticElement: <testLibraryFragment>::@getter::foo
+ element: <testLibraryFragment>::@getter::foo#element
+ staticType: null
+ element: <testLibraryFragment>::@getter::foo
+ element2: <testLibraryFragment>::@getter::foo#element
type: int
getter: <testLibraryFragment>::@getter::isNotConst#element
setter: <testLibraryFragment>::@setter::isNotConst#element
const isConst
firstFragment: <testLibraryFragment>::@topLevelVariable::isConst
+ metadata
+ Annotation
+ atSign: @ @42
+ name: SimpleIdentifier
+ token: foo @43
+ staticElement: <testLibraryFragment>::@getter::foo
+ element: <testLibraryFragment>::@getter::foo#element
+ staticType: null
+ element: <testLibraryFragment>::@getter::foo
+ element2: <testLibraryFragment>::@getter::foo#element
type: int
getter: <testLibraryFragment>::@getter::isConst#element
getters
@@ -9648,6 +9668,16 @@
getter: <testLibraryFragment>::@getter::a#element
v
firstFragment: <testLibraryFragment>::@topLevelVariable::v
+ metadata
+ Annotation
+ atSign: @ @16
+ name: SimpleIdentifier
+ token: a @17
+ staticElement: <testLibraryFragment>::@getter::a
+ element: <testLibraryFragment>::@getter::a#element
+ staticType: null
+ element: <testLibraryFragment>::@getter::a
+ element2: <testLibraryFragment>::@getter::a#element
type: int
getter: <testLibraryFragment>::@getter::v#element
setter: <testLibraryFragment>::@setter::v#element
@@ -10259,6 +10289,16 @@
getter: <testLibraryFragment>::@getter::a#element
x
firstFragment: <testLibraryFragment>::@topLevelVariable::x
+ metadata
+ Annotation
+ atSign: @ @13
+ name: SimpleIdentifier
+ token: a @14
+ staticElement: <testLibraryFragment>::@getter::a
+ element: <testLibraryFragment>::@getter::a#element
+ staticType: null
+ element: <testLibraryFragment>::@getter::a
+ element2: <testLibraryFragment>::@getter::a#element
type: int
getter: <testLibraryFragment>::@getter::x#element
setter: <testLibraryFragment>::@setter::x#element
diff --git a/pkg/analyzer/test/src/summary/elements/offsets_test.dart b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
index 814d0aa..cfd45d1 100644
--- a/pkg/analyzer/test/src/summary/elements/offsets_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
@@ -4088,41 +4088,145 @@
setter: <testLibraryFragment>::@setter::hasDocComment2#element
hasAnnotation
firstFragment: <testLibraryFragment>::@topLevelVariable::hasAnnotation
+ metadata
+ Annotation
+ atSign: @ @66
+ name: SimpleIdentifier
+ token: Object @67
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @73
+ rightParenthesis: ) @74
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::hasAnnotation#element
setter: <testLibraryFragment>::@setter::hasAnnotation#element
hasAnnotation2
firstFragment: <testLibraryFragment>::@topLevelVariable::hasAnnotation2
+ metadata
+ Annotation
+ atSign: @ @66
+ name: SimpleIdentifier
+ token: Object @67
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @73
+ rightParenthesis: ) @74
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::hasAnnotation2#element
setter: <testLibraryFragment>::@setter::hasAnnotation2#element
annotationThenComment
firstFragment: <testLibraryFragment>::@topLevelVariable::annotationThenComment
+ metadata
+ Annotation
+ atSign: @ @112
+ name: SimpleIdentifier
+ token: Object @113
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @119
+ rightParenthesis: ) @120
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::annotationThenComment#element
setter: <testLibraryFragment>::@setter::annotationThenComment#element
annotationThenComment2
firstFragment: <testLibraryFragment>::@topLevelVariable::annotationThenComment2
+ metadata
+ Annotation
+ atSign: @ @112
+ name: SimpleIdentifier
+ token: Object @113
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @119
+ rightParenthesis: ) @120
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::annotationThenComment2#element
setter: <testLibraryFragment>::@setter::annotationThenComment2#element
commentThenAnnotation
firstFragment: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation
+ metadata
+ Annotation
+ atSign: @ @234
+ name: SimpleIdentifier
+ token: Object @235
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @241
+ rightParenthesis: ) @242
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::commentThenAnnotation#element
setter: <testLibraryFragment>::@setter::commentThenAnnotation#element
commentThenAnnotation2
firstFragment: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation2
+ metadata
+ Annotation
+ atSign: @ @234
+ name: SimpleIdentifier
+ token: Object @235
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @241
+ rightParenthesis: ) @242
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::commentThenAnnotation2#element
setter: <testLibraryFragment>::@setter::commentThenAnnotation2#element
commentAroundAnnotation
firstFragment: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation
+ metadata
+ Annotation
+ atSign: @ @311
+ name: SimpleIdentifier
+ token: Object @312
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @318
+ rightParenthesis: ) @319
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::commentAroundAnnotation#element
setter: <testLibraryFragment>::@setter::commentAroundAnnotation#element
commentAroundAnnotation2
firstFragment: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation2
+ metadata
+ Annotation
+ atSign: @ @311
+ name: SimpleIdentifier
+ token: Object @312
+ staticElement: dart:core::<fragment>::@class::Object
+ element: dart:core::<fragment>::@class::Object#element
+ staticType: null
+ arguments: ArgumentList
+ leftParenthesis: ( @318
+ rightParenthesis: ) @319
+ element: dart:core::<fragment>::@class::Object::@constructor::new
+ element2: dart:core::<fragment>::@class::Object::@constructor::new#element
type: int
getter: <testLibraryFragment>::@getter::commentAroundAnnotation2#element
setter: <testLibraryFragment>::@setter::commentAroundAnnotation2#element
diff --git a/pkg/linter/analyzer_use_new_elements.txt b/pkg/linter/analyzer_use_new_elements.txt
index e144402..12f1318 100644
--- a/pkg/linter/analyzer_use_new_elements.txt
+++ b/pkg/linter/analyzer_use_new_elements.txt
@@ -8,6 +8,7 @@
lib/src/rules/always_require_non_null_named_parameters.dart
lib/src/rules/always_specify_types.dart
lib/src/rules/always_use_package_imports.dart
+lib/src/rules/annotate_overrides.dart
lib/src/rules/avoid_annotating_with_dynamic.dart
lib/src/rules/avoid_as.dart
lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
@@ -67,6 +68,7 @@
lib/src/rules/iterable_contains_unrelated_type.dart
lib/src/rules/join_return_with_assignment.dart
lib/src/rules/leading_newlines_in_multiline_strings.dart
+lib/src/rules/library_annotations.dart
lib/src/rules/library_names.dart
lib/src/rules/library_prefixes.dart
lib/src/rules/lines_longer_than_80_chars.dart
@@ -119,6 +121,7 @@
lib/src/rules/prefer_single_quotes.dart
lib/src/rules/prefer_spread_collections.dart
lib/src/rules/prefer_typing_uninitialized_variables.dart
+lib/src/rules/prefer_void_to_null.dart
lib/src/rules/provide_deprecation_message.dart
lib/src/rules/pub/depend_on_referenced_packages.dart
lib/src/rules/pub/package_names.dart
diff --git a/pkg/linter/lib/src/rules/annotate_overrides.dart b/pkg/linter/lib/src/rules/annotate_overrides.dart
index b7978c2..f71f175 100644
--- a/pkg/linter/lib/src/rules/annotate_overrides.dart
+++ b/pkg/linter/lib/src/rules/annotate_overrides.dart
@@ -5,7 +5,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import '../analyzer.dart';
import '../extensions.dart';
@@ -38,12 +38,13 @@
_Visitor(this.rule, this.context);
- void check(Element? element, Token target) {
- if (element == null || element.hasOverride) return;
+ void check(Element2? element, Token target) {
+ if (element == null) return;
+ if (element case Annotatable a when a.hasOverride) return;
- var member = context.inheritanceManager.overriddenMember(element);
+ var member = context.inheritanceManager.overriddenMember2(element);
if (member != null) {
- rule.reportLintForToken(target, arguments: [member.name]);
+ rule.reportLintForToken(target, arguments: [member.name!]);
}
}
@@ -54,7 +55,7 @@
if (node.parent is ExtensionTypeDeclaration) return;
for (var field in node.fields.variables) {
- check(field.declaredElement, field.name);
+ check(field.declaredFragment?.element, field.name);
}
}
@@ -64,6 +65,6 @@
if (node.isStatic) return;
if (node.parent is ExtensionTypeDeclaration) return;
- check(node.declaredElement, node.name);
+ check(node.declaredFragment?.element, node.name);
}
}
diff --git a/pkg/linter/test/rules/annotate_overrides_test.dart b/pkg/linter/test/rules/annotate_overrides_test.dart
index 9d95f2d..45c135d 100644
--- a/pkg/linter/test/rules/annotate_overrides_test.dart
+++ b/pkg/linter/test/rules/annotate_overrides_test.dart
@@ -17,11 +17,6 @@
@override
String get lintRule => LintNames.annotate_overrides;
- @FailingTest(
- reason:
- '`augmented.hasOverride` not implemented yet (https://github.com/dart-lang/sdk/issues/55579)',
- issue: 'https://github.com/dart-lang/linter/issues/4925',
- )
test_augmentationClass_implementsInterface() async {
var a = newFile('$testPackageLibPath/a.dart', r'''
part 'b.dart';