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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 /// before query. | 229 /// before query. |
230 class ListedContainer { | 230 class ListedContainer { |
231 final Map<String, Element> _lookupMap = <String, Element>{}; | 231 final Map<String, Element> _lookupMap = <String, Element>{}; |
232 | 232 |
233 ListedContainer(List<Element> elements) { | 233 ListedContainer(List<Element> elements) { |
234 Set<String> accessorNames = new Set<String>(); | 234 Set<String> accessorNames = new Set<String>(); |
235 Map<String, Element> getters = <String, Element>{}; | 235 Map<String, Element> getters = <String, Element>{}; |
236 Map<String, Element> setters = <String, Element>{}; | 236 Map<String, Element> setters = <String, Element>{}; |
237 for (Element element in elements) { | 237 for (Element element in elements) { |
238 String name = element.name; | 238 String name = element.name; |
239 if (element.isGetter) { | 239 if (element.isDeferredLoaderGetter) { |
| 240 // Store directly. |
| 241 // TODO(johnniwinther): Should modelx be normalized to put `loadLibrary` |
| 242 // in an [AbstractFieldElement] instead? |
| 243 _lookupMap[name] = element; |
| 244 } else if (element.isGetter) { |
240 accessorNames.add(name); | 245 accessorNames.add(name); |
241 getters[name] = element; | 246 getters[name] = element; |
242 // Inserting [element] here to ensure insert order of [name]. | 247 // Inserting [element] here to ensure insert order of [name]. |
243 _lookupMap[name] = element; | 248 _lookupMap[name] = element; |
244 } else if (element.isSetter) { | 249 } else if (element.isSetter) { |
245 accessorNames.add(name); | 250 accessorNames.add(name); |
246 setters[name] = element; | 251 setters[name] = element; |
247 // Inserting [element] here to ensure insert order of [name]. | 252 // Inserting [element] here to ensure insert order of [name]. |
248 _lookupMap[name] = element; | 253 _lookupMap[name] = element; |
249 } else { | 254 } else { |
(...skipping 2023 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2273 | 2278 |
2274 String toString() => 'Z$kind($uri)'; | 2279 String toString() => 'Z$kind($uri)'; |
2275 } | 2280 } |
2276 | 2281 |
2277 class PrefixElementZ extends DeserializedElementZ | 2282 class PrefixElementZ extends DeserializedElementZ |
2278 with LibraryMemberMixin | 2283 with LibraryMemberMixin |
2279 implements PrefixElement { | 2284 implements PrefixElement { |
2280 bool _isDeferred; | 2285 bool _isDeferred; |
2281 ImportElement _deferredImport; | 2286 ImportElement _deferredImport; |
2282 GetterElement _loadLibrary; | 2287 GetterElement _loadLibrary; |
| 2288 ListedContainer _members; |
2283 | 2289 |
2284 PrefixElementZ(ObjectDecoder decoder) : super(decoder); | 2290 PrefixElementZ(ObjectDecoder decoder) : super(decoder); |
2285 | 2291 |
2286 @override | 2292 @override |
2287 accept(ElementVisitor visitor, arg) => visitor.visitPrefixElement(this, arg); | 2293 accept(ElementVisitor visitor, arg) => visitor.visitPrefixElement(this, arg); |
2288 | 2294 |
2289 @override | 2295 @override |
2290 bool get isTopLevel => false; | 2296 bool get isTopLevel => false; |
2291 | 2297 |
2292 void _ensureDeferred() { | 2298 void _ensureDeferred() { |
(...skipping 19 matching lines...) Expand all Loading... |
2312 } | 2318 } |
2313 | 2319 |
2314 @override | 2320 @override |
2315 GetterElement get loadLibrary { | 2321 GetterElement get loadLibrary { |
2316 return _loadLibrary; | 2322 return _loadLibrary; |
2317 } | 2323 } |
2318 | 2324 |
2319 @override | 2325 @override |
2320 ElementKind get kind => ElementKind.PREFIX; | 2326 ElementKind get kind => ElementKind.PREFIX; |
2321 | 2327 |
| 2328 void _ensureMembers() { |
| 2329 if (_members == null) { |
| 2330 _members = new ListedContainer( |
| 2331 _decoder.getElements(Key.MEMBERS, isOptional: true)); |
| 2332 } |
| 2333 } |
| 2334 |
2322 @override | 2335 @override |
2323 Element lookupLocalMember(String memberName) { | 2336 Element lookupLocalMember(String memberName) { |
2324 return _unsupported('lookupLocalMember'); | 2337 _ensureMembers(); |
| 2338 return _members.lookup(memberName); |
| 2339 } |
| 2340 |
| 2341 @override |
| 2342 void forEachLocalMember(void f(Element member)) { |
| 2343 _ensureMembers(); |
| 2344 _members.forEach(f); |
2325 } | 2345 } |
2326 } | 2346 } |
2327 | 2347 |
2328 class MetadataAnnotationZ implements MetadataAnnotation { | 2348 class MetadataAnnotationZ implements MetadataAnnotation { |
2329 final Element annotatedElement; | 2349 final Element annotatedElement; |
2330 final SourceSpan sourcePosition; | 2350 final SourceSpan sourcePosition; |
2331 final ConstantExpression constant; | 2351 final ConstantExpression constant; |
2332 | 2352 |
2333 MetadataAnnotationZ( | 2353 MetadataAnnotationZ( |
2334 this.annotatedElement, this.sourcePosition, this.constant); | 2354 this.annotatedElement, this.sourcePosition, this.constant); |
2335 | 2355 |
2336 @override | 2356 @override |
2337 MetadataAnnotation ensureResolved(Resolution resolution) { | 2357 MetadataAnnotation ensureResolved(Resolution resolution) { |
2338 // Do nothing. | 2358 // Do nothing. |
2339 } | 2359 } |
2340 | 2360 |
2341 @override | 2361 @override |
2342 Node get node => throw new UnsupportedError('${this}.node'); | 2362 Node get node => throw new UnsupportedError('${this}.node'); |
2343 | 2363 |
2344 @override | 2364 @override |
2345 bool get hasNode => false; | 2365 bool get hasNode => false; |
2346 | 2366 |
2347 String toString() => 'MetadataAnnotationZ(${constant.toDartText()})'; | 2367 String toString() => 'MetadataAnnotationZ(${constant.toDartText()})'; |
2348 } | 2368 } |
OLD | NEW |