| // Copyright (c) 2016, 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:_fe_analyzer_shared/src/messages/severity.dart' |
| show CfeSeverity; |
| import 'package:kernel/ast.dart' show Source; |
| import 'package:kernel/target/targets.dart' show Target; |
| |
| import '../base/compiler_context.dart' show CompilerContext; |
| import '../base/messages.dart' show FormattedMessage, LocatedMessage, Message; |
| import '../base/processed_options.dart' show ProcessedOptions; |
| import '../base/ticker.dart' show Ticker; |
| import '../base/uri_translator.dart' show UriTranslator; |
| import '../kernel/benchmarker.dart' show BenchmarkPhases, Benchmarker; |
| import 'dill_loader.dart' show DillLoader; |
| |
| class DillTarget { |
| final Ticker ticker; |
| |
| bool isLoaded = false; |
| |
| late final DillLoader loader; |
| |
| final UriTranslator uriTranslator; |
| |
| final Target backendTarget; |
| |
| final CompilerContext context; |
| |
| /// Shared with [CompilerContext]. |
| Map<Uri, Source> get uriToSource => context.uriToSource; |
| |
| final Benchmarker? benchmarker; |
| |
| DillTarget( |
| this.context, |
| this.ticker, |
| this.uriTranslator, |
| this.backendTarget, { |
| this.benchmarker, |
| }) { |
| loader = new DillLoader(this); |
| } |
| |
| void loadExtraRequiredLibraries(DillLoader loader) { |
| for (String uri in backendTarget.extraRequiredLibraries) { |
| loader.read( |
| Uri.parse(uri), |
| 0, |
| accessor: loader.coreLibraryCompilationUnit, |
| ); |
| } |
| if (context.compilingPlatform) { |
| // Coverage-ignore-block(suite): Not run. |
| for (String uri in backendTarget.extraRequiredLibrariesPlatform) { |
| loader.read( |
| Uri.parse(uri), |
| 0, |
| accessor: loader.coreLibraryCompilationUnit, |
| ); |
| } |
| } |
| } |
| |
| FormattedMessage createFormattedMessage( |
| Message message, |
| int charOffset, |
| int length, |
| Uri? fileUri, |
| List<LocatedMessage>? messageContext, |
| CfeSeverity severity, { |
| List<Uri>? involvedFiles, |
| }) { |
| ProcessedOptions processedOptions = context.options; |
| return processedOptions.format( |
| context, |
| fileUri != null |
| ? message.withLocation(fileUri, charOffset, length) |
| : |
| // Coverage-ignore(suite): Not run. |
| message.withoutLocation(), |
| severity, |
| messageContext, |
| involvedFiles: involvedFiles, |
| ); |
| } |
| |
| void buildOutlines({bool suppressFinalizationErrors = false}) { |
| if (loader.libraries.isNotEmpty) { |
| benchmarker |
| // Coverage-ignore(suite): Not run. |
| ?.enterPhase(BenchmarkPhases.dill_buildOutlines); |
| loader.buildOutlines(); |
| benchmarker |
| // Coverage-ignore(suite): Not run. |
| ?.enterPhase(BenchmarkPhases.dill_finalizeExports); |
| loader.finalizeExports( |
| suppressFinalizationErrors: suppressFinalizationErrors, |
| ); |
| benchmarker |
| // Coverage-ignore(suite): Not run. |
| ?.enterPhase(BenchmarkPhases.unknownDillTarget); |
| } |
| isLoaded = true; |
| } |
| } |