| // 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:_fe_analyzer_shared/src/messages/severity.dart'; |
| import 'package:front_end/src/api_prototype/compiler_options.dart' as api; |
| import 'package:front_end/src/api_prototype/incremental_kernel_generator.dart' |
| show IncrementalCompilerResult; |
| import 'package:front_end/src/base/compiler_context.dart'; |
| import 'package:front_end/src/base/incremental_compiler.dart'; |
| import 'package:front_end/src/base/processed_options.dart'; |
| import 'package:front_end/src/compute_platform_binaries_location.dart' |
| show computePlatformBinariesLocation; |
| import 'package:kernel/kernel.dart'; |
| import 'package:kernel/target/targets.dart'; |
| |
| import '../tool/unreachable_if_finder.dart'; |
| import 'testing_utils.dart' show getGitFiles; |
| import "utils/io_utils.dart"; |
| |
| final Uri repoDir = computeRepoDirUri(); |
| |
| Set<Uri> libUris = {}; |
| |
| Future<void> main(List<String> args) async { |
| api.CompilerOptions compilerOptions = getOptions(); |
| |
| Uri packageConfigUri = repoDir.resolve(".dart_tool/package_config.json"); |
| if (!new File.fromUri(packageConfigUri).existsSync()) { |
| throw "Couldn't find .dart_tool/package_config.json"; |
| } |
| compilerOptions.packagesFileUri = packageConfigUri; |
| |
| ProcessedOptions options = new ProcessedOptions(options: compilerOptions); |
| |
| libUris.add(repoDir.resolve("pkg/front_end/lib/")); |
| libUris.add(repoDir.resolve("pkg/front_end/test/fasta/")); |
| libUris.add(repoDir.resolve("pkg/front_end/tool/")); |
| |
| for (Uri uri in libUris) { |
| Set<Uri> gitFiles = await getGitFiles(uri); |
| List<FileSystemEntity> entities = |
| new Directory.fromUri(uri).listSync(recursive: true); |
| for (FileSystemEntity entity in entities) { |
| if (entity is File && |
| entity.path.endsWith(".dart") && |
| gitFiles.contains(entity.uri)) { |
| options.inputs.add(entity.uri); |
| } |
| } |
| } |
| |
| Stopwatch stopwatch = new Stopwatch()..start(); |
| |
| IncrementalCompiler compiler = |
| new IncrementalCompiler(new CompilerContext(options)); |
| IncrementalCompilerResult compilerResult = await compiler.computeDelta(); |
| Component component = compilerResult.component; |
| List<Warning> warnings = UnreachableIfFinder.find(component); |
| |
| print("Done in ${stopwatch.elapsedMilliseconds} ms. " |
| "Found ${warnings.length} warnings."); |
| if (warnings.length > 0) { |
| for (Warning warning in warnings) { |
| print(warning); |
| print(""); |
| } |
| throw "Found ${warnings.length} warnings."; |
| } |
| } |
| |
| api.CompilerOptions getOptions() { |
| Uri sdkRoot = computePlatformBinariesLocation(forceBuildDir: true); |
| api.CompilerOptions options = new api.CompilerOptions() |
| ..sdkRoot = sdkRoot |
| ..compileSdk = false |
| ..target = new NoneTarget(new TargetFlags()) |
| ..librariesSpecificationUri = repoDir.resolve("sdk/lib/libraries.json") |
| ..omitPlatform = true |
| ..onDiagnostic = (api.DiagnosticMessage message) { |
| if (message.severity == Severity.error) { |
| print(message.plainTextFormatted.join('\n')); |
| exitCode = 1; |
| } |
| } |
| ..environmentDefines = const {}; |
| return options; |
| } |