blob: b43d932debf255d06cec1f95fec1c2fb0fabde47 [file] [log] [blame]
// Copyright (c) 2020, 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:typed_data';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/context/packages.dart';
import 'package:analyzer/src/dart/analysis/byte_store.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
import 'package:analyzer/src/dart/sdk/sdk.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/summary2/package_bundle_format.dart';
import 'package:yaml/yaml.dart';
/// Build summary for SDK at the given [sdkPath].
///
/// If [embedderYamlPath] is provided, then libraries from this file are
/// appended to the libraries of the specified SDK.
Future<Uint8List> buildSdkSummary2({
required ResourceProvider resourceProvider,
required String sdkPath,
String? embedderYamlPath,
}) async {
var sdk = FolderBasedDartSdk(
resourceProvider,
resourceProvider.getFolder(sdkPath),
);
// Append libraries from the embedder.
if (embedderYamlPath != null) {
var file = resourceProvider.getFile(embedderYamlPath);
var content = file.readAsStringSync();
var map = loadYaml(content) as YamlMap;
var embedderSdk = EmbedderSdk(
resourceProvider,
{file.parent: map},
languageVersion: sdk.languageVersion,
);
for (var library in embedderSdk.sdkLibraries) {
var uriStr = library.shortName;
if (sdk.libraryMap.getLibrary(uriStr) == null) {
sdk.libraryMap.setLibrary(uriStr, library);
}
}
}
final logger = PerformanceLog(StringBuffer());
final scheduler = AnalysisDriverScheduler(logger);
final analysisDriver = AnalysisDriver(
scheduler: scheduler,
logger: logger,
resourceProvider: resourceProvider,
byteStore: MemoryByteStore(),
sourceFactory: SourceFactory([
DartUriResolver(sdk),
]),
analysisOptions: AnalysisOptionsImpl(),
packages: Packages({}),
);
scheduler.start();
final libraryUriList = sdk.uris.map(Uri.parse).toList();
return await analysisDriver.buildPackageBundle(
uriList: libraryUriList,
packageBundleSdk: PackageBundleSdk(
languageVersionMajor: sdk.languageVersion.major,
languageVersionMinor: sdk.languageVersion.minor,
allowedExperimentsJson: sdk.allowedExperimentsJson,
),
);
}