blob: 7ee8828747bc7e0b709dcc04842fa84e399db509 [file] [log] [blame]
// Copyright (c) 2012, 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 dart2js_util;
import 'dart:async' show Future;
import 'dart:io' show Path;
import '../../../compiler/compiler.dart' as api;
import '../../../compiler/implementation/mirrors/dart2js_mirror.dart' as dart2js
show analyze, Dart2JsMirrorSystem;
import '../../../compiler/implementation/mirrors/mirrors.dart'
show MirrorSystem;
import '../../../compiler/implementation/source_file_provider.dart'
show FormattingDiagnosticHandler, SourceFileProvider,
CompilerSourceFileProvider;
import '../../../compiler/implementation/filenames.dart'
show appendSlash, currentDirectory;
// TODO(johnniwinther): Support client configurable providers.
/**
* Returns a future that completes to a non-null String when [script]
* has been successfully compiled.
*/
// TODO(amouravski): Remove this method and call dart2js via a process instead.
Future<String> compile(String script,
String libraryRoot,
{String packageRoot,
List<String> options: const <String>[],
api.DiagnosticHandler diagnosticHandler}) {
SourceFileProvider provider = new CompilerSourceFileProvider();
if (diagnosticHandler == null) {
diagnosticHandler =
new FormattingDiagnosticHandler(provider).diagnosticHandler;
}
Uri scriptUri = currentDirectory.resolve(script.toString());
Uri libraryUri = currentDirectory.resolve(appendSlash('$libraryRoot'));
Uri packageUri = null;
if (packageRoot != null) {
packageUri = currentDirectory.resolve(appendSlash('$packageRoot'));
}
return api.compile(scriptUri, libraryUri, packageUri,
provider.readStringFromUri, diagnosticHandler, options);
}
/**
* Analyzes set of libraries and provides a mirror system which can be used for
* static inspection of the source code.
*/
Future<MirrorSystem> analyze(List<String> libraries,
String libraryRoot,
{String packageRoot,
List<String> options: const <String>[],
api.DiagnosticHandler diagnosticHandler}) {
SourceFileProvider provider = new CompilerSourceFileProvider();
if (diagnosticHandler == null) {
diagnosticHandler =
new FormattingDiagnosticHandler(provider).diagnosticHandler;
}
Uri libraryUri = currentDirectory.resolve(appendSlash('$libraryRoot'));
Uri packageUri = null;
if (packageRoot != null) {
packageUri = currentDirectory.resolve(appendSlash('$packageRoot'));
}
List<Uri> librariesUri = <Uri>[];
for (String library in libraries) {
librariesUri.add(currentDirectory.resolve(library));
}
return dart2js.analyze(librariesUri, libraryUri, packageUri,
provider.readStringFromUri, diagnosticHandler,
options);
}