d810c7d0c0
This commit was generated by the following steps: - Manually change the SDK constraint in `pkg/front_end/pubspec.yaml` - Run `gclient sync` - Run `find pkg/front_end/benchmarks pkg/front_end/lib pkg/front_end/presubmit_helper.dart pkg/front_end/presubmit_helper_spawn.dart pkg/front_end/test pkg/front_end/tool -iname '*.dart' | xargs tools/sdks/dart-sdk/bin/dart format` - Manually fix remaining long lines and add dead code ignore comments. - Fix coverage by running `dart --enable-asserts pkg/front_end/test/coverage_suite.dart --tasks=5 --add-and-remove-comments` - Fix `pkg/front_end/test/coverage_merger/assert_message_auto_ignored` by running `dart pkg/front_end/test/unit_test_suites.dart -p pkg/front_end/test/coverage_merger/assert_message_auto_ignored -DupdateExpectations=true` The diff is large because the version bump causes the formatter to switch into "tall mode". Change-Id: I6a6a696410da8b168060acfe0e4d6e91e294c4f0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/447628 Auto-Submit: Paul Berry <paulberry@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
84 lines
2.6 KiB
Dart
84 lines
2.6 KiB
Dart
// Copyright (c) 2023, 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 'dart:io';
|
|
|
|
import 'package:front_end/src/api_prototype/compiler_options.dart';
|
|
import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart';
|
|
import 'package:kernel/ast.dart';
|
|
|
|
import 'incremental_suite.dart' as helper;
|
|
import 'utils/io_utils.dart' show computeRepoDirUri;
|
|
|
|
final Uri repoDir = computeRepoDirUri();
|
|
|
|
void main() async {
|
|
print(await getAllTokens());
|
|
}
|
|
|
|
Future<Set<Class>> getAllTokens() async {
|
|
Uri scannerDir = repoDir.resolve("pkg/_fe_analyzer_shared/lib/src/scanner/");
|
|
return await findIn(Directory.fromUri(scannerDir), "Token", "/token.dart");
|
|
}
|
|
|
|
/// Compiles either a File or a Directory and finds all subtypes of (including)
|
|
/// the specified [className] in a file containing [classFilename].
|
|
Future<Set<Class>> findIn(
|
|
Directory where,
|
|
String className,
|
|
String classFilename,
|
|
) async {
|
|
List<Uri> files = [];
|
|
for (FileSystemEntity subEntity in where.listSync(recursive: true)) {
|
|
if (subEntity is File) {
|
|
if (subEntity.path.toLowerCase().endsWith(".dart")) {
|
|
files.add(subEntity.uri);
|
|
}
|
|
}
|
|
}
|
|
|
|
Class? foundTarget;
|
|
Map<Class, Set<Class>> subclassMap = {};
|
|
Component component = await compileOutline(files);
|
|
for (Library lib in component.libraries) {
|
|
for (Class c in lib.classes) {
|
|
if (c.name == className && c.fileUri.toString().contains(classFilename)) {
|
|
if (foundTarget != null) throw "Found both $foundTarget and $c";
|
|
foundTarget = c;
|
|
}
|
|
for (Supertype s in c.supers) {
|
|
(subclassMap[s.classNode] ??= {}).add(c);
|
|
}
|
|
}
|
|
}
|
|
if (foundTarget == null) throw "Didn't find '$className' in '$classFilename'";
|
|
Set<Class> result = {foundTarget};
|
|
List<Class> worklist = [foundTarget];
|
|
while (worklist.isNotEmpty) {
|
|
Class c = worklist.removeLast();
|
|
for (Class child in subclassMap[c] ?? const []) {
|
|
if (result.add(child)) {
|
|
worklist.add(child);
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
Future<Component> compileOutline(List<Uri> input) async {
|
|
CompilerOptions options = helper.getOptions();
|
|
options.omitPlatform = true;
|
|
// Give only one input so it automatically finds the packages file.
|
|
helper.TestIncrementalCompiler compiler = new helper.TestIncrementalCompiler(
|
|
options,
|
|
input.first,
|
|
null,
|
|
true,
|
|
);
|
|
IncrementalCompilerResult compilerResult = await compiler.computeDelta(
|
|
entryPoints: input,
|
|
);
|
|
return compilerResult.component;
|
|
}
|