Chromium Code Reviews| Index: pkg/fletchc/lib/src/fletch_compiler_implementation.dart |
| diff --git a/pkg/fletchc/lib/src/fletch_compiler_implementation.dart b/pkg/fletchc/lib/src/fletch_compiler_implementation.dart |
| index 8b905f2c0c9129f4326e739fa3b6a718a6d98782..3ec3210dec10f2317176e211ce659d6020fe6c1f 100644 |
| --- a/pkg/fletchc/lib/src/fletch_compiler_implementation.dart |
| +++ b/pkg/fletchc/lib/src/fletch_compiler_implementation.dart |
| @@ -8,13 +8,15 @@ import 'dart:async' show |
| EventSink; |
| import 'package:sdk_library_metadata/libraries.dart' show |
| - libraries, |
| LibraryInfo; |
| import 'package:compiler/compiler_new.dart' as api; |
| import 'package:compiler/src/apiimpl.dart' as apiimpl; |
| +import 'package:compiler/src/compiler.dart' show |
| + GlobalDependencyRegistry; |
|
ahe
2015/12/01 10:12:13
Unused import.
sigurdm
2015/12/03 14:48:10
Done.
|
| + |
| import 'package:compiler/src/io/source_file.dart'; |
| import 'package:compiler/src/source_file_provider.dart' show |
| @@ -27,16 +29,18 @@ import 'package:compiler/src/elements/modelx.dart' show |
| import 'package:compiler/compiler_new.dart' show |
| CompilerOutput; |
| -import 'package:compiler/src/util/uri_extras.dart' show |
| - relativize; |
| - |
| -import 'package:compiler/src/dart2jslib.dart' show |
| - CodegenRegistry, |
| +import 'package:compiler/src/diagnostics/messages.dart' show |
| Message, |
| MessageKind, |
| MessageTemplate; |
| +import 'package:compiler/src/diagnostics/source_span.dart' show |
|
ahe
2015/12/01 10:12:13
Add newline before import.
sigurdm
2015/12/03 14:48:10
Done.
|
| + SourceSpan; |
| + |
| +import 'package:compiler/src/diagnostics/diagnostic_listener.dart' show |
| + DiagnosticMessage, |
| + DiagnosticReporter; |
| -import 'package:compiler/src/util/util.dart' show |
| +import 'package:compiler/src/diagnostics/spannable.dart' show |
| Spannable; |
| import 'fletch_registry.dart' show |
| @@ -51,7 +55,12 @@ import 'debug_info.dart'; |
| import 'find_position_visitor.dart'; |
| import 'fletch_context.dart'; |
| +import 'fletch_enqueuer.dart' show |
| + FletchEnqueueTask; |
| + |
| import '../fletch_system.dart'; |
| +import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; |
|
ahe
2015/12/01 10:12:13
Newlines between imports.
sigurdm
2015/12/03 14:48:10
Done.
|
| +import 'package:compiler/src/elements/elements.dart'; |
| const EXTRA_DART2JS_OPTIONS = const <String>[ |
| // TODO(ahe): This doesn't completely disable type inference. Investigate. |
| @@ -112,7 +121,7 @@ const Map<String, LibraryInfo> FLETCH_LIBRARIES = const { |
| platforms: FLETCH_PLATFORM), |
| }; |
| -class FletchCompilerImplementation extends apiimpl.Compiler { |
| +class FletchCompilerImplementation extends apiimpl.CompilerImpl { |
| final Map<String, LibraryInfo> fletchLibraries = <String, LibraryInfo>{}; |
| final Uri fletchVm; |
| @@ -129,6 +138,11 @@ class FletchCompilerImplementation extends apiimpl.Compiler { |
| // TODO(ahe): Clean this up and remove this. |
| var helper; |
| + @override |
|
ahe
2015/12/01 10:12:13
Please dont use @override.
sigurdm
2015/12/03 14:48:10
Done.
|
| + FletchEnqueueTask get enqueuer => super.enqueuer; |
| + |
| + FletchDiagnosticReporter reporter; |
| + |
| FletchCompilerImplementation( |
| api.CompilerInput provider, |
| api.CompilerOutput outputProvider, |
| @@ -144,9 +158,7 @@ class FletchCompilerImplementation extends apiimpl.Compiler { |
| provider, outputProvider, handler, libraryRoot, null, |
| EXTRA_DART2JS_OPTIONS.toList()..addAll(options), environment, |
| packageConfig, null, FletchBackend.newInstance) { |
| - CodegenRegistry global = globalDependencies; |
| - globalDependencies = |
| - new FletchRegistry(this, global.treeElements).asRegistry; |
| + reporter = new FletchDiagnosticReporter(super.reporter); |
| } |
| bool get showPackageWarnings => true; |
| @@ -160,50 +172,17 @@ class FletchCompilerImplementation extends apiimpl.Compiler { |
| String fletchPatchLibraryFor(String name) => FLETCH_PATCHES[name]; |
| - LibraryInfo lookupLibraryInfo(String name) { |
| - return fletchLibraries.putIfAbsent(name, () { |
| - // Let FLETCH_LIBRARIES shadow libraries. |
| - if (FLETCH_LIBRARIES.containsKey(name)) { |
| - return computeFletchLibraryInfo(name); |
| - } |
| - LibraryInfo info = libraries[name]; |
| - if (info == null) { |
| - return computeFletchLibraryInfo(name); |
| - } |
| - return new LibraryInfo( |
| - info.path, |
| - categories: info.categoriesString, |
| - dart2jsPath: info.dart2jsPath, |
| - dart2jsPatchPath: fletchPatchLibraryFor(name), |
| - implementation: info.implementation, |
| - documented: info.documented, |
| - maturity: info.maturity, |
| - platforms: info.platforms); |
| - }); |
| - } |
| - |
| - LibraryInfo computeFletchLibraryInfo(String name) { |
| - LibraryInfo info = FLETCH_LIBRARIES[name]; |
| - if (info == null) return null; |
| - // Since this LibraryInfo is completely internal to Fletch, there's no need |
| - // for dart2js extensions and patches. |
| - assert(info.dart2jsPath == null); |
| - assert(info.dart2jsPatchPath == null); |
| - String path = relativize( |
| - libraryRoot, patchRoot.resolve("lib/${info.path}"), false); |
| - return new LibraryInfo( |
| - '../$path', |
| - categories: info.categoriesString, |
| - implementation: info.implementation, |
| - documented: info.documented, |
| - maturity: info.maturity, |
| - platforms: info.platforms); |
| + @override |
|
ahe
2015/12/01 10:12:13
Ditto.
sigurdm
2015/12/03 14:48:10
Done.
|
| + Uri lookupLibraryUri(String libraryName) { |
| + LibraryInfo info = FLETCH_LIBRARIES[libraryName]; |
| + if (info == null) return super.lookupLibraryUri(libraryName); |
| + return patchRoot.resolve("lib/${info.path}"); |
| } |
| Uri resolvePatchUri(String dartLibraryPath) { |
| - String patchPath = lookupPatchPath(dartLibraryPath); |
| + String patchPath = fletchPatchLibraryFor(dartLibraryPath); |
| if (patchPath == null) return null; |
| - return patchRoot.resolve(patchPath); |
| + return patchRoot.resolve("lib/$patchPath"); |
| } |
| CompilationUnitElementX compilationUnitForUri(Uri uri) { |
| @@ -266,13 +245,15 @@ class FletchCompilerImplementation extends apiimpl.Compiler { |
| void reportVerboseInfo( |
|
ahe
2015/12/01 10:12:13
This should probably be moved to our reporter obje
sigurdm
2015/12/03 14:48:10
I'll wait for Johnni to move it in the dart2js fro
|
| Spannable node, |
| - String message, |
| + String messageText, |
| {bool forceVerbose: false}) { |
| // TODO(johnniwinther): Use super.reportVerboseInfo once added. |
| if (forceVerbose || verbose) { |
| MessageTemplate template = MessageTemplate.TEMPLATES[MessageKind.GENERIC]; |
| - reportDiagnostic( |
| - node, template.message({'text': message}, true), api.Diagnostic.HINT); |
| + SourceSpan span = reporter.spanFromSpannable(node); |
| + Message message = template.message({'text': messageText}); |
| + reportDiagnostic(new DiagnosticMessage(span, node, message), |
|
ahe
2015/12/01 10:12:13
Why is reportDiagnostic not called on reporter?
sigurdm
2015/12/03 14:48:10
There is not reportDiagnostic on reporter, but on
|
| + [], api.Diagnostic.HINT); |
| } |
| } |
| @@ -281,19 +262,6 @@ class FletchCompilerImplementation extends apiimpl.Compiler { |
| crashReportRequested = true; |
| print(requestBugReportOnCompilerCrashMessage); |
| } |
| - |
| - void reportError( |
| - Spannable node, |
| - MessageKind messageKind, |
| - [Map arguments = const {}]) { |
| - if (messageKind == MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND) { |
| - const String noMirrors = |
| - "Fletch doesn't support 'dart:mirrors'. See https://goo.gl/Kwrd0O"; |
| - messageKind = MessageKind.GENERIC; |
| - arguments = {'text': noMirrors}; |
| - } |
| - super.reportError(node, messageKind, arguments); |
| - } |
| } |
| /// Output provider which collects output in [output]. |
| @@ -341,3 +309,74 @@ SourceFile getSourceFile(api.CompilerInput provider, Uri uri) { |
| return null; |
| } |
| } |
| + |
| +/// A wrapper around a DiagnosticReporter, that customizes some messages to |
| +/// Fletch. |
| +class FletchDiagnosticReporter extends DiagnosticReporter { |
|
ahe
2015/12/01 10:12:13
Move to own file.
ahe
2015/12/01 10:12:13
If you used implements, you wouldn't need all thos
sigurdm
2015/12/03 14:48:10
I don't understand the argument.
I use extends to
sigurdm
2015/12/03 14:48:10
Done.
|
| + DiagnosticReporter _internalReporter; |
|
ahe
2015/12/01 10:12:13
Please don't use library privacy when you're not i
sigurdm
2015/12/03 14:48:10
Done.
|
| + |
| + FletchDiagnosticReporter(this._internalReporter); |
| + |
| + @override |
| + DiagnosticMessage createMessage(Spannable spannable, |
|
ahe
2015/12/01 10:12:13
Add newline after ( for consistency with code styl
sigurdm
2015/12/03 14:48:10
Done.
|
| + MessageKind messageKind, |
| + [Map arguments = const {}]) { |
| + return _internalReporter.createMessage(spannable, messageKind, arguments); |
| + } |
| + |
| + @override |
| + internalError(Spannable spannable, message) { |
| + return _internalReporter.internalError(spannable, message); |
| + } |
| + |
| + @override |
| + void log(message) { |
| + _internalReporter.log(message); |
| + } |
| + |
| + @override |
| + DiagnosticOptions get options => _internalReporter.options; |
| + |
| + @override |
| + void reportError(DiagnosticMessage message, |
| + [List<DiagnosticMessage> infos = const <DiagnosticMessage> []]) { |
| + if (message.message.kind == |
| + MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND) { |
| + const String noMirrors = |
| + "Fletch doesn't support 'dart:mirrors'. See https://goo.gl/Kwrd0O"; |
| + message = createMessage(message.spannable, |
| + MessageKind.GENERIC, |
| + {'text': message}); |
| + } |
| + _internalReporter.reportError(message, infos); |
| + } |
| + |
| + @override |
| + void reportHint(DiagnosticMessage message, |
| + [List<DiagnosticMessage> infos = const <DiagnosticMessage> []]) { |
| + _internalReporter.reportHint(message, infos); |
| + } |
| + |
| + @override |
| + void reportInfo(Spannable node, |
| + MessageKind errorCode, |
| + [Map arguments = const {}]) { |
| + _internalReporter.reportInfo(node, errorCode, arguments); |
| + } |
| + |
| + @override |
| + void reportWarning(DiagnosticMessage message, |
| + [List<DiagnosticMessage> infos = const <DiagnosticMessage> []]) { |
| + _internalReporter.reportWarning(message, infos); |
| + } |
| + |
| + @override |
| + SourceSpan spanFromSpannable(Spannable node) { |
| + return _internalReporter.spanFromSpannable(node); |
| + } |
| + |
| + @override |
| + withCurrentElement(Element element, f()) { |
| + return _internalReporter.withCurrentElement(element, f); |
| + } |
| +} |