| Index: pkg/compiler/lib/src/serialization/element_serialization.dart
|
| diff --git a/pkg/compiler/lib/src/serialization/element_serialization.dart b/pkg/compiler/lib/src/serialization/element_serialization.dart
|
| index b115ae0ed0f15e4f153bda21c9a48decc1d5167e..8a2ad83eab4a14c05c820c4d7ba58447fbf2e8d2 100644
|
| --- a/pkg/compiler/lib/src/serialization/element_serialization.dart
|
| +++ b/pkg/compiler/lib/src/serialization/element_serialization.dart
|
| @@ -120,6 +120,23 @@ class SerializerUtil {
|
| }
|
| }
|
|
|
| + /// Serialize the metadata of [element] into [encoder].
|
| + static void serializeMetadata(Element element, ObjectEncoder encoder) {
|
| + if (element.metadata.isNotEmpty) {
|
| + ListEncoder list = encoder.createList(Key.METADATA);
|
| + for (MetadataAnnotation metadata in element.metadata) {
|
| + ObjectEncoder object = list.createObject();
|
| + object.setElement(Key.ELEMENT, metadata.annotatedElement);
|
| + SourceSpan sourcePosition = metadata.sourcePosition;
|
| + // TODO(johnniwinther): What is the base URI here?
|
| + object.setUri(Key.URI, sourcePosition.uri, sourcePosition.uri);
|
| + object.setInt(Key.OFFSET, sourcePosition.begin);
|
| + object.setInt(Key.LENGTH, sourcePosition.end - sourcePosition.begin);
|
| + object.setConstant(Key.CONSTANT, metadata.constant);
|
| + }
|
| + }
|
| + }
|
| +
|
| /// Serialize the parent relation for [element] into [encoder], i.e library,
|
| /// enclosing class, and compilation unit references.
|
| static void serializeParentRelation(Element element, ObjectEncoder encoder) {
|
| @@ -225,6 +242,7 @@ class LibrarySerializer implements ElementSerializer {
|
|
|
| void serialize(LibraryElement element, ObjectEncoder encoder,
|
| SerializedElementKind kind) {
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| encoder.setUri(
|
| Key.CANONICAL_URI, element.canonicalUri, element.canonicalUri);
|
| encoder.setString(Key.LIBRARY_NAME, element.libraryName);
|
| @@ -252,6 +270,7 @@ class CompilationUnitSerializer implements ElementSerializer {
|
|
|
| void serialize(CompilationUnitElement element, ObjectEncoder encoder,
|
| SerializedElementKind kind) {
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| encoder.setElement(Key.LIBRARY, element.library);
|
| encoder.setUri(
|
| Key.URI, element.library.canonicalUri, element.script.resourceUri);
|
| @@ -299,6 +318,7 @@ class ClassSerializer implements ElementSerializer {
|
|
|
| void serialize(
|
| ClassElement element, ObjectEncoder encoder, SerializedElementKind kind) {
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| encoder.setElement(Key.LIBRARY, element.library);
|
| encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
|
| encoder.setString(Key.NAME, element.name);
|
| @@ -307,6 +327,7 @@ class ClassSerializer implements ElementSerializer {
|
| encoder.setBool(Key.IS_ABSTRACT, element.isAbstract);
|
| SerializerUtil.serializeMembers(getMembers(element), encoder);
|
| encoder.setBool(Key.IS_PROXY, element.isProxy);
|
| + encoder.setBool(Key.IS_INJECTED, element.isInjected);
|
| if (kind == SerializedElementKind.ENUM) {
|
| EnumClassElement enumClass = element;
|
| encoder.setElements(Key.FIELDS, enumClass.enumValues);
|
| @@ -368,12 +389,14 @@ class ConstructorSerializer implements ElementSerializer {
|
| if (kind == SerializedElementKind.FORWARDING_CONSTRUCTOR) {
|
| encoder.setElement(Key.ELEMENT, element.definingConstructor);
|
| } else {
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| encoder.setType(Key.TYPE, element.type);
|
| encoder.setString(Key.NAME, element.name);
|
| SerializerUtil.serializePosition(element, encoder);
|
| SerializerUtil.serializeParameters(element, encoder);
|
| encoder.setBool(Key.IS_CONST, element.isConst);
|
| encoder.setBool(Key.IS_EXTERNAL, element.isExternal);
|
| + encoder.setBool(Key.IS_INJECTED, element.isInjected);
|
| if (element.isConst && !element.isFromEnvironmentConstructor) {
|
| ConstantConstructor constantConstructor = element.constantConstructor;
|
| ObjectEncoder constantEncoder = encoder.createObject(Key.CONSTRUCTOR);
|
| @@ -419,10 +442,12 @@ class FieldSerializer implements ElementSerializer {
|
| void serialize(
|
| FieldElement element, ObjectEncoder encoder, SerializedElementKind kind) {
|
| encoder.setString(Key.NAME, element.name);
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| SerializerUtil.serializePosition(element, encoder);
|
| encoder.setType(Key.TYPE, element.type);
|
| encoder.setBool(Key.IS_FINAL, element.isFinal);
|
| encoder.setBool(Key.IS_CONST, element.isConst);
|
| + encoder.setBool(Key.IS_INJECTED, element.isInjected);
|
| ConstantExpression constant = element.constant;
|
| if (constant != null) {
|
| encoder.setConstant(Key.CONSTANT, constant);
|
| @@ -469,6 +494,7 @@ class FunctionSerializer implements ElementSerializer {
|
| void serialize(FunctionElement element, ObjectEncoder encoder,
|
| SerializedElementKind kind) {
|
| encoder.setString(Key.NAME, element.name);
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| SerializerUtil.serializePosition(element, encoder);
|
| SerializerUtil.serializeParameters(element, encoder);
|
| encoder.setType(Key.TYPE, element.type);
|
| @@ -479,6 +505,7 @@ class FunctionSerializer implements ElementSerializer {
|
| SerializerUtil.serializeParentRelation(element, encoder);
|
| encoder.setBool(Key.IS_EXTERNAL, element.isExternal);
|
| encoder.setBool(Key.IS_ABSTRACT, element.isAbstract);
|
| + encoder.setBool(Key.IS_INJECTED, element.isInjected);
|
| if (element.isLocal) {
|
| LocalFunctionElement localFunction = element;
|
| encoder.setElement(
|
| @@ -500,6 +527,7 @@ class TypedefSerializer implements ElementSerializer {
|
| void serialize(TypedefElement element, ObjectEncoder encoder,
|
| SerializedElementKind kind) {
|
| encoder.setString(Key.NAME, element.name);
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| SerializerUtil.serializePosition(element, encoder);
|
| encoder.setType(Key.ALIAS, element.alias);
|
| encoder.setElement(Key.LIBRARY, element.library);
|
| @@ -522,6 +550,7 @@ class TypeVariableSerializer implements ElementSerializer {
|
| SerializedElementKind kind) {
|
| encoder.setElement(Key.TYPE_DECLARATION, element.typeDeclaration);
|
| encoder.setString(Key.NAME, element.name);
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| SerializerUtil.serializePosition(element, encoder);
|
| encoder.setType(Key.TYPE, element.type);
|
| encoder.setInt(Key.INDEX, element.index);
|
| @@ -545,6 +574,7 @@ class ParameterSerializer implements ElementSerializer {
|
| SerializedElementKind kind) {
|
| encoder.setElement(Key.FUNCTION, element.functionDeclaration);
|
| encoder.setString(Key.NAME, element.name);
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| SerializerUtil.serializePosition(element, encoder);
|
| encoder.setType(Key.TYPE, element.type);
|
| encoder.setBool(Key.IS_OPTIONAL, element.isOptional);
|
| @@ -573,6 +603,7 @@ class LocalVariableSerializer implements ElementSerializer {
|
| void serialize(LocalVariableElement element, ObjectEncoder encoder,
|
| SerializedElementKind kind) {
|
| encoder.setString(Key.NAME, element.name);
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| SerializerUtil.serializePosition(element, encoder);
|
| encoder.setType(Key.TYPE, element.type);
|
| encoder.setBool(Key.IS_FINAL, element.isFinal);
|
| @@ -597,6 +628,7 @@ class ImportSerializer implements ElementSerializer {
|
|
|
| void serialize(ImportElement element, ObjectEncoder encoder,
|
| SerializedElementKind kind) {
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| encoder.setElement(Key.LIBRARY, element.library);
|
| encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
|
| encoder.setElement(Key.LIBRARY_DEPENDENCY, element.importedLibrary);
|
| @@ -621,6 +653,7 @@ class ExportSerializer implements ElementSerializer {
|
|
|
| void serialize(ExportElement element, ObjectEncoder encoder,
|
| SerializedElementKind kind) {
|
| + SerializerUtil.serializeMetadata(element, encoder);
|
| encoder.setElement(Key.LIBRARY, element.library);
|
| encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
|
| encoder.setElement(Key.LIBRARY_DEPENDENCY, element.exportedLibrary);
|
|
|