Skip to content

Commit 354c64f

Browse files
committed
[Migration] deprecated_member_use_verifier.dart
Change-Id: I2e64e8693c829d130ef36396488a25454bdc4990 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402201 Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent 5b9e53e commit 354c64f

File tree

3 files changed

+73
-72
lines changed

3 files changed

+73
-72
lines changed

pkg/analyzer/analyzer_use_new_elements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ lib/src/dart/resolver/yield_statement_resolver.dart
9191
lib/src/diagnostic/diagnostic_factory.dart
9292
lib/src/error/best_practices_verifier.dart
9393
lib/src/error/correct_override.dart
94-
lib/src/error/deprecated_member_use_verifier.dart
9594
lib/src/error/duplicate_definition_verifier.dart
9695
lib/src/error/imports_verifier.dart
9796
lib/src/error/inheritance_override.dart

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

Lines changed: 72 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'package:analyzer/dart/ast/syntactic_entity.dart';
6-
import 'package:analyzer/dart/element/element.dart';
76
import 'package:analyzer/dart/element/element2.dart';
87
import 'package:analyzer/dart/element/type.dart';
98
import 'package:analyzer/error/listener.dart';
@@ -24,79 +23,79 @@ abstract class BaseDeprecatedMemberUseVerifier {
2423
: _strictCasts = strictCasts;
2524

2625
void assignmentExpression(AssignmentExpression node) {
27-
_checkForDeprecated(node.readElement, node.leftHandSide);
28-
_checkForDeprecated(node.writeElement, node.leftHandSide);
29-
_checkForDeprecated(node.staticElement, node);
26+
_checkForDeprecated(node.readElement2, node.leftHandSide);
27+
_checkForDeprecated(node.writeElement2, node.leftHandSide);
28+
_checkForDeprecated(node.element, node);
3029
}
3130

3231
void binaryExpression(BinaryExpression node) {
33-
_checkForDeprecated(node.staticElement, node);
32+
_checkForDeprecated(node.element, node);
3433
}
3534

3635
void constructorName(ConstructorName node) {
37-
_checkForDeprecated(node.staticElement, node);
36+
_checkForDeprecated(node.element, node);
3837
}
3938

4039
void exportDirective(ExportDirective node) {
41-
_checkForDeprecated(node.element?.exportedLibrary, node);
40+
_checkForDeprecated(node.libraryExport?.exportedLibrary2, node);
4241
}
4342

4443
void extensionOverride(ExtensionOverride node) {
45-
_checkForDeprecated(node.element, node);
44+
_checkForDeprecated(node.element2, node);
4645
}
4746

4847
void functionExpressionInvocation(FunctionExpressionInvocation node) {
49-
var callElement = node.staticElement;
50-
if (callElement is MethodElement &&
51-
callElement.name == FunctionElement.CALL_METHOD_NAME) {
48+
var callElement = node.element;
49+
if (callElement is MethodElement2 &&
50+
callElement.name3 == MethodElement2.CALL_METHOD_NAME) {
5251
_checkForDeprecated(callElement, node);
5352
}
5453
}
5554

5655
void importDirective(ImportDirective node) {
57-
_checkForDeprecated(node.element?.importedLibrary, node);
56+
_checkForDeprecated(node.libraryImport?.importedLibrary2, node);
5857
}
5958

6059
void indexExpression(IndexExpression node) {
61-
_checkForDeprecated(node.staticElement, node);
60+
_checkForDeprecated(node.element, node);
6261
}
6362

6463
void instanceCreationExpression(InstanceCreationExpression node) {
6564
_invocationArguments(
66-
node.constructorName.staticElement,
65+
node.constructorName.element,
6766
node.argumentList,
6867
);
6968
}
7069

7170
void methodInvocation(MethodInvocation node) {
7271
_invocationArguments(
73-
node.methodName.staticElement,
72+
node.methodName.element,
7473
node.argumentList,
7574
);
7675
}
7776

7877
void namedType(NamedType node) {
79-
_checkForDeprecated(node.element, node);
78+
_checkForDeprecated(node.element2, node);
8079
}
8180

8281
void patternField(PatternField node) {
83-
_checkForDeprecated(node.element, node);
82+
_checkForDeprecated(node.element2, node);
8483
}
8584

8685
void popInDeprecated() {
8786
_inDeprecatedMemberStack.removeLast();
8887
}
8988

9089
void postfixExpression(PostfixExpression node) {
91-
_checkForDeprecated(node.readElement, node.operand);
92-
_checkForDeprecated(node.writeElement, node.operand);
93-
_checkForDeprecated(node.staticElement, node);
90+
_checkForDeprecated(node.readElement2, node.operand);
91+
_checkForDeprecated(node.writeElement2, node.operand);
92+
_checkForDeprecated(node.element, node);
9493
}
9594

9695
void prefixExpression(PrefixExpression node) {
97-
_checkForDeprecated(node.readElement, node.operand);
98-
_checkForDeprecated(node.writeElement, node.operand);
99-
_checkForDeprecated(node.staticElement, node);
96+
_checkForDeprecated(node.readElement2, node.operand);
97+
_checkForDeprecated(node.writeElement2, node.operand);
98+
_checkForDeprecated(node.element, node);
10099
}
101100

102101
void pushInDeprecatedMetadata(List<Annotation> metadata) {
@@ -110,18 +109,18 @@ abstract class BaseDeprecatedMemberUseVerifier {
110109
}
111110

112111
void redirectingConstructorInvocation(RedirectingConstructorInvocation node) {
113-
_checkForDeprecated(node.staticElement, node);
114-
_invocationArguments(node.staticElement, node.argumentList);
112+
_checkForDeprecated(node.element, node);
113+
_invocationArguments(node.element, node.argumentList);
115114
}
116115

117-
void reportError(SyntacticEntity errorEntity, Element element,
116+
void reportError(SyntacticEntity errorEntity, Element2 element,
118117
String displayName, String? message) {
119-
reportError2(errorEntity, element.asElement2!, displayName, message);
118+
reportError2(errorEntity, element, displayName, message);
120119
}
121120

122121
void reportError2(SyntacticEntity errorEntity, Element2 element,
123122
String displayName, String? message) {
124-
reportError(errorEntity, element.asElement!, displayName, message);
123+
reportError(errorEntity, element, displayName, message);
125124
}
126125

127126
void simpleIdentifier(SimpleIdentifier node) {
@@ -151,14 +150,14 @@ abstract class BaseDeprecatedMemberUseVerifier {
151150
}
152151

153152
void superConstructorInvocation(SuperConstructorInvocation node) {
154-
_checkForDeprecated(node.staticElement, node);
155-
_invocationArguments(node.staticElement, node.argumentList);
153+
_checkForDeprecated(node.element, node);
154+
_invocationArguments(node.element, node.argumentList);
156155
}
157156

158157
/// Given some [element], look at the associated metadata and report the use
159158
/// of the member if it is declared as deprecated. If a diagnostic is reported
160159
/// it should be reported at the given [node].
161-
void _checkForDeprecated(Element? element, AstNode node) {
160+
void _checkForDeprecated(Element2? element, AstNode node) {
162161
if (!_isDeprecated(element)) {
163162
return;
164163
}
@@ -171,7 +170,7 @@ abstract class BaseDeprecatedMemberUseVerifier {
171170
return;
172171
}
173172

174-
if (element is ParameterElement && element.isRequired) {
173+
if (element is FormalParameterElement && element.isRequired) {
175174
return;
176175
}
177176

@@ -207,55 +206,55 @@ abstract class BaseDeprecatedMemberUseVerifier {
207206
}
208207

209208
String displayName = element!.displayName;
210-
if (element is ConstructorElement) {
209+
if (element is ConstructorElement2) {
211210
// TODO(jwren): We should modify ConstructorElement.displayName,
212211
// or have the logic centralized elsewhere, instead of doing this logic
213212
// here.
214-
displayName = element.name == ''
213+
displayName = element.name3 == null
215214
? '${element.displayName}.new'
216215
: element.displayName;
217-
} else if (element is LibraryElement) {
218-
displayName = element.definingCompilationUnit.source.uri.toString();
216+
} else if (element is LibraryElement2) {
217+
displayName = element.firstFragment.source.uri.toString();
219218
} else if (node is MethodInvocation &&
220-
displayName == FunctionElement.CALL_METHOD_NAME) {
219+
displayName == MethodElement2.CALL_METHOD_NAME) {
221220
var invokeType = node.staticInvokeType as InterfaceType;
222-
var invokeClass = invokeType.element;
223-
displayName = "${invokeClass.name}.${element.displayName}";
221+
var invokeClass = invokeType.element3;
222+
displayName = "${invokeClass.name3}.${element.displayName}";
224223
}
225224
var message = _deprecatedMessage(element, strictCasts: _strictCasts);
226225
reportError(errorEntity, element, displayName, message);
227226
}
228227

229-
void _invocationArguments(Element? element, ArgumentList arguments) {
230-
element = element?.declaration;
231-
if (element is ExecutableElement) {
228+
void _invocationArguments(Element2? element, ArgumentList arguments) {
229+
element = element?.baseElement;
230+
if (element is ExecutableElement2) {
232231
_visitParametersAndArguments(
233-
element.parameters,
232+
element.formalParameters,
234233
arguments.arguments,
235234
_checkForDeprecated,
236235
);
237236
}
238237
}
239238

240239
void _simpleIdentifier(SimpleIdentifier identifier) {
241-
_checkForDeprecated(identifier.staticElement, identifier);
240+
_checkForDeprecated(identifier.element, identifier);
242241
}
243242

244243
/// Return the message in the deprecated annotation on the given [element], or
245244
/// `null` if the element doesn't have a deprecated annotation or if the
246245
/// annotation does not have a message.
247-
static String? _deprecatedMessage(Element element,
246+
static String? _deprecatedMessage(Element2 element,
248247
{required bool strictCasts}) {
249248
// Implicit getters/setters.
250-
if (element.isSynthetic && element is PropertyAccessorElement) {
251-
var variable = element.variable2;
249+
if (element.isSynthetic && element is PropertyAccessorElement2) {
250+
var variable = element.variable3;
252251
if (variable == null) {
253252
return null;
254253
}
255254
element = variable;
256255
}
257256
var annotation = element.metadata.firstWhereOrNull((e) => e.isDeprecated);
258-
if (annotation == null || annotation.element is PropertyAccessorElement) {
257+
if (annotation == null || annotation.element2 is PropertyAccessorElement2) {
259258
return null;
260259
}
261260
var constantValue = annotation.computeConstantValue();
@@ -272,35 +271,40 @@ abstract class BaseDeprecatedMemberUseVerifier {
272271
return false;
273272
}
274273

275-
static bool _isDeprecated(Element? element) {
274+
static bool _isDeprecated(Element2? element) {
276275
if (element == null) {
277276
return false;
278277
}
279278

280-
if (element is PropertyAccessorElement && element.isSynthetic) {
279+
if (element is PropertyAccessorElement2 && element.isSynthetic) {
281280
// TODO(brianwilkerson): Why isn't this the implementation for PropertyAccessorElement?
282-
var variable = element.variable2;
283-
return variable != null && variable.hasDeprecated;
281+
var variable = element.variable3;
282+
return variable != null && variable.metadata2.hasDeprecated;
283+
}
284+
if (element is Annotatable) {
285+
return (element as Annotatable).metadata2.hasDeprecated;
284286
}
285-
return element.hasDeprecated;
287+
return false;
286288
}
287289

288-
/// Return `true` if [element] is a [ParameterElement] declared in [node].
289-
static bool _isLocalParameter(Element? element, AstNode? node) {
290-
if (element is ParameterElement) {
291-
var definingFunction = element.enclosingElement3 as ExecutableElement;
290+
/// Returns whether [element] is a [FormalParameterElement] declared in
291+
/// [node].
292+
static bool _isLocalParameter(Element2? element, AstNode? node) {
293+
if (element is FormalParameterElement) {
294+
var definingFunction = element.firstFragment.enclosingFragment?.element
295+
as ExecutableElement2;
292296

293297
for (; node != null; node = node.parent) {
294298
if (node is ConstructorDeclaration) {
295-
if (node.declaredElement == definingFunction) {
299+
if (node.declaredFragment?.element == definingFunction) {
296300
return true;
297301
}
298302
} else if (node is FunctionExpression) {
299-
if (node.declaredElement == definingFunction) {
303+
if (node.declaredFragment?.element == definingFunction) {
300304
return true;
301305
}
302306
} else if (node is MethodDeclaration) {
303-
if (node.declaredElement == definingFunction) {
307+
if (node.declaredFragment?.element == definingFunction) {
304308
return true;
305309
}
306310
}
@@ -310,11 +314,11 @@ abstract class BaseDeprecatedMemberUseVerifier {
310314
}
311315

312316
static void _visitParametersAndArguments(
313-
List<ParameterElement> parameters,
317+
List<FormalParameterElement> parameters,
314318
List<Expression> arguments,
315-
void Function(ParameterElement, Expression) f,
319+
void Function(FormalParameterElement, Expression) f,
316320
) {
317-
Map<String, ParameterElement>? namedParameters;
321+
Map<String, FormalParameterElement>? namedParameters;
318322

319323
var positionalIndex = 0;
320324
for (var argument in arguments) {
@@ -323,7 +327,7 @@ abstract class BaseDeprecatedMemberUseVerifier {
323327
namedParameters = {};
324328
for (var parameter in parameters) {
325329
if (parameter.isNamed) {
326-
namedParameters[parameter.name] = parameter;
330+
namedParameters[parameter.name3!] = parameter;
327331
}
328332
}
329333
}
@@ -352,9 +356,9 @@ class DeprecatedMemberUseVerifier extends BaseDeprecatedMemberUseVerifier {
352356
{required super.strictCasts});
353357

354358
@override
355-
void reportError(SyntacticEntity errorEntity, Element element,
359+
void reportError(SyntacticEntity errorEntity, Element2 element,
356360
String displayName, String? message) {
357-
var library = element is LibraryElement ? element : element.library;
361+
var library = element is LibraryElement2 ? element : element.library2;
358362

359363
message = message?.trim();
360364
if (message == null || message.isEmpty || message == '.') {
@@ -381,12 +385,12 @@ class DeprecatedMemberUseVerifier extends BaseDeprecatedMemberUseVerifier {
381385
}
382386
}
383387

384-
bool _isLibraryInWorkspacePackage(LibraryElement? library) {
388+
bool _isLibraryInWorkspacePackage(LibraryElement2? library) {
385389
// Better to not make a big claim that they _are_ in the same package,
386390
// if we were unable to determine what package [_currentLibrary] is in.
387391
if (_workspacePackage == null || library == null) {
388392
return false;
389393
}
390-
return _workspacePackage.contains(library.source);
394+
return _workspacePackage.contains(library.firstFragment.source);
391395
}
392396
}

pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -887,8 +887,6 @@ void f() {
887887
}
888888
''', [
889889
error(HintCode.DEPRECATED_MEMBER_USE, 43, 1),
890-
// TODO(pq): consider deduplicating.
891-
error(HintCode.DEPRECATED_MEMBER_USE, 43, 1),
892890
]);
893891
}
894892

@@ -1623,7 +1621,7 @@ class B extends A {
16231621
''',
16241622
[
16251623
error(HintCode.DEPRECATED_MEMBER_USE, 57, 7,
1626-
text: "'A.new' is deprecated and shouldn't be used."),
1624+
text: "'A' is deprecated and shouldn't be used."),
16271625
],
16281626
);
16291627
}

0 commit comments

Comments
 (0)