6bf48988c8
This updates the analysis helpers to add a test for the `map().toList()` problem addressed in https://dart-review.googlesource.com/c/sdk/+/241605 Included in the CL is the addition of the 'analyze.dart' tools, which can be used for advanced code searches. This was used to find the occurences of `map().toList()`. Change-Id: I6e9da282e37fde4534ed5e308260f092779d0750 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/241744 Reviewed-by: Chloe Stefantsova <cstefantsova@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
34 lines
1.4 KiB
Dart
34 lines
1.4 KiB
Dart
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import 'package:front_end/src/testing/analysis_helper.dart';
|
|
import 'package:kernel/kernel.dart';
|
|
|
|
Future<void> main(List<String> arguments) async {
|
|
await runAnalysis(
|
|
cfeAndBackendsEntryPoints,
|
|
performGeneralAnalysis(cfeAndBackends,
|
|
(TreeNode node, AnalysisInterface interface) {
|
|
// Use 'analyze.dart' to perform advanced analysis/code search by
|
|
// replacing the "example analysis" with a custom analysis.
|
|
|
|
// Example analysis:
|
|
if (node is InstanceInvocation && node.name.text == 'toList') {
|
|
TreeNode receiver = node.receiver;
|
|
if (receiver is InstanceInvocation &&
|
|
receiver.name.text == 'map' &&
|
|
receiver.arguments.types.length == 1) {
|
|
InterfaceType expressionType = interface.createInterfaceType(
|
|
'Expression',
|
|
uri: 'package:kernel/ast.dart');
|
|
DartType typeArgument = receiver.arguments.types.single;
|
|
if (interface.isSubtypeOf(typeArgument, expressionType) &&
|
|
typeArgument != expressionType) {
|
|
interface.reportMessage(node, "map().toList()");
|
|
}
|
|
}
|
|
}
|
|
}));
|
|
}
|