OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 mock_compiler; | 5 library mock_compiler; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection'; | 8 import 'dart:collection'; |
9 | 9 |
10 import 'package:compiler/compiler.dart' as api; | 10 import 'package:compiler/compiler.dart' as api; |
11 import 'package:compiler/src/common/names.dart' show | 11 import 'package:compiler/src/common/names.dart' show Uris; |
12 Uris; | |
13 import 'package:compiler/src/constants/expressions.dart'; | 12 import 'package:compiler/src/constants/expressions.dart'; |
14 import 'package:compiler/src/dart_types.dart' show DartType; | 13 import 'package:compiler/src/dart_types.dart' show DartType; |
15 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; | 14 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; |
16 import 'package:compiler/src/diagnostics/source_span.dart'; | 15 import 'package:compiler/src/diagnostics/source_span.dart'; |
17 import 'package:compiler/src/diagnostics/spannable.dart'; | 16 import 'package:compiler/src/diagnostics/spannable.dart'; |
18 import 'package:compiler/src/elements/elements.dart'; | 17 import 'package:compiler/src/elements/elements.dart'; |
19 import 'package:compiler/src/elements/visitor.dart'; | 18 import 'package:compiler/src/elements/visitor.dart'; |
20 import 'package:compiler/src/js_backend/backend_helpers.dart' show | 19 import 'package:compiler/src/js_backend/backend_helpers.dart' |
21 BackendHelpers; | 20 show BackendHelpers; |
22 import 'package:compiler/src/js_backend/lookup_map_analysis.dart' show | 21 import 'package:compiler/src/js_backend/lookup_map_analysis.dart' |
23 LookupMapAnalysis; | 22 show LookupMapAnalysis; |
24 import 'package:compiler/src/io/source_file.dart'; | 23 import 'package:compiler/src/io/source_file.dart'; |
25 import 'package:compiler/src/options.dart' show | 24 import 'package:compiler/src/options.dart' show CompilerOptions; |
26 CompilerOptions; | |
27 import 'package:compiler/src/resolution/members.dart'; | 25 import 'package:compiler/src/resolution/members.dart'; |
28 import 'package:compiler/src/resolution/registry.dart'; | 26 import 'package:compiler/src/resolution/registry.dart'; |
29 import 'package:compiler/src/resolution/scope.dart'; | 27 import 'package:compiler/src/resolution/scope.dart'; |
30 import 'package:compiler/src/resolution/tree_elements.dart'; | 28 import 'package:compiler/src/resolution/tree_elements.dart'; |
31 import 'package:compiler/src/resolved_uri_translator.dart'; | 29 import 'package:compiler/src/resolved_uri_translator.dart'; |
32 import 'package:compiler/src/script.dart'; | 30 import 'package:compiler/src/script.dart'; |
33 import 'package:compiler/src/tree/tree.dart'; | 31 import 'package:compiler/src/tree/tree.dart'; |
34 import 'package:compiler/src/old_to_new_api.dart'; | 32 import 'package:compiler/src/old_to_new_api.dart'; |
35 import 'parser_helper.dart'; | 33 import 'parser_helper.dart'; |
36 | 34 |
37 import 'package:compiler/src/elements/modelx.dart' show | 35 import 'package:compiler/src/elements/modelx.dart' |
38 ElementX, | 36 show ElementX, LibraryElementX, ErroneousElementX, FunctionElementX; |
39 LibraryElementX, | |
40 ErroneousElementX, | |
41 FunctionElementX; | |
42 | 37 |
43 import 'package:compiler/src/compiler.dart'; | 38 import 'package:compiler/src/compiler.dart'; |
44 import 'package:compiler/src/common/tasks.dart' show Measurer; | 39 import 'package:compiler/src/common/tasks.dart' show Measurer; |
45 | 40 |
46 import 'package:compiler/src/deferred_load.dart' show | 41 import 'package:compiler/src/deferred_load.dart' |
47 DeferredLoadTask, | 42 show DeferredLoadTask, OutputUnit; |
48 OutputUnit; | |
49 | 43 |
50 import 'mock_libraries.dart'; | 44 import 'mock_libraries.dart'; |
51 import 'diagnostic_helper.dart'; | 45 import 'diagnostic_helper.dart'; |
52 | 46 |
53 export 'diagnostic_helper.dart'; | 47 export 'diagnostic_helper.dart'; |
54 | 48 |
55 final Uri PATCH_CORE = new Uri(scheme: 'patch', path: 'core'); | 49 final Uri PATCH_CORE = new Uri(scheme: 'patch', path: 'core'); |
56 | 50 |
57 typedef String LibrarySourceProvider(Uri uri); | 51 typedef String LibrarySourceProvider(Uri uri); |
58 | 52 |
59 class MockCompiler extends Compiler { | 53 class MockCompiler extends Compiler { |
60 api.DiagnosticHandler diagnosticHandler; | 54 api.DiagnosticHandler diagnosticHandler; |
| 55 |
61 /// Expected number of warnings. If `null`, the number of warnings is | 56 /// Expected number of warnings. If `null`, the number of warnings is |
62 /// not checked. | 57 /// not checked. |
63 final int expectedWarnings; | 58 final int expectedWarnings; |
| 59 |
64 /// Expected number of errors. If `null`, the number of errors is not checked. | 60 /// Expected number of errors. If `null`, the number of errors is not checked. |
65 final int expectedErrors; | 61 final int expectedErrors; |
66 final Map<String, SourceFile> sourceFiles; | 62 final Map<String, SourceFile> sourceFiles; |
67 Node parsedTree; | 63 Node parsedTree; |
68 final String testedPatchVersion; | 64 final String testedPatchVersion; |
69 final LibrarySourceProvider librariesOverride; | 65 final LibrarySourceProvider librariesOverride; |
70 final DiagnosticCollector diagnosticCollector = new DiagnosticCollector(); | 66 final DiagnosticCollector diagnosticCollector = new DiagnosticCollector(); |
71 final ResolvedUriTranslator resolvedUriTranslator = | 67 final ResolvedUriTranslator resolvedUriTranslator = |
72 new MockResolvedUriTranslator(); | 68 new MockResolvedUriTranslator(); |
73 final Measurer measurer = new Measurer(); | 69 final Measurer measurer = new Measurer(); |
74 | 70 |
75 MockCompiler.internal( | 71 MockCompiler.internal( |
76 {Map<String, String> coreSource, | 72 {Map<String, String> coreSource, |
77 bool enableTypeAssertions: false, | 73 bool enableTypeAssertions: false, |
78 bool enableUserAssertions: false, | 74 bool enableUserAssertions: false, |
79 bool enableMinification: false, | 75 bool enableMinification: false, |
80 bool disableTypeInference: false, | 76 bool disableTypeInference: false, |
81 bool analyzeAll: false, | 77 bool analyzeAll: false, |
82 bool analyzeOnly: false, | 78 bool analyzeOnly: false, |
83 bool preserveComments: false, | 79 bool preserveComments: false, |
84 // Our unit tests check code generation output that is | 80 // Our unit tests check code generation output that is |
85 // affected by inlining support. | 81 // affected by inlining support. |
86 bool disableInlining: true, | 82 bool disableInlining: true, |
87 bool trustTypeAnnotations: false, | 83 bool trustTypeAnnotations: false, |
88 bool trustJSInteropTypeAnnotations: false, | 84 bool trustJSInteropTypeAnnotations: false, |
89 bool enableAsyncAwait: false, | 85 bool enableAsyncAwait: false, |
90 int this.expectedWarnings, | 86 int this.expectedWarnings, |
91 int this.expectedErrors, | 87 int this.expectedErrors, |
92 api.CompilerOutputProvider outputProvider, | 88 api.CompilerOutputProvider outputProvider, |
93 String patchVersion, | 89 String patchVersion, |
94 LibrarySourceProvider this.librariesOverride}) | 90 LibrarySourceProvider this.librariesOverride}) |
95 : sourceFiles = new Map<String, SourceFile>(), | 91 : sourceFiles = new Map<String, SourceFile>(), |
96 testedPatchVersion = patchVersion, | 92 testedPatchVersion = patchVersion, |
97 super(options: new CompilerOptions( | 93 super( |
98 entryPoint: new Uri(scheme: 'mock'), | 94 options: new CompilerOptions( |
99 libraryRoot: Uri.parse('placeholder_library_root_for_mock/'), | 95 entryPoint: new Uri(scheme: 'mock'), |
100 enableTypeAssertions: enableTypeAssertions, | 96 libraryRoot: Uri.parse('placeholder_library_root_for_mock/'), |
101 enableUserAssertions: enableUserAssertions, | 97 enableTypeAssertions: enableTypeAssertions, |
102 disableInlining: disableInlining, | 98 enableUserAssertions: enableUserAssertions, |
103 enableAssertMessage: true, | 99 disableInlining: disableInlining, |
104 enableMinification: enableMinification, | 100 enableAssertMessage: true, |
105 disableTypeInference: disableTypeInference, | 101 enableMinification: enableMinification, |
106 analyzeAll: analyzeAll, | 102 disableTypeInference: disableTypeInference, |
107 analyzeOnly: analyzeOnly, | 103 analyzeAll: analyzeAll, |
108 preserveComments: preserveComments, | 104 analyzeOnly: analyzeOnly, |
109 trustTypeAnnotations: trustTypeAnnotations, | 105 preserveComments: preserveComments, |
110 trustJSInteropTypeAnnotations: trustJSInteropTypeAnnotations, | 106 trustTypeAnnotations: trustTypeAnnotations, |
111 shownPackageWarnings: const []), | 107 trustJSInteropTypeAnnotations: trustJSInteropTypeAnnotations, |
112 outputProvider: new LegacyCompilerOutput(outputProvider)) { | 108 shownPackageWarnings: const []), |
113 | 109 outputProvider: new LegacyCompilerOutput(outputProvider)) { |
114 deferredLoadTask = new MockDeferredLoadTask(this); | 110 deferredLoadTask = new MockDeferredLoadTask(this); |
115 | 111 |
116 registerSource(Uris.dart_core, | 112 registerSource( |
117 buildLibrarySource(DEFAULT_CORE_LIBRARY, coreSource)); | 113 Uris.dart_core, buildLibrarySource(DEFAULT_CORE_LIBRARY, coreSource)); |
118 registerSource(PATCH_CORE, DEFAULT_PATCH_CORE_SOURCE); | 114 registerSource(PATCH_CORE, DEFAULT_PATCH_CORE_SOURCE); |
119 | 115 |
120 registerSource(BackendHelpers.DART_JS_HELPER, | 116 registerSource(BackendHelpers.DART_JS_HELPER, |
121 buildLibrarySource(DEFAULT_JS_HELPER_LIBRARY)); | 117 buildLibrarySource(DEFAULT_JS_HELPER_LIBRARY)); |
122 registerSource(BackendHelpers.DART_FOREIGN_HELPER, | 118 registerSource(BackendHelpers.DART_FOREIGN_HELPER, |
123 buildLibrarySource(DEFAULT_FOREIGN_HELPER_LIBRARY)); | 119 buildLibrarySource(DEFAULT_FOREIGN_HELPER_LIBRARY)); |
124 registerSource(BackendHelpers.DART_INTERCEPTORS, | 120 registerSource(BackendHelpers.DART_INTERCEPTORS, |
125 buildLibrarySource(DEFAULT_INTERCEPTORS_LIBRARY)); | 121 buildLibrarySource(DEFAULT_INTERCEPTORS_LIBRARY)); |
126 registerSource(BackendHelpers.DART_ISOLATE_HELPER, | 122 registerSource(BackendHelpers.DART_ISOLATE_HELPER, |
127 buildLibrarySource(DEFAULT_ISOLATE_HELPER_LIBRARY)); | 123 buildLibrarySource(DEFAULT_ISOLATE_HELPER_LIBRARY)); |
128 registerSource(Uris.dart_mirrors, DEFAULT_MIRRORS_SOURCE); | 124 registerSource(Uris.dart_mirrors, DEFAULT_MIRRORS_SOURCE); |
129 registerSource(BackendHelpers.DART_JS_MIRRORS, | 125 registerSource(BackendHelpers.DART_JS_MIRRORS, DEFAULT_JS_MIRRORS_SOURCE); |
130 DEFAULT_JS_MIRRORS_SOURCE); | |
131 | 126 |
132 Map<String, String> asyncLibrarySource = <String, String>{}; | 127 Map<String, String> asyncLibrarySource = <String, String>{}; |
133 asyncLibrarySource.addAll(DEFAULT_ASYNC_LIBRARY); | 128 asyncLibrarySource.addAll(DEFAULT_ASYNC_LIBRARY); |
134 if (enableAsyncAwait) { | 129 if (enableAsyncAwait) { |
135 asyncLibrarySource.addAll(ASYNC_AWAIT_LIBRARY); | 130 asyncLibrarySource.addAll(ASYNC_AWAIT_LIBRARY); |
136 } | 131 } |
137 registerSource(Uris.dart_async, | 132 registerSource(Uris.dart_async, buildLibrarySource(asyncLibrarySource)); |
138 buildLibrarySource(asyncLibrarySource)); | |
139 registerSource(LookupMapAnalysis.PACKAGE_LOOKUP_MAP, | 133 registerSource(LookupMapAnalysis.PACKAGE_LOOKUP_MAP, |
140 buildLibrarySource(DEFAULT_LOOKUP_MAP_LIBRARY)); | 134 buildLibrarySource(DEFAULT_LOOKUP_MAP_LIBRARY)); |
141 } | 135 } |
142 | 136 |
143 String get patchVersion { | 137 String get patchVersion { |
144 return testedPatchVersion != null ? testedPatchVersion : super.patchVersion; | 138 return testedPatchVersion != null ? testedPatchVersion : super.patchVersion; |
145 } | 139 } |
146 | 140 |
147 /// Initialize the mock compiler with an empty main library. | 141 /// Initialize the mock compiler with an empty main library. |
148 Future<Uri> init([String mainSource = ""]) { | 142 Future<Uri> init([String mainSource = ""]) { |
149 Uri uri = new Uri(scheme: "mock"); | 143 Uri uri = new Uri(scheme: "mock"); |
150 registerSource(uri, mainSource); | 144 registerSource(uri, mainSource); |
151 return libraryLoader.loadLibrary(uri) | 145 return libraryLoader.loadLibrary(uri).then((LibraryElement library) { |
152 .then((LibraryElement library) { | |
153 mainApp = library; | 146 mainApp = library; |
154 // We need to make sure the Object class is resolved. When registering a | 147 // We need to make sure the Object class is resolved. When registering a |
155 // dynamic invocation the ArgumentTypesRegistry eventually iterates over | 148 // dynamic invocation the ArgumentTypesRegistry eventually iterates over |
156 // the interfaces of the Object class which would be 'null' if the class | 149 // the interfaces of the Object class which would be 'null' if the class |
157 // wasn't resolved. | 150 // wasn't resolved. |
158 coreClasses.objectClass.ensureResolved(resolution); | 151 coreClasses.objectClass.ensureResolved(resolution); |
159 }).then((_) => uri); | 152 }).then((_) => uri); |
160 } | 153 } |
161 | 154 |
162 Future run(Uri uri, [String mainSource = ""]) { | 155 Future run(Uri uri, [String mainSource = ""]) { |
163 return init(mainSource).then((Uri mainUri) { | 156 return init(mainSource).then((Uri mainUri) { |
164 return super.run(uri == null ? mainUri : uri); | 157 return super.run(uri == null ? mainUri : uri); |
165 }).then((result) { | 158 }).then((result) { |
166 if (expectedErrors != null && | 159 if (expectedErrors != null && |
167 expectedErrors != diagnosticCollector.errors.length) { | 160 expectedErrors != diagnosticCollector.errors.length) { |
168 throw "unexpected error during compilation " | 161 throw "unexpected error during compilation " |
169 "${diagnosticCollector.errors}"; | 162 "${diagnosticCollector.errors}"; |
170 } else if (expectedWarnings != null && | 163 } else if (expectedWarnings != null && |
171 expectedWarnings != diagnosticCollector.warnings.length) { | 164 expectedWarnings != diagnosticCollector.warnings.length) { |
172 throw "unexpected warnings during compilation " | 165 throw "unexpected warnings during compilation " |
173 "${diagnosticCollector.warnings}"; | 166 "${diagnosticCollector.warnings}"; |
174 } else { | 167 } else { |
175 return result; | 168 return result; |
176 } | 169 } |
177 }); | 170 }); |
178 } | 171 } |
179 | 172 |
180 /** | 173 /** |
181 * Registers the [source] with [uri] making it possible load [source] as a | 174 * Registers the [source] with [uri] making it possible load [source] as a |
182 * library. If an override has been provided in [librariesOverride], that | 175 * library. If an override has been provided in [librariesOverride], that |
183 * is used instead. | 176 * is used instead. |
184 */ | 177 */ |
185 void registerSource(Uri uri, String source) { | 178 void registerSource(Uri uri, String source) { |
186 if (librariesOverride != null) { | 179 if (librariesOverride != null) { |
187 String override = librariesOverride(uri); | 180 String override = librariesOverride(uri); |
188 if (override != null) { | 181 if (override != null) { |
189 source = override; | 182 source = override; |
190 } | 183 } |
191 } | 184 } |
192 sourceFiles[uri.toString()] = new MockFile(source); | 185 sourceFiles[uri.toString()] = new MockFile(source); |
193 } | 186 } |
194 | 187 |
195 void reportDiagnostic(DiagnosticMessage message, | 188 void reportDiagnostic(DiagnosticMessage message, |
196 List<DiagnosticMessage> infoMessages, | 189 List<DiagnosticMessage> infoMessages, api.Diagnostic kind) { |
197 api.Diagnostic kind) { | |
198 | |
199 void processMessage(DiagnosticMessage message, api.Diagnostic kind) { | 190 void processMessage(DiagnosticMessage message, api.Diagnostic kind) { |
200 SourceSpan span = message.sourceSpan; | 191 SourceSpan span = message.sourceSpan; |
201 Uri uri; | 192 Uri uri; |
202 int begin; | 193 int begin; |
203 int end; | 194 int end; |
204 String text = '${message.message}'; | 195 String text = '${message.message}'; |
205 if (span != null) { | 196 if (span != null) { |
206 uri = span.uri; | 197 uri = span.uri; |
207 begin = span.begin; | 198 begin = span.begin; |
208 end = span.end; | 199 end = span.end; |
209 } | 200 } |
210 diagnosticCollector.report(message.message, uri, begin, end, text, kind); | 201 diagnosticCollector.report(message.message, uri, begin, end, text, kind); |
211 if (diagnosticHandler != null) { | 202 if (diagnosticHandler != null) { |
212 diagnosticHandler(uri, begin, end, text, kind); | 203 diagnosticHandler(uri, begin, end, text, kind); |
213 } | 204 } |
214 } | 205 } |
215 | 206 |
216 processMessage(message, kind); | 207 processMessage(message, kind); |
217 infoMessages.forEach((i) => processMessage(i, api.Diagnostic.INFO)); | 208 infoMessages.forEach((i) => processMessage(i, api.Diagnostic.INFO)); |
218 } | 209 } |
219 | 210 |
220 CollectingTreeElements resolveStatement(String text) { | 211 CollectingTreeElements resolveStatement(String text) { |
221 parsedTree = parseStatement(text); | 212 parsedTree = parseStatement(text); |
222 return resolveNodeStatement(parsedTree, new MockElement(mainApp)); | 213 return resolveNodeStatement(parsedTree, new MockElement(mainApp)); |
223 } | 214 } |
224 | 215 |
225 TreeElementMapping resolveNodeStatement(Node tree, | 216 TreeElementMapping resolveNodeStatement( |
226 ExecutableElement element) { | 217 Node tree, ExecutableElement element) { |
227 ResolverVisitor visitor = | 218 ResolverVisitor visitor = new ResolverVisitor( |
228 new ResolverVisitor( | 219 this.resolution, |
229 this.resolution, | 220 element, |
230 element, | 221 new ResolutionRegistry( |
231 new ResolutionRegistry(this.backend, | 222 this.backend, new CollectingTreeElements(element)), |
232 new CollectingTreeElements(element)), | 223 scope: |
233 scope: new MockTypeVariablesScope( | 224 new MockTypeVariablesScope(element.enclosingElement.buildScope())); |
234 element.enclosingElement.buildScope())); | |
235 if (visitor.scope is LibraryScope || | 225 if (visitor.scope is LibraryScope || |
236 visitor.scope is MockTypeVariablesScope) { | 226 visitor.scope is MockTypeVariablesScope) { |
237 visitor.scope = new MethodScope(visitor.scope, element); | 227 visitor.scope = new MethodScope(visitor.scope, element); |
238 } | 228 } |
239 visitor.visit(tree); | 229 visitor.visit(tree); |
240 visitor.scope = new LibraryScope(element.library); | 230 visitor.scope = new LibraryScope(element.library); |
241 return visitor.registry.mapping; | 231 return visitor.registry.mapping; |
242 } | 232 } |
243 | 233 |
244 resolverVisitor() { | 234 resolverVisitor() { |
245 Element mockElement = new MockElement(mainApp.entryCompilationUnit); | 235 Element mockElement = new MockElement(mainApp.entryCompilationUnit); |
246 ResolverVisitor visitor = | 236 ResolverVisitor visitor = new ResolverVisitor( |
247 new ResolverVisitor( | 237 this.resolution, |
248 this.resolution, | 238 mockElement, |
249 mockElement, | 239 new ResolutionRegistry( |
250 new ResolutionRegistry( | 240 this.backend, new CollectingTreeElements(mockElement)), |
251 this.backend, new CollectingTreeElements(mockElement)), | 241 scope: mockElement.enclosingElement.buildScope()); |
252 scope: mockElement.enclosingElement.buildScope()); | |
253 visitor.scope = new MethodScope(visitor.scope, mockElement); | 242 visitor.scope = new MethodScope(visitor.scope, mockElement); |
254 return visitor; | 243 return visitor; |
255 } | 244 } |
256 | 245 |
257 parseScript(String text, [LibraryElement library]) { | 246 parseScript(String text, [LibraryElement library]) { |
258 if (library == null) library = mainApp; | 247 if (library == null) library = mainApp; |
259 parseUnit(text, this, library, registerSource); | 248 parseUnit(text, this, library, registerSource); |
260 } | 249 } |
261 | 250 |
262 Future scanBuiltinLibraries() { | 251 Future scanBuiltinLibraries() { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 // The mock compiler does not split the program in output units. | 329 // The mock compiler does not split the program in output units. |
341 class MockDeferredLoadTask extends DeferredLoadTask { | 330 class MockDeferredLoadTask extends DeferredLoadTask { |
342 MockDeferredLoadTask(Compiler compiler) : super(compiler); | 331 MockDeferredLoadTask(Compiler compiler) : super(compiler); |
343 | 332 |
344 OutputUnit getElementOutputUnit(dynamic dependency) { | 333 OutputUnit getElementOutputUnit(dynamic dependency) { |
345 return mainOutputUnit; | 334 return mainOutputUnit; |
346 } | 335 } |
347 } | 336 } |
348 | 337 |
349 api.DiagnosticHandler createHandler(MockCompiler compiler, String text, | 338 api.DiagnosticHandler createHandler(MockCompiler compiler, String text, |
350 {bool verbose: false}) { | 339 {bool verbose: false}) { |
351 return (uri, int begin, int end, String message, kind) { | 340 return (uri, int begin, int end, String message, kind) { |
352 if (kind == api.Diagnostic.VERBOSE_INFO && !verbose) return; | 341 if (kind == api.Diagnostic.VERBOSE_INFO && !verbose) return; |
353 SourceFile sourceFile; | 342 SourceFile sourceFile; |
354 if (uri == null) { | 343 if (uri == null) { |
355 sourceFile = new StringSourceFile.fromName('analysis', text); | 344 sourceFile = new StringSourceFile.fromName('analysis', text); |
356 } else { | 345 } else { |
357 sourceFile = compiler.sourceFiles[uri.toString()]; | 346 sourceFile = compiler.sourceFiles[uri.toString()]; |
358 } | 347 } |
359 if (sourceFile != null && begin != null && end != null) { | 348 if (sourceFile != null && begin != null && end != null) { |
360 print('${kind}: ${sourceFile.getLocationMessage(message, begin, end)}'); | 349 print('${kind}: ${sourceFile.getLocationMessage(message, begin, end)}'); |
361 } else { | 350 } else { |
362 print('${kind}: $message'); | 351 print('${kind}: $message'); |
363 } | 352 } |
364 }; | 353 }; |
365 } | 354 } |
366 | 355 |
367 class MockElement extends FunctionElementX { | 356 class MockElement extends FunctionElementX { |
368 MockElement(Element enclosingElement) | 357 MockElement(Element enclosingElement) |
369 : super('', ElementKind.FUNCTION, Modifiers.EMPTY, | 358 : super('', ElementKind.FUNCTION, Modifiers.EMPTY, enclosingElement); |
370 enclosingElement); | |
371 | 359 |
372 get node => null; | 360 get node => null; |
373 | 361 |
374 parseNode(_) => null; | 362 parseNode(_) => null; |
375 | 363 |
376 bool get hasNode => false; | 364 bool get hasNode => false; |
377 | 365 |
378 accept(ElementVisitor visitor, arg) { | 366 accept(ElementVisitor visitor, arg) { |
379 return visitor.visitMethodElement(this, arg); | 367 return visitor.visitMethodElement(this, arg); |
380 } | 368 } |
381 } | 369 } |
382 | 370 |
383 // TODO(herhut): Disallow warnings and errors during compilation by default. | 371 // TODO(herhut): Disallow warnings and errors during compilation by default. |
384 MockCompiler compilerFor(String code, Uri uri, | 372 MockCompiler compilerFor(String code, Uri uri, |
385 {bool analyzeAll: false, | 373 {bool analyzeAll: false, |
386 bool analyzeOnly: false, | 374 bool analyzeOnly: false, |
387 Map<String, String> coreSource, | 375 Map<String, String> coreSource, |
388 bool disableInlining: true, | 376 bool disableInlining: true, |
389 bool minify: false, | 377 bool minify: false, |
390 bool trustTypeAnnotations: false, | 378 bool trustTypeAnnotations: false, |
391 bool enableTypeAssertions: false, | 379 bool enableTypeAssertions: false, |
392 bool enableUserAssertions: false, | 380 bool enableUserAssertions: false, |
393 int expectedErrors, | 381 int expectedErrors, |
394 int expectedWarnings, | 382 int expectedWarnings, |
395 api.CompilerOutputProvider outputProvider}) { | 383 api.CompilerOutputProvider outputProvider}) { |
396 MockCompiler compiler = new MockCompiler.internal( | 384 MockCompiler compiler = new MockCompiler.internal( |
397 analyzeAll: analyzeAll, | 385 analyzeAll: analyzeAll, |
398 analyzeOnly: analyzeOnly, | 386 analyzeOnly: analyzeOnly, |
399 coreSource: coreSource, | 387 coreSource: coreSource, |
400 disableInlining: disableInlining, | 388 disableInlining: disableInlining, |
401 enableMinification: minify, | 389 enableMinification: minify, |
402 trustTypeAnnotations: trustTypeAnnotations, | 390 trustTypeAnnotations: trustTypeAnnotations, |
403 enableTypeAssertions: enableTypeAssertions, | 391 enableTypeAssertions: enableTypeAssertions, |
404 enableUserAssertions: enableUserAssertions, | 392 enableUserAssertions: enableUserAssertions, |
405 expectedErrors: expectedErrors, | 393 expectedErrors: expectedErrors, |
406 expectedWarnings: expectedWarnings, | 394 expectedWarnings: expectedWarnings, |
407 outputProvider: outputProvider); | 395 outputProvider: outputProvider); |
408 compiler.registerSource(uri, code); | 396 compiler.registerSource(uri, code); |
409 compiler.diagnosticHandler = createHandler(compiler, code); | 397 compiler.diagnosticHandler = createHandler(compiler, code); |
410 return compiler; | 398 return compiler; |
411 } | 399 } |
OLD | NEW |