Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: tests/compiler/dart2js/output_collector.dart

Issue 1235563003: Add interfaces for a new compiler API. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Rebased Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // Output provider that collects the output in string buffers. 5 // Output provider that collects the output in string buffers.
6 6
7 library output_collector; 7 library output_collector;
8 8
9 import 'dart:async'; 9 import 'dart:async';
10 import 'package:compiler/compiler_new.dart';
10 11
11 class BufferedEventSink implements EventSink<String> { 12 class BufferedEventSink implements EventSink<String> {
12 StringBuffer sb = new StringBuffer(); 13 StringBuffer sb = new StringBuffer();
13 String text; 14 String text;
14 15
15 void add(String event) { 16 void add(String event) {
16 sb.write(event); 17 sb.write(event);
17 } 18 }
18 19
19 void addError(errorEvent, [StackTrace stackTrace]) { 20 void addError(errorEvent, [StackTrace stackTrace]) {
(...skipping 22 matching lines...) Expand all
42 sink.addError(errorEvent, stackTrace); 43 sink.addError(errorEvent, stackTrace);
43 }); 44 });
44 } 45 }
45 46
46 @override 47 @override
47 void close() { 48 void close() {
48 sinks.forEach((EventSink<String> sink) => sink.close()); 49 sinks.forEach((EventSink<String> sink) => sink.close());
49 } 50 }
50 } 51 }
51 52
52 class OutputCollector { 53 class OutputCollector implements CompilerOutput {
53 Map<String, Map<String, BufferedEventSink>> outputMap = {}; 54 Map<String, Map<String, BufferedEventSink>> outputMap = {};
54 55
55 EventSink<String> call(String name, String extension) { 56 EventSink<String> call(String name, String extension) {
56 Map<String, BufferedEventSink> sinkMap = 57 return createEventSink(name, extension);
57 outputMap.putIfAbsent(extension, () => {});
58 return sinkMap.putIfAbsent(name, () => new BufferedEventSink());
59 } 58 }
60 59
61 String getOutput(String name, String extension) { 60 String getOutput(String name, String extension) {
62 Map<String, BufferedEventSink> sinkMap = outputMap[extension]; 61 Map<String, BufferedEventSink> sinkMap = outputMap[extension];
63 if (sinkMap == null) return null; 62 if (sinkMap == null) return null;
64 BufferedEventSink sink = sinkMap[name]; 63 BufferedEventSink sink = sinkMap[name];
65 return sink != null ? sink.text : null; 64 return sink != null ? sink.text : null;
66 } 65 }
66
67 /// `true` if any output has been collected.
68 bool get hasOutput => !outputMap.isEmpty;
69
70 /// `true` if any output other than main output has been collected.
71 bool get hasExtraOutput {
72 for (String extension in outputMap.keys) {
73 for (String name in outputMap[extension].keys) {
74 if (name != '') return true;
75 }
76 }
77 return false;
78 }
79
80 @override
81 EventSink<String> createEventSink(String name, String extension) {
82 Map<String, BufferedEventSink> sinkMap =
83 outputMap.putIfAbsent(extension, () => {});
84 return sinkMap.putIfAbsent(name, () => new BufferedEventSink());
85 }
67 } 86 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/mock_compiler.dart ('k') | tests/compiler/dart2js/sourcemaps/sourcemap_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698