OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 /** | 5 /** |
6 * This library contains the infrastructure to parse and integrate patch files. | 6 * This library contains the infrastructure to parse and integrate patch files. |
7 * | 7 * |
8 * Three types of elements can be patched: [LibraryElement], [ClassElement], | 8 * Three types of elements can be patched: [LibraryElement], [ClassElement], |
9 * [FunctionElement]. Patches are introduced in patch libraries which are loaded | 9 * [FunctionElement]. Patches are introduced in patch libraries which are loaded |
10 * together with the corresponding origin library. Which libraries that are | 10 * together with the corresponding origin library. Which libraries that are |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 import 'elements/resolution_types.dart' show ResolutionDartType; | 127 import 'elements/resolution_types.dart' show ResolutionDartType; |
128 import 'elements/elements.dart'; | 128 import 'elements/elements.dart'; |
129 import 'elements/modelx.dart' | 129 import 'elements/modelx.dart' |
130 show | 130 show |
131 BaseFunctionElementX, | 131 BaseFunctionElementX, |
132 ClassElementX, | 132 ClassElementX, |
133 GetterElementX, | 133 GetterElementX, |
134 LibraryElementX, | 134 LibraryElementX, |
135 MetadataAnnotationX, | 135 MetadataAnnotationX, |
136 SetterElementX; | 136 SetterElementX; |
| 137 import 'enqueue.dart' show DeferredAction; |
137 import 'id_generator.dart'; | 138 import 'id_generator.dart'; |
138 import 'library_loader.dart' show LibraryLoader; | 139 import 'library_loader.dart' show LibraryLoader; |
139 import 'parser/element_listener.dart' show ElementListener; | 140 import 'parser/element_listener.dart' show ElementListener; |
140 import 'parser/member_listener.dart' show MemberListener; | 141 import 'parser/member_listener.dart' show MemberListener; |
141 import 'parser/partial_elements.dart' | 142 import 'parser/partial_elements.dart' |
142 show ClassElementParser, PartialClassElement; | 143 show ClassElementParser, PartialClassElement; |
143 import 'parser/diet_parser_task.dart' show PartialParser; | 144 import 'parser/diet_parser_task.dart' show PartialParser; |
144 import 'script.dart'; | 145 import 'script.dart'; |
145 | 146 |
146 class PatchParserTask extends CompilerTask { | 147 class PatchParserTask extends CompilerTask { |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 | 357 |
357 /// Checks [element] for metadata matching the [handler]. Return a non-null | 358 /// Checks [element] for metadata matching the [handler]. Return a non-null |
358 /// annotation marker matching metadata was found. | 359 /// annotation marker matching metadata was found. |
359 static T checkAnnotation<T>( | 360 static T checkAnnotation<T>( |
360 Compiler compiler, Element element, EagerAnnotationHandler<T> handler) { | 361 Compiler compiler, Element element, EagerAnnotationHandler<T> handler) { |
361 for (MetadataAnnotation annotation in element.implementation.metadata) { | 362 for (MetadataAnnotation annotation in element.implementation.metadata) { |
362 T result = handler.apply(compiler, element, annotation); | 363 T result = handler.apply(compiler, element, annotation); |
363 if (result != handler.defaultResult) { | 364 if (result != handler.defaultResult) { |
364 // TODO(johnniwinther): Perform this check in | 365 // TODO(johnniwinther): Perform this check in |
365 // [Compiler.onLibrariesLoaded]. | 366 // [Compiler.onLibrariesLoaded]. |
366 compiler.enqueuer.resolution.addDeferredAction(element, () { | 367 compiler.libraryLoader |
| 368 .registerDeferredAction(new DeferredAction(element, () { |
367 annotation.ensureResolved(compiler.resolution); | 369 annotation.ensureResolved(compiler.resolution); |
368 handler.validate(compiler, element, annotation, | 370 handler.validate(compiler, element, annotation, |
369 compiler.constants.getConstantValue(annotation.constant)); | 371 compiler.constants.getConstantValue(annotation.constant)); |
370 }); | 372 })); |
371 return result; | 373 return result; |
372 } | 374 } |
373 } | 375 } |
374 return handler.defaultResult; | 376 return handler.defaultResult; |
375 } | 377 } |
376 | 378 |
377 /// Result that signals the absence of annotations. | 379 /// Result that signals the absence of annotations. |
378 T get defaultResult => null; | 380 T get defaultResult => null; |
379 } | 381 } |
380 | 382 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 | 527 |
526 class PatchVersion { | 528 class PatchVersion { |
527 final String tag; | 529 final String tag; |
528 | 530 |
529 const PatchVersion(this.tag); | 531 const PatchVersion(this.tag); |
530 | 532 |
531 bool isActive(String patchTag) => tag == null || tag == patchTag; | 533 bool isActive(String patchTag) => tag == null || tag == patchTag; |
532 | 534 |
533 String toString() => 'PatchVersion($tag)'; | 535 String toString() => 'PatchVersion($tag)'; |
534 } | 536 } |
OLD | NEW |