Skip to content

Commit 91db72c

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate GetterSetterTypesVerifier.
Change-Id: Ia568507df7c7c02df6706d4ff42c4b9f489f479a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/395044 Reviewed-by: Phil Quitslund <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 347e38e commit 91db72c

File tree

5 files changed

+84
-57
lines changed

5 files changed

+84
-57
lines changed

pkg/analyzer/analyzer_use_new_elements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ lib/src/error/correct_override.dart
108108
lib/src/error/dead_code_verifier.dart
109109
lib/src/error/deprecated_member_use_verifier.dart
110110
lib/src/error/duplicate_definition_verifier.dart
111-
lib/src/error/getter_setter_types_verifier.dart
112111
lib/src/error/imports_verifier.dart
113112
lib/src/error/inheritance_override.dart
114113
lib/src/error/literal_element_verifier.dart

pkg/analyzer/lib/error/listener.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:analyzer/dart/ast/ast.dart'
77
import 'package:analyzer/dart/ast/syntactic_entity.dart';
88
import 'package:analyzer/dart/ast/token.dart';
99
import 'package:analyzer/dart/element/element.dart';
10+
import 'package:analyzer/dart/element/element2.dart';
1011
import 'package:analyzer/dart/element/type.dart';
1112
import 'package:analyzer/diagnostic/diagnostic.dart';
1213
import 'package:analyzer/error/error.dart';
@@ -15,6 +16,7 @@ import 'package:analyzer/src/dart/element/extensions.dart';
1516
import 'package:analyzer/src/dart/element/type.dart';
1617
import 'package:analyzer/src/diagnostic/diagnostic.dart';
1718
import 'package:analyzer/src/utilities/extensions/collection.dart';
19+
import 'package:analyzer/src/utilities/extensions/element.dart';
1820
import 'package:meta/meta.dart';
1921
import 'package:source_span/source_span.dart';
2022

@@ -116,6 +118,25 @@ class ErrorReporter {
116118
);
117119
}
118120

121+
/// Report an error with the given [errorCode] and [arguments].
122+
/// The [element] is used to compute the location of the error.
123+
@experimental
124+
void atElement2(
125+
Element2 element,
126+
ErrorCode errorCode, {
127+
List<Object>? arguments,
128+
List<DiagnosticMessage>? contextMessages,
129+
Object? data,
130+
}) {
131+
atElement(
132+
element.asElement!,
133+
errorCode,
134+
arguments: arguments,
135+
contextMessages: contextMessages,
136+
data: data,
137+
);
138+
}
139+
119140
/// Report an error with the given [errorCode] and [arguments].
120141
/// The [entity] is used to compute the location of the error.
121142
void atEntity(

pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart

Lines changed: 55 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
import 'package:analyzer/dart/element/element.dart';
5+
import 'package:analyzer/dart/element/element2.dart';
66
import 'package:analyzer/dart/element/type.dart';
77
import 'package:analyzer/error/listener.dart';
88
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
@@ -22,59 +22,59 @@ class GetterSetterTypesVerifier {
2222
}) : _typeSystem = typeSystem,
2323
_errorReporter = errorReporter;
2424

