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. |
115 @override | 116 @override |
116 Iterable<MetadataAnnotation> get metadata => const <MetadataAnnotation>[]; | 117 Iterable<MetadataAnnotation> get metadata => const <MetadataAnnotation>[]; |
117 | 118 |
118 @override | 119 @override |
119 Token get position => _unsupported('position'); | 120 Token get position => _unsupported('position'); |
120 } | 121 } |
121 | 122 |
122 abstract class DeserializedElementZ extends ElementZ { | 123 abstract class DeserializedElementZ extends ElementZ { |
123 ObjectDecoder _decoder; | 124 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 } | |
171 } | 150 } |
172 | 151 |
173 /// Deserializer for a collection of member elements serialized as a map from | 152 /// Deserializer for a collection of member elements serialized as a map from |
174 /// names to element declarations. | 153 /// names to element declarations. |
175 /// | 154 /// |
176 /// The serialized data contains the declared getters and setters but lookup | 155 /// The serialized data contains the declared getters and setters but lookup |
177 /// into the map returns an [AbstractFieldElement] for pairs of corresponding | 156 /// into the map returns an [AbstractFieldElement] for pairs of corresponding |
178 /// getters and setters. | 157 /// getters and setters. |
179 /// | 158 /// |
180 /// The underlying map encoding allows for lazy computation of the members upon | 159 /// 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... |
960 @override | 939 @override |
961 Link<DartType> get interfaces { | 940 Link<DartType> get interfaces { |
962 _ensureSuperHierarchy(); | 941 _ensureSuperHierarchy(); |
963 return _interfaces; | 942 return _interfaces; |
964 } | 943 } |
965 | 944 |
966 @override | 945 @override |
967 bool get isProxy => _decoder.getBool(Key.IS_PROXY); | 946 bool get isProxy => _decoder.getBool(Key.IS_PROXY); |
968 | 947 |
969 @override | 948 @override |
970 bool get isInjected => _decoder.getBool(Key.IS_INJECTED); | |
971 | |
972 @override | |
973 bool get isUnnamedMixinApplication => false; | 949 bool get isUnnamedMixinApplication => false; |
974 | 950 |
975 @override | 951 @override |
976 FunctionType get callType { | 952 FunctionType get callType { |
977 _ensureSuperHierarchy(); | 953 _ensureSuperHierarchy(); |
978 // TODO(johnniwinther): Why can't this always be computed in ensureResolved? | 954 // TODO(johnniwinther): Why can't this always be computed in ensureResolved? |
979 return _callType; | 955 return _callType; |
980 } | 956 } |
981 } | 957 } |
982 | 958 |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1497 abstract class MemberElementMixin | 1473 abstract class MemberElementMixin |
1498 implements DeserializedElementZ, MemberElement { | 1474 implements DeserializedElementZ, MemberElement { |
1499 @override | 1475 @override |
1500 MemberElement get memberContext => this; | 1476 MemberElement get memberContext => this; |
1501 | 1477 |
1502 @override | 1478 @override |
1503 Name get memberName => new Name(name, library); | 1479 Name get memberName => new Name(name, library); |
1504 | 1480 |
1505 @override | 1481 @override |
1506 List<FunctionElement> get nestedClosures => <FunctionElement>[]; | 1482 List<FunctionElement> get nestedClosures => <FunctionElement>[]; |
1507 | |
1508 @override | |
1509 bool get isInjected => _decoder.getBool(Key.IS_INJECTED); | |
1510 } | 1483 } |
1511 | 1484 |
1512 abstract class FieldElementZ extends DeserializedElementZ | 1485 abstract class FieldElementZ extends DeserializedElementZ |
1513 with | 1486 with |
1514 AnalyzableElementMixin, | 1487 AnalyzableElementMixin, |
1515 AstElementMixinZ, | 1488 AstElementMixinZ, |
1516 TypedElementMixin, | 1489 TypedElementMixin, |
1517 MemberElementMixin | 1490 MemberElementMixin |
1518 implements FieldElement { | 1491 implements FieldElement { |
1519 bool _isConst; | 1492 bool _isConst; |
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2283 } | 2256 } |
2284 | 2257 |
2285 @override | 2258 @override |
2286 ElementKind get kind => ElementKind.PREFIX; | 2259 ElementKind get kind => ElementKind.PREFIX; |
2287 | 2260 |
2288 @override | 2261 @override |
2289 Element lookupLocalMember(String memberName) { | 2262 Element lookupLocalMember(String memberName) { |
2290 return _unsupported('lookupLocalMember'); | 2263 return _unsupported('lookupLocalMember'); |
2291 } | 2264 } |
2292 } | 2265 } |
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 |