OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 // TODO(johnniwinther): Make this a separate library. | 5 // TODO(johnniwinther): Make this a separate library. |
6 part of dart2js.kernel.element_map; | 6 part of dart2js.kernel.element_map; |
7 | 7 |
8 class KernelAnnotationProcessor implements AnnotationProcessor { | 8 class KernelAnnotationProcessor implements AnnotationProcessor { |
9 final KernelToElementMapForImpactImpl2 elementMap; | 9 final KernelToElementMapForImpactImpl2 elementMap; |
| 10 final NativeBasicDataBuilder _nativeBasicDataBuilder; |
10 | 11 |
11 KernelAnnotationProcessor(this.elementMap); | 12 KernelAnnotationProcessor(this.elementMap, this._nativeBasicDataBuilder); |
12 | 13 |
13 void extractNativeAnnotations( | 14 void extractNativeAnnotations(LibraryEntity library) { |
14 LibraryEntity library, NativeBasicDataBuilder nativeBasicDataBuilder) { | |
15 ElementEnvironment elementEnvironment = elementMap.elementEnvironment; | 15 ElementEnvironment elementEnvironment = elementMap.elementEnvironment; |
16 CommonElements commonElements = elementMap.commonElements; | 16 CommonElements commonElements = elementMap.commonElements; |
17 | 17 |
18 elementEnvironment.forEachClass(library, (ClassEntity cls) { | 18 elementEnvironment.forEachClass(library, (ClassEntity cls) { |
19 String annotationName; | 19 String annotationName; |
20 // TODO(johnniwinther): Make [_getClassMetadata] public and at test to | 20 // TODO(johnniwinther): Make [_getClassMetadata] public and at test to |
21 // guard against misuse. | 21 // guard against misuse. |
22 for (ConstantValue value in elementMap._getClassMetadata(cls)) { | 22 for (ConstantValue value in elementMap._getClassMetadata(cls)) { |
23 String name = readAnnotationName( | 23 String name = readAnnotationName( |
24 cls, value, commonElements.nativeAnnotationClass); | 24 cls, value, commonElements.nativeAnnotationClass); |
25 if (annotationName == null) { | 25 if (annotationName == null) { |
26 annotationName = name; | 26 annotationName = name; |
27 } else if (name != null) { | 27 } else if (name != null) { |
28 throw new SpannableAssertionFailure( | 28 throw new SpannableAssertionFailure( |
29 cls, 'Too many name annotations.'); | 29 cls, 'Too many name annotations.'); |
30 } | 30 } |
31 } | 31 } |
32 if (annotationName != null) { | 32 if (annotationName != null) { |
33 nativeBasicDataBuilder.setNativeClassTagInfo(cls, annotationName); | 33 _nativeBasicDataBuilder.setNativeClassTagInfo(cls, annotationName); |
34 } | 34 } |
35 }); | 35 }); |
36 } | 36 } |
37 | 37 |
38 void extractJsInteropAnnotations( | 38 void extractJsInteropAnnotations(LibraryEntity library) { |
39 LibraryEntity library, NativeBasicDataBuilder nativeBasicDataBuilder) { | |
40 // TODO(redemption): Implement this. | 39 // TODO(redemption): Implement this. |
41 } | 40 } |
42 | 41 |
43 @override | 42 @override |
44 void processJsInteropAnnotations( | 43 void processJsInteropAnnotations( |
45 NativeBasicData nativeData, NativeDataBuilder nativeDataBuilder) { | 44 NativeBasicData nativeData, NativeDataBuilder nativeDataBuilder) { |
46 // TODO(redemption): Implement this. | 45 // TODO(redemption): Implement this. |
47 } | 46 } |
48 } | 47 } |
OLD | NEW |