| Index: sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
|
| index 1df0c815457d64e081b3bec5a907f8d0cbc26d88..3c78647e47b276c9cbb939fe44d03161727f2156 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart
|
| @@ -9,7 +9,7 @@ import 'dart:collection' show LinkedHashMap;
|
| import 'dart:io';
|
| import 'dart:uri';
|
|
|
| -import '../../compiler.dart' as diagnostics;
|
| +import '../../compiler.dart' as api;
|
| import '../elements/elements.dart';
|
| import '../resolution/resolution.dart' show ResolverTask, ResolverVisitor;
|
| import '../apiimpl.dart' show Compiler;
|
| @@ -84,8 +84,6 @@ Dart2JsTypeMirror _convertTypeToTypeMirror(
|
| // TODO(johnniwinther): We need a mirror on malformed types.
|
| return system.dynamicType;
|
| }
|
| - _diagnosticListener.internalError(
|
| - "Unexpected type $type of kind ${type.kind}");
|
| system.compiler.internalError("Unexpected type $type of kind ${type.kind}");
|
| }
|
|
|
| @@ -193,114 +191,96 @@ String _getOperatorFromOperatorName(String name) {
|
| return newName;
|
| }
|
|
|
| -DiagnosticListener get _diagnosticListener {
|
| - return const Dart2JsDiagnosticListener();
|
| -}
|
| -
|
| -class Dart2JsDiagnosticListener implements DiagnosticListener {
|
| - const Dart2JsDiagnosticListener();
|
| -
|
| - void cancel(String reason, {node, token, instruction, element}) {
|
| - print(reason);
|
| - }
|
| -
|
| - void log(message) {
|
| - print(message);
|
| - }
|
| -
|
| - void internalError(String message,
|
| - {Node node, Token token, HInstruction instruction,
|
| - Element element}) {
|
| - cancel('Internal error: $message', node: node, token: token,
|
| - instruction: instruction, element: element);
|
| - }
|
| -
|
| - void internalErrorOnElement(Element element, String message) {
|
| - internalError(message, element: element);
|
| - }
|
| -
|
| - SourceSpan spanFromSpannable(Node node, [Uri uri]) {
|
| - // TODO(johnniwinther): implement this.
|
| - throw 'unimplemented';
|
| - }
|
| -
|
| - void reportMessage(SourceSpan span, Diagnostic message,
|
| - diagnostics.Diagnostic kind) {
|
| - // TODO(johnniwinther): implement this.
|
| - throw 'unimplemented';
|
| - }
|
| -
|
| - bool onDeprecatedFeature(Spannable span, String feature) {
|
| - // TODO(johnniwinther): implement this?
|
| - throw 'unimplemented';
|
| - }
|
| -}
|
| -
|
| //------------------------------------------------------------------------------
|
| // Compilation implementation
|
| //------------------------------------------------------------------------------
|
|
|
| -// TODO(johnniwinther): Support client configurable handlers/providers.
|
| -class Dart2JsCompilation implements Compilation {
|
| - Compiler _compiler;
|
| - final Uri cwd;
|
| - final SourceFileProvider provider;
|
| -
|
| - Dart2JsCompilation(Path script, Path libraryRoot,
|
| - [Path packageRoot, List<String> opts = const <String>[]])
|
| - : cwd = getCurrentDirectory(),
|
| - provider = new SourceFileProvider() {
|
| - var handler = new FormattingDiagnosticHandler(provider);
|
| - var libraryUri = cwd.resolve('${libraryRoot}/');
|
| - var packageUri;
|
| - if (packageRoot != null) {
|
| - packageUri = cwd.resolve('${packageRoot}/');
|
| - } else {
|
| - packageUri = libraryUri;
|
| - }
|
| - _compiler = new Compiler(provider.readStringFromUri,
|
| - null,
|
| - handler.diagnosticHandler,
|
| - libraryUri, packageUri, opts);
|
| - var scriptUri = cwd.resolve(script.toString());
|
| - // TODO(johnniwinther): Detect file not found
|
| - _compiler.run(scriptUri);
|
| - }
|
| -
|
| - Dart2JsCompilation.library(List<Path> libraries, Path libraryRoot,
|
| - [Path packageRoot, List<String> opts = const <String>[]])
|
| - : cwd = getCurrentDirectory(),
|
| - provider = new SourceFileProvider() {
|
| - var libraryUri = cwd.resolve('${libraryRoot}/');
|
| - var packageUri;
|
| - if (packageRoot != null) {
|
| - packageUri = cwd.resolve('${packageRoot}/');
|
| - } else {
|
| - packageUri = libraryUri;
|
| - }
|
| - opts = new List<String>.from(opts);
|
| - opts.add('--analyze-signatures-only');
|
| - opts.add('--analyze-all');
|
| - _compiler = new Compiler(provider.readStringFromUri,
|
| - null,
|
| - silentDiagnosticHandler,
|
| - libraryUri, packageUri, opts);
|
| - var librariesUri = <Uri>[];
|
| - for (Path library in libraries) {
|
| - librariesUri.add(cwd.resolve(library.toString()));
|
| - // TODO(johnniwinther): Detect file not found
|
| +// TODO(johnniwinther): Support client configurable providers.
|
| +
|
| +/**
|
| + * Returns a future that completes to a non-null String when [script]
|
| + * has been successfully compiled.
|
| + *
|
| + * TODO(johnniwinther): The method is deprecated but here to support [Path]
|
| + * which is used through dartdoc.
|
| + */
|
| +Future<String> compile(Path script,
|
| + Path libraryRoot,
|
| + {Path packageRoot,
|
| + List<String> options: const <String>[],
|
| + api.DiagnosticHandler diagnosticHandler}) {
|
| + Uri cwd = getCurrentDirectory();
|
| + SourceFileProvider provider = new SourceFileProvider();
|
| + if (diagnosticHandler == null) {
|
| + diagnosticHandler =
|
| + new FormattingDiagnosticHandler(provider).diagnosticHandler;
|
| + }
|
| + Uri scriptUri = cwd.resolve(script.toString());
|
| + Uri libraryUri = cwd.resolve('${libraryRoot}/');
|
| + Uri packageUri = null;
|
| + if (packageRoot != null) {
|
| + packageUri = cwd.resolve('${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<Path> libraries,
|
| + Path libraryRoot,
|
| + {Path packageRoot,
|
| + List<String> options: const <String>[],
|
| + api.DiagnosticHandler diagnosticHandler}) {
|
| + Uri cwd = getCurrentDirectory();
|
| + SourceFileProvider provider = new SourceFileProvider();
|
| + if (diagnosticHandler == null) {
|
| + diagnosticHandler =
|
| + new FormattingDiagnosticHandler(provider).diagnosticHandler;
|
| + }
|
| + Uri libraryUri = cwd.resolve('${libraryRoot}/');
|
| + Uri packageUri = null;
|
| + if (packageRoot != null) {
|
| + packageUri = cwd.resolve('${packageRoot}/');
|
| + }
|
| + options = new List<String>.from(options);
|
| + options.add('--analyze-only');
|
| + options.add('--analyze-signatures-only');
|
| + options.add('--analyze-all');
|
| +
|
| + bool compilationFailed = false;
|
| + void internalDiagnosticHandler(Uri uri, int begin, int end,
|
| + String message, api.Diagnostic kind) {
|
| + if (kind == api.Diagnostic.ERROR ||
|
| + kind == api.Diagnostic.CRASH) {
|
| + compilationFailed = true;
|
| }
|
| - _compiler.librariesToAnalyzeWhenRun = librariesUri;
|
| - _compiler.run(null);
|
| + diagnosticHandler(uri, begin, end, message, kind);
|
| + }
|
| +
|
| + // TODO(johnniwinther): Extract the following as an [analyze] method in
|
| + // [:compiler/compiler.dart:].
|
| + Compiler compiler = new Compiler(provider.readStringFromUri,
|
| + null,
|
| + internalDiagnosticHandler,
|
| + libraryUri, packageUri, options);
|
| + List<Uri> librariesUri = <Uri>[];
|
| + for (Path library in libraries) {
|
| + librariesUri.add(cwd.resolve(library.toString()));
|
| + }
|
| + compiler.librariesToAnalyzeWhenRun = librariesUri;
|
| + bool success = compiler.run(null);
|
| + if (success && !compilationFailed) {
|
| + return new Future<MirrorSystem>.immediate(
|
| + new Dart2JsMirrorSystem(compiler));
|
| + } else {
|
| + return new Future<MirrorSystem>.immediateError(
|
| + 'Failed to create mirror system.');
|
| }
|
| -
|
| - MirrorSystem get mirrors => new Dart2JsMirrorSystem(_compiler);
|
| -
|
| - Future<String> compileToJavaScript() =>
|
| - new Future<String>.immediate(_compiler.assembledCode);
|
| }
|
|
|
| -
|
| //------------------------------------------------------------------------------
|
| // Dart2Js specific extensions of mirror interfaces
|
| //------------------------------------------------------------------------------
|
|
|