blob: b9d7999833fd88d7e62e82deea1d9e3840b7c732 [file] [log] [blame]
// Copyright (c) 2017, 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.
library fasta.get_dependencies;
import 'dart:async' show Future;
import 'package:kernel/kernel.dart' show loadProgramFromBytes;
import 'package:kernel/target/targets.dart' show Target;
import '../api_prototype/compiler_options.dart' show CompilerOptions;
import '../api_prototype/file_system.dart' show FileSystem;
import '../base/processed_options.dart' show ProcessedOptions;
import 'compiler_context.dart' show CompilerContext;
import 'dill/dill_target.dart' show DillTarget;
import 'kernel/kernel_target.dart' show KernelTarget;
import 'uri_translator.dart' show UriTranslator;
// TODO(sigmund): reimplement this API using the directive listener intead.
Future<List<Uri>> getDependencies(Uri script,
{Uri sdk,
Uri packages,
Uri platform,
bool verbose: false,
Target target}) async {
var options = new CompilerOptions()
..target = target
..verbose = verbose
..packagesFileUri = packages
..sdkSummary = platform
..sdkRoot = sdk;
var pOptions = new ProcessedOptions(options, false, <Uri>[script]);
return await CompilerContext.runWithOptions(pOptions,
(CompilerContext c) async {
FileSystem fileSystem = c.options.fileSystem;
UriTranslator uriTranslator = await c.options.getUriTranslator();
c.options.ticker.logMs("Read packages file");
DillTarget dillTarget =
new DillTarget(c.options.ticker, uriTranslator, c.options.target);
if (platform != null) {
var bytes = await fileSystem.entityForUri(platform).readAsBytes();
var platformProgram = loadProgramFromBytes(bytes);
dillTarget.loader.appendLibraries(platformProgram);
}
KernelTarget kernelTarget = new KernelTarget(
fileSystem, false, dillTarget, uriTranslator,
uriToSource: c.uriToSource);
kernelTarget.read(script);
await dillTarget.buildOutlines();
await kernelTarget.loader.buildOutlines();
return await kernelTarget.loader.getDependencies();
});
}