Skip to content

Commit 3b30477

Browse files
pqCommit Queue
authored andcommitted
[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 <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent bc2a8a1 commit 3b30477

File tree

7 files changed

+202
-12
lines changed

7 files changed

+202
-12
lines changed

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10361,6 +10361,7 @@ extension on Fragment {
1036110361
// that's true then this getter isn't necessary and should be removed.
1036210362
return switch (this) {
1036310363
LibraryFragment(:var metadata) => metadata,
10364+
PropertyInducingFragment(:var metadata) => metadata,
1036410365
TypeDefiningFragment(:var metadata) => metadata,
1036510366
TypeParameterizedFragment(:var metadata) => metadata,
1036610367
FormalParameterFragment(:var metadata) => metadata,

pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,52 @@ library
741741
topLevelVariables
742742
v
743743
firstFragment: <testLibraryFragment>::@topLevelVariable::v
744+
metadata
745+
Annotation
746+
atSign: @ @29
747+
name: SimpleIdentifier
748+
token: A @30
749+
staticElement: <testLibraryFragment>::@class::A
750+
element: <testLibraryFragment>::@class::A#element
751+
staticType: null
752+
typeArguments: TypeArgumentList
753+
leftBracket: < @31
754+
arguments
755+
GenericFunctionType
756+
returnType: NamedType
757+
name: int @32
758+
element: dart:core::<fragment>::@class::int
759+
element2: dart:core::<fragment>::@class::int#element
760+
type: int
761+
functionKeyword: Function @36
762+
parameters: FormalParameterList
763+
leftParenthesis: ( @44
764+
parameter: SimpleFormalParameter
765+
type: NamedType
766+
name: String @45
767+
element: dart:core::<fragment>::@class::String
768+
element2: dart:core::<fragment>::@class::String#element
769+
type: String
770+
name: a @52
771+
declaredElement: a@52
772+
type: String
773+
rightParenthesis: ) @53
774+
declaredElement: GenericFunctionTypeElement
775+
parameters
776+
a
777+
kind: required positional
778+
type: String
779+
returnType: int
780+
type: int Function(String)
781+
type: int Function(String)
782+
rightBracket: > @54
783+
arguments: ArgumentList
784+
leftParenthesis: ( @55
785+
rightParenthesis: ) @56
786+
element: ConstructorMember
787+
base: <testLibraryFragment>::@class::A::@constructor::new
788+
substitution: {T: int Function(String)}
789+
element2: <testLibraryFragment>::@class::A::@constructor::new#element
744790
type: int
745791
getter: <testLibraryFragment>::@getter::v#element
746792
setter: <testLibraryFragment>::@setter::v#element

pkg/analyzer/test/src/summary/elements/metadata_test.dart

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8494,11 +8494,31 @@ library
84948494
getter: <testLibraryFragment>::@getter::foo#element
84958495
isNotConst
84968496
firstFragment: <testLibraryFragment>::@topLevelVariable::isNotConst
8497+
metadata
8498+
Annotation
8499+
atSign: @ @16
8500+
name: SimpleIdentifier
8501+
token: foo @17
8502+
staticElement: <testLibraryFragment>::@getter::foo
8503+
element: <testLibraryFragment>::@getter::foo#element
8504+
staticType: null
8505+
element: <testLibraryFragment>::@getter::foo
8506+
element2: <testLibraryFragment>::@getter::foo#element
84978507
type: int
84988508
getter: <testLibraryFragment>::@getter::isNotConst#element
84998509
setter: <testLibraryFragment>::@setter::isNotConst#element
85008510
const isConst
85018511
firstFragment: <testLibraryFragment>::@topLevelVariable::isConst
8512+
metadata
8513+
Annotation
8514+
atSign: @ @42
8515+
name: SimpleIdentifier
8516+
token: foo @43
8517+
staticElement: <testLibraryFragment>::@getter::foo
8518+
element: <testLibraryFragment>::@getter::foo#element
8519+
staticType: null
8520+
element: <testLibraryFragment>::@getter::foo
8521+
element2: <testLibraryFragment>::@getter::foo#element
85028522
type: int
85038523
getter: <testLibraryFragment>::@getter::isConst#element
85048524
getters
@@ -9648,6 +9668,16 @@ library
96489668
getter: <testLibraryFragment>::@getter::a#element
96499669
v
96509670
firstFragment: <testLibraryFragment>::@topLevelVariable::v
9671+
metadata
9672+
Annotation
9673+
atSign: @ @16
9674+
name: SimpleIdentifier
9675+
token: a @17
9676+
staticElement: <testLibraryFragment>::@getter::a
9677+
element: <testLibraryFragment>::@getter::a#element
9678+
staticType: null
9679+
element: <testLibraryFragment>::@getter::a
9680+
element2: <testLibraryFragment>::@getter::a#element
96519681
type: int
96529682
getter: <testLibraryFragment>::@getter::v#element
96539683
setter: <testLibraryFragment>::@setter::v#element
@@ -10259,6 +10289,16 @@ library
1025910289
getter: <testLibraryFragment>::@getter::a#element
1026010290
x
1026110291
firstFragment: <testLibraryFragment>::@topLevelVariable::x
10292+
metadata
10293+
Annotation
10294+
atSign: @ @13
10295+
name: SimpleIdentifier
10296+
token: a @14
10297+
staticElement: <testLibraryFragment>::@getter::a
10298+
element: <testLibraryFragment>::@getter::a#element
10299+
staticType: null
10300+
element: <testLibraryFragment>::@getter::a
10301+
element2: <testLibraryFragment>::@getter::a#element
1026210302
type: int
1026310303
getter: <testLibraryFragment>::@getter::x#element
1026410304
setter: <testLibraryFragment>::@setter::x#element

pkg/analyzer/test/src/summary/elements/offsets_test.dart

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4088,41 +4088,145 @@ library
40884088
setter: <testLibraryFragment>::@setter::hasDocComment2#element
40894089
hasAnnotation
40904090
firstFragment: <testLibraryFragment>::@topLevelVariable::hasAnnotation
4091+
metadata
4092+
Annotation
4093+
atSign: @ @66
4094+
name: SimpleIdentifier
4095+
token: Object @67
4096+
staticElement: dart:core::<fragment>::@class::Object
4097+
element: dart:core::<fragment>::@class::Object#element
4098+
staticType: null
4099+
arguments: ArgumentList
4100+
leftParenthesis: ( @73
4101+
rightParenthesis: ) @74
4102+
element: dart:core::<fragment>::@class::Object::@constructor::new
4103+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
40914104
type: int
40924105
getter: <testLibraryFragment>::@getter::hasAnnotation#element
40934106
setter: <testLibraryFragment>::@setter::hasAnnotation#element
40944107
hasAnnotation2
40954108
firstFragment: <testLibraryFragment>::@topLevelVariable::hasAnnotation2
4109+
metadata
4110+
Annotation
4111+
atSign: @ @66
4112+
name: SimpleIdentifier
4113+
token: Object @67
4114+
staticElement: dart:core::<fragment>::@class::Object
4115+
element: dart:core::<fragment>::@class::Object#element
4116+
staticType: null
4117+
arguments: ArgumentList
4118+
leftParenthesis: ( @73
4119+
rightParenthesis: ) @74
4120+
element: dart:core::<fragment>::@class::Object::@constructor::new
4121+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
40964122
type: int
40974123
getter: <testLibraryFragment>::@getter::hasAnnotation2#element
40984124
setter: <testLibraryFragment>::@setter::hasAnnotation2#element
40994125
annotationThenComment
41004126
firstFragment: <testLibraryFragment>::@topLevelVariable::annotationThenComment
4127+
metadata
4128+
Annotation
4129+
atSign: @ @112
4130+
name: SimpleIdentifier
4131+
token: Object @113
4132+
staticElement: dart:core::<fragment>::@class::Object
4133+
element: dart:core::<fragment>::@class::Object#element
4134+
staticType: null
4135+
arguments: ArgumentList
4136+
leftParenthesis: ( @119
4137+
rightParenthesis: ) @120
4138+
element: dart:core::<fragment>::@class::Object::@constructor::new
4139+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
41014140
type: int
41024141
getter: <testLibraryFragment>::@getter::annotationThenComment#element
41034142
setter: <testLibraryFragment>::@setter::annotationThenComment#element
41044143
annotationThenComment2
41054144
firstFragment: <testLibraryFragment>::@topLevelVariable::annotationThenComment2
4145+
metadata
4146+
Annotation
4147+
atSign: @ @112
4148+
name: SimpleIdentifier
4149+
token: Object @113
4150+
staticElement: dart:core::<fragment>::@class::Object
4151+
element: dart:core::<fragment>::@class::Object#element
4152+
staticType: null
4153+
arguments: ArgumentList
4154+
leftParenthesis: ( @119
4155+
rightParenthesis: ) @120
4156+
element: dart:core::<fragment>::@class::Object::@constructor::new
4157+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
41064158
type: int
41074159
getter: <testLibraryFragment>::@getter::annotationThenComment2#element
41084160
setter: <testLibraryFragment>::@setter::annotationThenComment2#element
41094161
commentThenAnnotation
41104162
firstFragment: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation
4163+
metadata
4164+
Annotation
4165+
atSign: @ @234
4166+
name: SimpleIdentifier
4167+
token: Object @235
4168+
staticElement: dart:core::<fragment>::@class::Object
4169+
element: dart:core::<fragment>::@class::Object#element
4170+
staticType: null
4171+
arguments: ArgumentList
4172+
leftParenthesis: ( @241
4173+
rightParenthesis: ) @242
4174+
element: dart:core::<fragment>::@class::Object::@constructor::new
4175+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
41114176
type: int
41124177
getter: <testLibraryFragment>::@getter::commentThenAnnotation#element
41134178
setter: <testLibraryFragment>::@setter::commentThenAnnotation#element
41144179
commentThenAnnotation2
41154180
firstFragment: <testLibraryFragment>::@topLevelVariable::commentThenAnnotation2
4181+
metadata
4182+
Annotation
4183+
atSign: @ @234
4184+
name: SimpleIdentifier
4185+
token: Object @235
4186+
staticElement: dart:core::<fragment>::@class::Object
4187+
element: dart:core::<fragment>::@class::Object#element
4188+
staticType: null
4189+
arguments: ArgumentList
4190+
leftParenthesis: ( @241
4191+
rightParenthesis: ) @242
4192+
element: dart:core::<fragment>::@class::Object::@constructor::new
4193+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
41164194
type: int
41174195
getter: <testLibraryFragment>::@getter::commentThenAnnotation2#element
41184196
setter: <testLibraryFragment>::@setter::commentThenAnnotation2#element
41194197
commentAroundAnnotation
41204198
firstFragment: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation
4199+
metadata
4200+
Annotation
4201+
atSign: @ @311
4202+
name: SimpleIdentifier
4203+
token: Object @312
4204+
staticElement: dart:core::<fragment>::@class::Object
4205+
element: dart:core::<fragment>::@class::Object#element
4206+
staticType: null
4207+
arguments: ArgumentList
4208+
leftParenthesis: ( @318
4209+
rightParenthesis: ) @319
4210+
element: dart:core::<fragment>::@class::Object::@constructor::new
4211+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
41214212
type: int
41224213
getter: <testLibraryFragment>::@getter::commentAroundAnnotation#element
41234214
setter: <testLibraryFragment>::@setter::commentAroundAnnotation#element
41244215
commentAroundAnnotation2
41254216
firstFragment: <testLibraryFragment>::@topLevelVariable::commentAroundAnnotation2
4217+
metadata
4218+
Annotation
4219+
atSign: @ @311
4220+
name: SimpleIdentifier
4221+
token: Object @312
4222+
staticElement: dart:core::<fragment>::@class::Object
4223+
element: dart:core::<fragment>::@class::Object#element
4224+
staticType: null
4225+
arguments: ArgumentList
4226+
leftParenthesis: ( @318
4227+
rightParenthesis: ) @319
4228+
element: dart:core::<fragment>::@class::Object::@constructor::new
4229+
element2: dart:core::<fragment>::@class::Object::@constructor::new#element
41264230
type: int
41274231
getter: <testLibraryFragment>::@getter::commentAroundAnnotation2#element
41284232
setter: <testLibraryFragment>::@setter::commentAroundAnnotation2#element

pkg/linter/analyzer_use_new_elements.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ lib/src/rules/always_put_required_named_parameters_first.dart
88
lib/src/rules/always_require_non_null_named_parameters.dart
99
lib/src/rules/always_specify_types.dart
1010
lib/src/rules/always_use_package_imports.dart
11+
lib/src/rules/annotate_overrides.dart
1112
lib/src/rules/avoid_annotating_with_dynamic.dart
1213
lib/src/rules/avoid_as.dart
1314
lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
@@ -67,6 +68,7 @@ lib/src/rules/invariant_booleans.dart
6768
lib/src/rules/iterable_contains_unrelated_type.dart
6869
lib/src/rules/join_return_with_assignment.dart
6970
lib/src/rules/leading_newlines_in_multiline_strings.dart
71+
lib/src/rules/library_annotations.dart
7072
lib/src/rules/library_names.dart
7173
lib/src/rules/library_prefixes.dart
7274
lib/src/rules/lines_longer_than_80_chars.dart
@@ -119,6 +121,7 @@ lib/src/rules/prefer_null_aware_operators.dart
119121
lib/src/rules/prefer_single_quotes.dart
120122
lib/src/rules/prefer_spread_collections.dart
121123
lib/src/rules/prefer_typing_uninitialized_variables.dart
124+
lib/src/rules/prefer_void_to_null.dart
122125
lib/src/rules/provide_deprecation_message.dart
123126
lib/src/rules/pub/depend_on_referenced_packages.dart
124127
lib/src/rules/pub/package_names.dart

pkg/linter/lib/src/rules/annotate_overrides.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import 'package:analyzer/dart/ast/ast.dart';
66
import 'package:analyzer/dart/ast/token.dart';
77
import 'package:analyzer/dart/ast/visitor.dart';
8-
import 'package:analyzer/dart/element/element.dart';
8+
import 'package:analyzer/dart/element/element2.dart';
99

1010
import '../analyzer.dart';
1111
import '../extensions.dart';
@@ -38,12 +38,13 @@ class _Visitor extends SimpleAstVisitor<void> {
3838

3939
_Visitor(this.rule, this.context);
4040

41-
void check(Element? element, Token target) {
42-
if (element == null || element.hasOverride) return;
41+
void check(Element2? element, Token target) {
42+
if (element == null) return;
43+
if (element case Annotatable a when a.hasOverride) return;
4344

44-
var member = context.inheritanceManager.overriddenMember(element);
45+
var member = context.inheritanceManager.overriddenMember2(element);
4546
if (member != null) {
46-
rule.reportLintForToken(target, arguments: [member.name]);
47+
rule.reportLintForToken(target, arguments: [member.name!]);
4748
}
4849
}
4950

@@ -54,7 +55,7 @@ class _Visitor extends SimpleAstVisitor<void> {
5455
if (node.parent is ExtensionTypeDeclaration) return;
5556

5657
for (var field in node.fields.variables) {
57-
check(field.declaredElement, field.name);
58+
check(field.declaredFragment?.element, field.name);
5859
}
5960
}
6061

@@ -64,6 +65,6 @@ class _Visitor extends SimpleAstVisitor<void> {
6465
if (node.isStatic) return;
6566
if (node.parent is ExtensionTypeDeclaration) return;
6667

67-
check(node.declaredElement, node.name);
68+
check(node.declaredFragment?.element, node.name);
6869
}
6970
}

pkg/linter/test/rules/annotate_overrides_test.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ class AnnotateOverridesTest extends LintRuleTest {
1717
@override
1818
String get lintRule => LintNames.annotate_overrides;
1919

20-
@FailingTest(
21-
reason:
22-
'`augmented.hasOverride` not implemented yet (https://github.com/dart-lang/sdk/issues/55579)',
23-
issue: 'https://github.com/dart-lang/linter/issues/4925',
24-
)
2520
test_augmentationClass_implementsInterface() async {
2621
var a = newFile('$testPackageLibPath/a.dart', r'''
2722
part 'b.dart';

0 commit comments

Comments
 (0)