25-
void checkExtension(ExtensionElement element) {
26-
for (var getter in element.accessors) {
27-
if (getter.isGetter) {
28-
_checkLocalGetter(getter);
29-
}
25+
void checkExtension(ExtensionElement2 element) {
26+
for (var getter in element.getters2) {
27+
_checkLocalGetter(getter);
3028
}
3129
}
3230

33-
void checkExtensionType(ExtensionTypeElement element, Interface interface) {
31+
void checkExtensionType(ExtensionTypeElement2 element, Interface interface) {
3432
checkInterface(element, interface);
35-
checkStaticAccessors(element.accessors);
33+
checkStaticGetters(element.getters2);
3634
}
3735

38-
void checkInterface(InterfaceElement element, Interface interface) {
39-
var libraryUri = element.library.source.uri;
36+
void checkInterface(InterfaceElement2 element, Interface interface) {
37+
var libraryUri = element.library2.firstFragment.source.uri;
4038

41-
for (var name in interface.map.keys) {
42-
if (!name.isAccessibleFor(libraryUri)) continue;
39+
var interfaceMap = interface.map2;
40+
for (var entry in interfaceMap.entries) {
41+
var getterName = entry.key;
42+
if (!getterName.isAccessibleFor(libraryUri)) continue;
4343

44-
var getter = interface.map[name]!;
44+
var getter = entry.value;
4545
if (getter.kind == ElementKind.GETTER) {
46-
var setter = interface.map[Name(libraryUri, '${name.name}=')];
47-
if (setter != null && setter.parameters.length == 1) {
46+
var setter = interfaceMap[getterName.forSetter];
47+
if (setter != null && setter.formalParameters.length == 1) {
4848
var getterType = getter.returnType;
49-
var setterType = setter.parameters[0].type;
49+
var setterType = setter.formalParameters[0].type;
5050
if (!_typeSystem.isSubtypeOf(getterType, setterType)) {
51-
Element errorElement;
52-
if (getter.enclosingElement3 == element) {
53-
if (element is ExtensionTypeElement &&
54-
element.representation.getter == getter) {
51+
Element2 errorElement;
52+
if (getter.enclosingElement2 == element) {
53+
if (element is ExtensionTypeElement2 &&
54+
element.representation2.getter2 == getter) {
5555
errorElement = setter;
5656
} else {
5757
errorElement = getter;
5858
}
59-
} else if (setter.enclosingElement3 == element) {
59+
} else if (setter.enclosingElement2 == element) {
6060
errorElement = setter;
6161
} else {
6262
errorElement = element;
6363
}
6464

6565
var getterName = getter.displayName;
66-
if (getter.enclosingElement3 != element) {
67-
var getterClassName = getter.enclosingElement3.displayName;
66+
if (getter.enclosingElement2 != element) {
67+
var getterClassName = getter.enclosingElement2!.displayName;
6868
getterName = '$getterClassName.$getterName';
6969
}
7070

7171
var setterName = setter.displayName;
72-
if (setter.enclosingElement3 != element) {
73-
var setterClassName = setter.enclosingElement3.displayName;
72+
if (setter.enclosingElement2 != element) {
73+
var setterClassName = setter.enclosingElement2!.displayName;
7474
setterName = '$setterClassName.$setterName';
7575
}
7676

77-
_errorReporter.atElement(
77+
_errorReporter.atElement2(
7878
errorElement,
7979
CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
8080
arguments: [getterName, getterType, setterType, setterName],
@@ -85,41 +85,48 @@ class GetterSetterTypesVerifier {
8585
}
8686
}
8787

88-
void checkStaticAccessors(List<PropertyAccessorElement> accessors) {
89-
for (var getter in accessors) {
90-
if (getter.isStatic && getter.isGetter) {
88+
void checkStaticGetters(List<GetterElement> getters) {
89+
for (var getter in getters) {
90+
if (getter.isStatic) {
9191
_checkLocalGetter(getter);
9292
}
9393
}
9494
}
9595

96-
void _checkLocalGetter(PropertyAccessorElement getter) {
97-
assert(getter.isGetter);
98-
var setter = getter.correspondingSetter;
99-
if (setter != null) {
100-
var getterType = _getGetterType(getter);
101-
var setterType = _getSetterType(setter);
102-
if (setterType != null) {
103-
if (!_typeSystem.isSubtypeOf(getterType, setterType)) {
104-
var name = getter.name;
105-
_errorReporter.atElement(
106-
getter,
107-
CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
108-
arguments: [name, getterType, setterType, name],
109-
);
110-
}
111-
}
96+
void _checkLocalGetter(GetterElement getter) {
97+
var name = getter.name3;
98+
if (name == null) {
99+
return;
100+
}
101+
102+
var setter = getter.variable3?.setter2;
103+
if (setter == null) {
104+
return;
105+
}
106+
107+
var setterType = _getSetterType(setter);
108+
if (setterType == null) {
109+
return;
110+
}
111+
112+
var getterType = _getGetterType(getter);
113+
if (!_typeSystem.isSubtypeOf(getterType, setterType)) {
114+
_errorReporter.atElement2(
115+
getter,
116+
CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
117+
arguments: [name, getterType, setterType, name],
118+
);
112119
}
113120
}
114121

115122
/// Return the return type of the [getter].
116-
static DartType _getGetterType(PropertyAccessorElement getter) {
123+
static DartType _getGetterType(GetterElement getter) {
117124
return getter.returnType;
118125
}
119126

120127
/// Return the type of the first parameter of the [setter].
121-
static DartType? _getSetterType(PropertyAccessorElement setter) {
122-
var parameters = setter.parameters;
128+
static DartType? _getSetterType(SetterElement setter) {
129+
var parameters = setter.formalParameters;
123130
if (parameters.isNotEmpty) {
124131
return parameters[0].type;
125132
} else {

pkg/analyzer/lib/src/error/inheritance_override.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ class _ClassVerifier {
295295
GetterSetterTypesVerifier(
296296
typeSystem: typeSystem,
297297
errorReporter: reporter,
298-
).checkInterface(declaration, interface);
298+
).checkInterface(fragment.asElement2, interface);
299299

300300
if (declaration is ClassElement && !declaration.isAbstract ||
301301
declaration is EnumElement) {

pkg/analyzer/lib/src/generated/error_verifier.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
489489

490490
_isInNativeClass = node.nativeClause != null;
491491

492-
var augmented = declaredFragment.augmented;
492+
var augmented = declaredFragment.element;
493493
var declarationElement = augmented.firstFragment;
494494
_enclosingClass = declarationElement;
495495

@@ -535,7 +535,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
535535
GetterSetterTypesVerifier(
536536
typeSystem: typeSystem,
537537
errorReporter: errorReporter,
538-
).checkStaticAccessors(declarationElement.accessors);
538+
).checkStaticGetters(augmented.getters2);
539539

540540
super.visitClassDeclaration(node);
541541
} finally {
@@ -583,7 +583,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
583583

584584
@override
585585
void visitCompilationUnit(covariant CompilationUnitImpl node) {
586-
var element = node.declaredElement as CompilationUnitElement;
586+
var fragment = node.declaredFragment!;
587587
_featureSet = node.featureSet;
588588
_duplicateDefinitionVerifier.checkUnit(node);
589589
_checkForDeferredPrefixCollisions(node);
@@ -592,7 +592,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
592592
GetterSetterTypesVerifier(
593593
typeSystem: typeSystem,
594594
errorReporter: errorReporter,
595-
).checkStaticAccessors(element.accessors);
595+
).checkStaticGetters(fragment.element.getters);
596596

597597
super.visitCompilationUnit(node);
598598
_featureSet = null;
@@ -734,7 +734,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
734734
GetterSetterTypesVerifier(
735735
typeSystem: typeSystem,
736736
errorReporter: errorReporter,
737-
).checkStaticAccessors(declaredFragment.accessors);
737+
).checkStaticGetters(declaredElement.getters2);
738738

739739
super.visitEnumDeclaration(node);
740740
} finally {
@@ -793,7 +793,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
793793
GetterSetterTypesVerifier(
794794
typeSystem: typeSystem,
795795
errorReporter: errorReporter,
796-
).checkExtension(declaredFragment);
796+
).checkExtension(declaredElement);
797797

798798
var name = node.name;
799799
if (name != null) {
@@ -860,7 +860,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
860860
GetterSetterTypesVerifier(
861861
typeSystem: typeSystem,
862862
errorReporter: errorReporter,
863-
).checkExtensionType(declaredFragment, interface);
863+
).checkExtensionType(declaredElement, interface);
864864

865865
super.visitExtensionTypeDeclaration(node);
866866
} finally {

0 commit comments

Comments
 (0)