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

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

Issue 1235563003: Add interfaces for a new compiler API. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library dart2js.test.memory_compiler; 5 library dart2js.test.memory_compiler;
6 6
7 import 'memory_source_file_helper.dart'; 7 import 'memory_source_file_helper.dart';
8 8
9 import 'package:compiler/src/compile_time_constants.dart';
10 9
11 import 'package:compiler/src/dart2jslib.dart' 10 import 'package:compiler/src/null_compiler_output.dart'
12 show NullSink; 11 show NullCompilerOutput;
13 12
14 import 'package:compiler/compiler.dart' show 13 import 'package:compiler/compiler.dart' show
15 CompilerOutputProvider, 14 DiagnosticHandler;
15
16 import 'package:compiler/compiler_new.dart' show
17 CompilerDiagnostics,
18 CompilerOutput,
16 Diagnostic, 19 Diagnostic,
17 DiagnosticHandler,
18 PackagesDiscoveryProvider; 20 PackagesDiscoveryProvider;
19 21
20 import 'dart:async'; 22 import 'dart:async';
21 23
22 import 'package:compiler/src/mirrors/source_mirrors.dart'; 24 import 'package:compiler/src/mirrors/source_mirrors.dart';
23 import 'package:compiler/src/mirrors/analyze.dart'; 25 import 'package:compiler/src/mirrors/analyze.dart';
24 26
25 import 'package:compiler/src/library_loader.dart' 27 import 'package:compiler/src/library_loader.dart'
26 show LoadedLibraries; 28 show LoadedLibraries;
27 29
30 import 'package:compiler/src/old_to_new_api.dart';
31
28 export 'output_collector.dart'; 32 export 'output_collector.dart';
29 33
30 class DiagnosticMessage { 34 class DiagnosticMessage {
31 final Uri uri; 35 final Uri uri;
32 final int begin; 36 final int begin;
33 final int end; 37 final int end;
34 final String message; 38 final String message;
35 final Diagnostic kind; 39 final Diagnostic kind;
36 40
37 DiagnosticMessage(this.uri, this.begin, this.end, this.message, this.kind); 41 DiagnosticMessage(this.uri, this.begin, this.end, this.message, this.kind);
38 42
39 String toString() => '$uri:$begin:$end:$message:$kind'; 43 String toString() => '$uri:$begin:$end:$message:$kind';
40 } 44 }
41 45
42 class DiagnosticCollector { 46 class DiagnosticCollector implements CompilerDiagnostics {
43 List<DiagnosticMessage> messages = <DiagnosticMessage>[]; 47 List<DiagnosticMessage> messages = <DiagnosticMessage>[];
44 48
45 void call(Uri uri, int begin, int end, String message, 49 void call(Uri uri, int begin, int end, String message, Diagnostic kind) {
46 Diagnostic kind) { 50 reportDiagnostic(uri, begin, end, message, kind);
51 }
52
53 @override
54 void reportDiagnostic(Uri uri, int begin, int end, String message,
55 Diagnostic kind) {
47 messages.add(new DiagnosticMessage(uri, begin, end, message, kind)); 56 messages.add(new DiagnosticMessage(uri, begin, end, message, kind));
48 } 57 }
49 58
50 Iterable<DiagnosticMessage> filterMessagesByKind(Diagnostic kind) { 59 Iterable<DiagnosticMessage> filterMessagesByKind(Diagnostic kind) {
51 return messages.where( 60 return messages.where(
52 (DiagnosticMessage message) => message.kind == kind); 61 (DiagnosticMessage message) => message.kind == kind);
53 } 62 }
54 63
55 Iterable<DiagnosticMessage> get errors { 64 Iterable<DiagnosticMessage> get errors {
56 return filterMessagesByKind(Diagnostic.ERROR); 65 return filterMessagesByKind(Diagnostic.ERROR);
57 } 66 }
58 67
59 Iterable<DiagnosticMessage> get warnings { 68 Iterable<DiagnosticMessage> get warnings {
60 return filterMessagesByKind(Diagnostic.WARNING); 69 return filterMessagesByKind(Diagnostic.WARNING);
61 } 70 }
62 71
63 Iterable<DiagnosticMessage> get hints { 72 Iterable<DiagnosticMessage> get hints {
64 return filterMessagesByKind(Diagnostic.HINT); 73 return filterMessagesByKind(Diagnostic.HINT);
65 } 74 }
66 75
67 Iterable<DiagnosticMessage> get infos { 76 Iterable<DiagnosticMessage> get infos {
68 return filterMessagesByKind(Diagnostic.INFO); 77 return filterMessagesByKind(Diagnostic.INFO);
69 } 78 }
79
80 /// `true` if non-verbose messages has been collected.
81 bool get hasRegularMessages {
82 return messages.any((m) => m.kind != Diagnostic.VERBOSE_INFO);
83 }
70 } 84 }
71 85
72 DiagnosticHandler createDiagnosticHandler(DiagnosticHandler diagnosticHandler, 86 class MultiDiagnostics implements CompilerDiagnostics {
73 SourceFileProvider provider, 87 final List<CompilerDiagnostics> diagnosticsList;
74 bool showDiagnostics) { 88
75 var handler = diagnosticHandler; 89 const MultiDiagnostics([this.diagnosticsList = const []]);
90
91 @override
92 void reportDiagnostic(Uri uri, int begin, int end,
93 String message, Diagnostic kind) {
94 for (CompilerDiagnostics diagnostics in diagnosticsList) {
95 diagnostics.reportDiagnostic(uri, begin, end, message, kind);
96 }
97 }
98 }
99
100 CompilerDiagnostics createCompilerDiagnostics(
101 CompilerDiagnostics diagnostics,
102 SourceFileProvider provider,
103 bool showDiagnostics) {
104 CompilerDiagnostics handler = diagnostics;
76 if (showDiagnostics) { 105 if (showDiagnostics) {
77 if (diagnosticHandler == null) { 106 if (diagnostics == null) {
78 handler = new FormattingDiagnosticHandler(provider); 107 handler = new FormattingDiagnosticHandler(provider);
79 } else { 108 } else {
80 var formattingHandler = new FormattingDiagnosticHandler(provider); 109 var formattingHandler = new FormattingDiagnosticHandler(provider);
81 handler = (Uri uri, int begin, int end, String message, Diagnostic kind) { 110 handler = new MultiDiagnostics([diagnostics, formattingHandler]);
82 diagnosticHandler(uri, begin, end, message, kind);
83 formattingHandler(uri, begin, end, message, kind);
84 };
85 } 111 }
86 } else if (diagnosticHandler == null) { 112 } else if (diagnostics == null) {
87 handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {}; 113 handler = new MultiDiagnostics();
88 } 114 }
89 return handler; 115 return handler;
90 } 116 }
91 117
92 Expando<MemorySourceFileProvider> expando = 118 Expando<MemorySourceFileProvider> expando =
93 new Expando<MemorySourceFileProvider>(); 119 new Expando<MemorySourceFileProvider>();
94 120
95 Compiler compilerFor( 121 Compiler compilerFor(
96 Map<String, String> memorySourceFiles, 122 Map<String, String> memorySourceFiles,
97 {DiagnosticHandler diagnosticHandler, 123 {CompilerDiagnostics diagnosticHandler,
98 CompilerOutputProvider outputProvider, 124 CompilerOutput outputProvider,
99 List<String> options: const [], 125 List<String> options: const [],
100 Compiler cachedCompiler, 126 Compiler cachedCompiler,
101 bool showDiagnostics: true, 127 bool showDiagnostics: true,
102 Uri packageRoot, 128 Uri packageRoot,
103 Uri packageConfig, 129 Uri packageConfig,
104 PackagesDiscoveryProvider packagesDiscoveryProvider}) { 130 PackagesDiscoveryProvider packagesDiscoveryProvider}) {
105 Uri libraryRoot = Uri.base.resolve('sdk/'); 131 Uri libraryRoot = Uri.base.resolve('sdk/');
106 if (packageRoot == null && 132 if (packageRoot == null &&
107 packageConfig == null && 133 packageConfig == null &&
108 packagesDiscoveryProvider == null) { 134 packagesDiscoveryProvider == null) {
109 packageRoot = Uri.base.resolveUri(new Uri.file('${Platform.packageRoot}/')); 135 packageRoot = Uri.base.resolveUri(new Uri.file('${Platform.packageRoot}/'));
110 } 136 }
111 137
112 MemorySourceFileProvider provider; 138 MemorySourceFileProvider provider;
113 var readStringFromUri;
114 if (cachedCompiler == null) { 139 if (cachedCompiler == null) {
115 provider = new MemorySourceFileProvider(memorySourceFiles); 140 provider = new MemorySourceFileProvider(memorySourceFiles);
116 readStringFromUri = provider.readStringFromUri;
117 // Saving the provider in case we need it later for a cached compiler. 141 // Saving the provider in case we need it later for a cached compiler.
118 expando[readStringFromUri] = provider; 142 expando[provider] = provider;
119 } else { 143 } else {
120 // When using a cached compiler, it has read a number of files from disk 144 // When using a cached compiler, it has read a number of files from disk
121 // already (and will not attempt to read them again due to caching). These 145 // already (and will not attempt to read them again due to caching). These
122 // files must be available to the new diagnostic handler. 146 // files must be available to the new diagnostic handler.
123 provider = expando[cachedCompiler.provider]; 147 provider = expando[cachedCompiler.provider];
124 readStringFromUri = cachedCompiler.provider;
125 provider.memorySourceFiles = memorySourceFiles; 148 provider.memorySourceFiles = memorySourceFiles;
126 } 149 }
127 var handler = 150 diagnosticHandler =
128 createDiagnosticHandler(diagnosticHandler, provider, showDiagnostics); 151 createCompilerDiagnostics(diagnosticHandler, provider, showDiagnostics);
129 152
130 EventSink<String> noOutputProvider(String name, String extension) {
131 if (name != '') throw 'Attempt to output file "$name.$extension"';
132 return new NullSink('$name.$extension');
133 }
134 if (outputProvider == null) { 153 if (outputProvider == null) {
135 outputProvider = noOutputProvider; 154 outputProvider = const NullCompilerOutput();
136 } 155 }
137 156
138 Compiler compiler = new Compiler( 157 Compiler compiler = new Compiler(
139 readStringFromUri, 158 provider,
140 outputProvider, 159 outputProvider,
141 handler, 160 diagnosticHandler,
142 libraryRoot, 161 libraryRoot,
143 packageRoot, 162 packageRoot,
144 options, 163 options,
145 {}, 164 {},
146 packageConfig, 165 packageConfig,
147 packagesDiscoveryProvider); 166 packagesDiscoveryProvider);
148 167
149 if (cachedCompiler != null) { 168 if (cachedCompiler != null) {
150 compiler.coreLibrary = 169 compiler.coreLibrary =
151 cachedCompiler.libraryLoader.lookupLibrary(Uri.parse('dart:core')); 170 cachedCompiler.libraryLoader.lookupLibrary(Uri.parse('dart:core'));
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 @override 248 @override
230 void forEachLibrary(f) {} 249 void forEachLibrary(f) {}
231 250
232 @override 251 @override
233 getLibrary(Uri uri) => copiedLibraries[uri]; 252 getLibrary(Uri uri) => copiedLibraries[uri];
234 253
235 @override 254 @override
236 Uri get rootUri => null; 255 Uri get rootUri => null;
237 } 256 }
238 257
258
259 DiagnosticHandler createDiagnosticHandler(DiagnosticHandler diagnosticHandler,
260 SourceFileProvider provider,
261 bool showDiagnostics) {
262 var handler = diagnosticHandler;
263 if (showDiagnostics) {
264 if (diagnosticHandler == null) {
265 handler = new FormattingDiagnosticHandler(provider);
266 } else {
267 var formattingHandler = new FormattingDiagnosticHandler(provider);
268 handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {
269 diagnosticHandler(uri, begin, end, message, kind);
270 formattingHandler(uri, begin, end, message, kind);
271 };
272 }
273 } else if (diagnosticHandler == null) {
274 handler = (Uri uri, int begin, int end, String message, Diagnostic kind) {};
275 }
276 return handler;
277 }
278
239 Future<MirrorSystem> mirrorSystemFor(Map<String,String> memorySourceFiles, 279 Future<MirrorSystem> mirrorSystemFor(Map<String,String> memorySourceFiles,
240 {DiagnosticHandler diagnosticHandler, 280 {DiagnosticHandler diagnosticHandler,
241 List<String> options: const [], 281 List<String> options: const [],
242 bool showDiagnostics: true}) { 282 bool showDiagnostics: true}) {
243 Uri libraryRoot = Uri.base.resolve('sdk/'); 283 Uri libraryRoot = Uri.base.resolve('sdk/');
244 Uri packageRoot = Uri.base.resolveUri( 284 Uri packageRoot = Uri.base.resolveUri(
245 new Uri.file('${Platform.packageRoot}/')); 285 new Uri.file('${Platform.packageRoot}/'));
246 286
247 var provider = new MemorySourceFileProvider(memorySourceFiles); 287 var provider = new MemorySourceFileProvider(memorySourceFiles);
248 var handler = 288 var handler =
249 createDiagnosticHandler(diagnosticHandler, provider, showDiagnostics); 289 createDiagnosticHandler(diagnosticHandler, provider, showDiagnostics);
250 290
251 List<Uri> libraries = <Uri>[]; 291 List<Uri> libraries = <Uri>[];
252 memorySourceFiles.forEach((String path, _) { 292 memorySourceFiles.forEach((String path, _) {
253 libraries.add(new Uri(scheme: 'memory', path: path)); 293 libraries.add(new Uri(scheme: 'memory', path: path));
254 }); 294 });
255 295
256 return analyze(libraries, libraryRoot, packageRoot, 296 return analyze(libraries, libraryRoot, packageRoot,
257 provider, handler, options); 297 provider, handler, options);
258 } 298 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698