OLD | NEW |
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 /// Implementation of the element model used for deserialiation. | 5 /// Implementation of the element model used for deserialiation. |
6 /// | 6 /// |
7 /// These classes are created by [ElementDeserializer] triggered by the | 7 /// These classes are created by [ElementDeserializer] triggered by the |
8 /// [Deserializer]. | 8 /// [Deserializer]. |
9 | 9 |
10 library dart2js.serialization.modelz; | 10 library dart2js.serialization.modelz; |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 | 105 |
106 @override | 106 @override |
107 bool get isStatic => false; | 107 bool get isStatic => false; |
108 | 108 |
109 @override | 109 @override |
110 bool get isSynthesized => false; | 110 bool get isSynthesized => false; |
111 | 111 |
112 @override | 112 @override |
113 bool get isTopLevel => false; | 113 bool get isTopLevel => false; |
114 | 114 |
115 // TODO(johnniwinther): Support metadata. | |
116 @override | 115 @override |
117 Iterable<MetadataAnnotation> get metadata => const <MetadataAnnotation>[]; | 116 Iterable<MetadataAnnotation> get metadata => const <MetadataAnnotation>[]; |
118 | 117 |
119 @override | 118 @override |
120 Token get position => _unsupported('position'); | 119 Token get position => _unsupported('position'); |
121 } | 120 } |
122 | 121 |
123 abstract class DeserializedElementZ extends ElementZ { | 122 abstract class DeserializedElementZ extends ElementZ { |
124 ObjectDecoder _decoder; | 123 ObjectDecoder _decoder; |
| 124 List<MetadataAnnotation> _metadata; |
125 | 125 |
126 DeserializedElementZ(this._decoder); | 126 DeserializedElementZ(this._decoder); |
127 | 127 |
128 @override | 128 @override |
129 String get name => _decoder.getString(Key.NAME); | 129 String get name => _decoder.getString(Key.NAME); |
130 | 130 |
131 // TODO(johnniwinther): Should this be cached? | 131 // TODO(johnniwinther): Should this be cached? |
132 @override | 132 @override |
133 int get sourceOffset => _decoder.getInt(Key.OFFSET, isOptional: true); | 133 int get sourceOffset => _decoder.getInt(Key.OFFSET, isOptional: true); |
134 | 134 |
135 @override | 135 @override |
136 SourceSpan get sourcePosition { | 136 SourceSpan get sourcePosition { |
137 // TODO(johnniwinther): Should this be cached? | 137 // TODO(johnniwinther): Should this be cached? |
138 int offset = sourceOffset; | 138 int offset = sourceOffset; |
139 if (offset == null) return null; | 139 if (offset == null) return null; |
140 Uri uri = _decoder.getUri(Key.URI, isOptional: true); | 140 Uri uri = _decoder.getUri(Key.URI, isOptional: true); |
141 if (uri == null) { | 141 if (uri == null) { |
142 uri = compilationUnit.script.readableUri; | 142 uri = compilationUnit.script.readableUri; |
143 } | 143 } |
144 int length = _decoder.getInt(Key.LENGTH, isOptional: true); | 144 int length = _decoder.getInt(Key.LENGTH, isOptional: true); |
145 if (length == null) { | 145 if (length == null) { |
146 length = name.length; | 146 length = name.length; |
147 } | 147 } |
148 return new SourceSpan(uri, offset, offset + length); | 148 return new SourceSpan(uri, offset, offset + length); |
149 } | 149 } |
| 150 |
| 151 @override |
| 152 Iterable<MetadataAnnotation> get metadata { |
| 153 if (_metadata == null) { |
| 154 _metadata = <MetadataAnnotation>[]; |
| 155 ListDecoder list = _decoder.getList(Key.METADATA, isOptional: true); |
| 156 if (list != null) { |
| 157 for (int index = 0; index < list.length; index++) { |
| 158 ObjectDecoder object = list.getObject(index); |
| 159 Element element = object.getElement(Key.ELEMENT); |
| 160 Uri uri = object.getUri(Key.URI); |
| 161 int offset = object.getInt(Key.OFFSET); |
| 162 int length = object.getInt(Key.LENGTH); |
| 163 ConstantExpression constant = object.getConstant(Key.CONSTANT); |
| 164 _metadata.add(new MetadataAnnotationZ( |
| 165 element, new SourceSpan(uri, offset, offset + length), constant)); |
| 166 } |
| 167 } |
| 168 } |
| 169 return _metadata; |
| 170 } |
150 } | 171 } |
151 | 172 |
152 /// Deserializer for a collection of member elements serialized as a map from | 173 /// Deserializer for a collection of member elements serialized as a map from |
153 /// names to element declarations. | 174 /// names to element declarations. |
154 /// | 175 /// |
155 /// The serialized data contains the declared getters and setters but lookup | 176 /// The serialized data contains the declared getters and setters but lookup |
156 /// into the map returns an [AbstractFieldElement] for pairs of corresponding | 177 /// into the map returns an [AbstractFieldElement] for pairs of corresponding |
157 /// getters and setters. | 178 /// getters and setters. |
158 /// | 179 /// |
159 /// The underlying map encoding allows for lazy computation of the members upon | 180 /// The underlying map encoding allows for lazy computation of the members upon |
(...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 @override | 960 @override |
940 Link<DartType> get interfaces { | 961 Link<DartType> get interfaces { |
941 _ensureSuperHierarchy(); | 962 _ensureSuperHierarchy(); |
942 return _interfaces; | 963 return _interfaces; |
943 } | 964 } |
944 | 965 |
945 @override | 966 @override |
946 bool get isProxy => _decoder.getBool(Key.IS_PROXY); | 967 bool get isProxy => _decoder.getBool(Key.IS_PROXY); |
947 | 968 |
948 @override | 969 @override |
| 970 bool get isInjected => _decoder.getBool(Key.IS_INJECTED); |
| 971 |
| 972 @override |
949 bool get isUnnamedMixinApplication => false; | 973 bool get isUnnamedMixinApplication => false; |
950 | 974 |
951 @override | 975 @override |
952 FunctionType get callType { | 976 FunctionType get callType { |
953 _ensureSuperHierarchy(); | 977 _ensureSuperHierarchy(); |
954 // TODO(johnniwinther): Why can't this always be computed in ensureResolved? | 978 // TODO(johnniwinther): Why can't this always be computed in ensureResolved? |
955 return _callType; | 979 return _callType; |
956 } | 980 } |
957 } | 981 } |
958 | 982 |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 abstract class MemberElementMixin | 1497 abstract class MemberElementMixin |
1474 implements DeserializedElementZ, MemberElement { | 1498 implements DeserializedElementZ, MemberElement { |
1475 @override | 1499 @override |
1476 MemberElement get memberContext => this; | 1500 MemberElement get memberContext => this; |
1477 | 1501 |
1478 @override | 1502 @override |
1479 Name get memberName => new Name(name, library); | 1503 Name get memberName => new Name(name, library); |
1480 | 1504 |
1481 @override | 1505 @override |
1482 List<FunctionElement> get nestedClosures => <FunctionElement>[]; | 1506 List<FunctionElement> get nestedClosures => <FunctionElement>[]; |
| 1507 |
| 1508 @override |
| 1509 bool get isInjected => _decoder.getBool(Key.IS_INJECTED); |
1483 } | 1510 } |
1484 | 1511 |
1485 abstract class FieldElementZ extends DeserializedElementZ | 1512 abstract class FieldElementZ extends DeserializedElementZ |
1486 with | 1513 with |
1487 AnalyzableElementMixin, | 1514 AnalyzableElementMixin, |
1488 AstElementMixinZ, | 1515 AstElementMixinZ, |
1489 TypedElementMixin, | 1516 TypedElementMixin, |
1490 MemberElementMixin | 1517 MemberElementMixin |
1491 implements FieldElement { | 1518 implements FieldElement { |
1492 bool _isConst; | 1519 bool _isConst; |
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2256 } | 2283 } |
2257 | 2284 |
2258 @override | 2285 @override |
2259 ElementKind get kind => ElementKind.PREFIX; | 2286 ElementKind get kind => ElementKind.PREFIX; |
2260 | 2287 |
2261 @override | 2288 @override |
2262 Element lookupLocalMember(String memberName) { | 2289 Element lookupLocalMember(String memberName) { |
2263 return _unsupported('lookupLocalMember'); | 2290 return _unsupported('lookupLocalMember'); |
2264 } | 2291 } |
2265 } | 2292 } |
| 2293 |
| 2294 class MetadataAnnotationZ implements MetadataAnnotation { |
| 2295 final Element annotatedElement; |
| 2296 final SourceSpan sourcePosition; |
| 2297 final ConstantExpression constant; |
| 2298 |
| 2299 MetadataAnnotationZ( |
| 2300 this.annotatedElement, this.sourcePosition, this.constant); |
| 2301 |
| 2302 @override |
| 2303 MetadataAnnotation ensureResolved(Resolution resolution) { |
| 2304 // Do nothing. |
| 2305 } |
| 2306 |
| 2307 @override |
| 2308 Node get node => throw new UnsupportedError('${this}.node'); |
| 2309 |
| 2310 @override |
| 2311 bool get hasNode => false; |
| 2312 |
| 2313 String toString() => 'MetadataAnnotationZ(${constant.toDartText()})'; |
| 2314 } |
OLD | NEW |