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 library dart2js.serialization.elements; | 5 library dart2js.serialization.elements; |
6 | 6 |
7 import '../common.dart'; | 7 import '../common.dart'; |
8 import '../constants/constructors.dart'; | 8 import '../constants/constructors.dart'; |
9 import '../constants/expressions.dart'; | 9 import '../constants/expressions.dart'; |
10 import '../dart_types.dart'; | 10 import '../dart_types.dart'; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 } | 115 } |
116 int length = position.end - position.begin; | 116 int length = position.end - position.begin; |
117 if (element.name.length != length) { | 117 if (element.name.length != length) { |
118 encoder.setInt(Key.LENGTH, length); | 118 encoder.setInt(Key.LENGTH, length); |
119 } | 119 } |
120 } | 120 } |
121 } | 121 } |
122 | 122 |
123 /// Serialize the metadata of [element] into [encoder]. | 123 /// Serialize the metadata of [element] into [encoder]. |
124 static void serializeMetadata(Element element, ObjectEncoder encoder) { | 124 static void serializeMetadata(Element element, ObjectEncoder encoder) { |
| 125 ListEncoder list; |
| 126 |
| 127 void encodeAnnotation(MetadataAnnotation metadata) { |
| 128 ObjectEncoder object = list.createObject(); |
| 129 object.setElement(Key.ELEMENT, metadata.annotatedElement); |
| 130 SourceSpan sourcePosition = metadata.sourcePosition; |
| 131 // TODO(johnniwinther): What is the base URI here? |
| 132 object.setUri(Key.URI, sourcePosition.uri, sourcePosition.uri); |
| 133 object.setInt(Key.OFFSET, sourcePosition.begin); |
| 134 object.setInt(Key.LENGTH, sourcePosition.end - sourcePosition.begin); |
| 135 object.setConstant(Key.CONSTANT, metadata.constant); |
| 136 } |
| 137 |
125 if (element.metadata.isNotEmpty) { | 138 if (element.metadata.isNotEmpty) { |
126 ListEncoder list = encoder.createList(Key.METADATA); | 139 list = encoder.createList(Key.METADATA); |
127 for (MetadataAnnotation metadata in element.metadata) { | 140 element.metadata.forEach(encodeAnnotation); |
128 ObjectEncoder object = list.createObject(); | 141 } |
129 object.setElement(Key.ELEMENT, metadata.annotatedElement); | 142 if (element.isPatched && element.implementation.metadata.isNotEmpty) { |
130 SourceSpan sourcePosition = metadata.sourcePosition; | 143 list ??= encoder.createList(Key.METADATA); |
131 // TODO(johnniwinther): What is the base URI here? | 144 element.implementation.metadata.forEach(encodeAnnotation); |
132 object.setUri(Key.URI, sourcePosition.uri, sourcePosition.uri); | |
133 object.setInt(Key.OFFSET, sourcePosition.begin); | |
134 object.setInt(Key.LENGTH, sourcePosition.end - sourcePosition.begin); | |
135 object.setConstant(Key.CONSTANT, metadata.constant); | |
136 } | |
137 } | 145 } |
138 } | 146 } |
139 | 147 |
140 /// Serialize the parent relation for [element] into [encoder], i.e library, | 148 /// Serialize the parent relation for [element] into [encoder], i.e library, |
141 /// enclosing class, and compilation unit references. | 149 /// enclosing class, and compilation unit references. |
142 static void serializeParentRelation(Element element, ObjectEncoder encoder) { | 150 static void serializeParentRelation(Element element, ObjectEncoder encoder) { |
143 if (element.enclosingClass != null) { | 151 if (element.enclosingClass != null) { |
144 encoder.setElement(Key.CLASS, element.enclosingClass); | 152 encoder.setElement(Key.CLASS, element.enclosingClass); |
145 if (element.enclosingClass.declaration.compilationUnit != | 153 if (element.enclosingClass.declaration.compilationUnit != |
146 element.compilationUnit) { | 154 element.compilationUnit) { |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 return new LocalVariableElementZ(decoder); | 772 return new LocalVariableElementZ(decoder); |
765 case SerializedElementKind.EXTERNAL_LIBRARY: | 773 case SerializedElementKind.EXTERNAL_LIBRARY: |
766 case SerializedElementKind.EXTERNAL_LIBRARY_MEMBER: | 774 case SerializedElementKind.EXTERNAL_LIBRARY_MEMBER: |
767 case SerializedElementKind.EXTERNAL_CLASS_MEMBER: | 775 case SerializedElementKind.EXTERNAL_CLASS_MEMBER: |
768 case SerializedElementKind.EXTERNAL_CONSTRUCTOR: | 776 case SerializedElementKind.EXTERNAL_CONSTRUCTOR: |
769 break; | 777 break; |
770 } | 778 } |
771 throw new UnsupportedError("Unexpected element kind '${elementKind}."); | 779 throw new UnsupportedError("Unexpected element kind '${elementKind}."); |
772 } | 780 } |
773 } | 781 } |
OLD | NEW |