Mojom compiler: Move RuntimeTypeInfo from mojom_files.mojom to mojom_types.mojom.
Previously it was awkward/impossible for mojom_types.mojom.go to include the functions that implement runtime type discovery because the structs were defined in mojom_files.mojom.go which is in a different package that depends on mojom_types.mojom.go. This was an unfortunate situation because it meant that any other mojom that depended on mojom_types.mojom also could not fully implement runtime type discovery.
BUG=#448
R=azani@chromium.org
Review URL: https://codereview.chromium.org/1717583003 .
diff --git a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
index c61cc1c..76cb0db 100644
--- a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
+++ b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
@@ -752,305 +752,5 @@
-class ServiceTypeInfo extends bindings.Struct {
- static const List<bindings.StructDataHeader> kVersions = const [
- const bindings.StructDataHeader(24, 0)
- ];
- String topLevelInterface = null;
- List<String> completeTypeSet = null;
-
- ServiceTypeInfo() : super(kVersions.last.size);
-
- static ServiceTypeInfo deserialize(bindings.Message message) {
- var decoder = new bindings.Decoder(message);
- var result = decode(decoder);
- if (decoder.excessHandles != null) {
- decoder.excessHandles.forEach((h) => h.close());
- }
- return result;
- }
-
- static ServiceTypeInfo decode(bindings.Decoder decoder0) {
- if (decoder0 == null) {
- return null;
- }
- ServiceTypeInfo result = new ServiceTypeInfo();
-
- var mainDataHeader = decoder0.decodeStructDataHeader();
- if (mainDataHeader.version <= kVersions.last.version) {
- // Scan in reverse order to optimize for more recent versions.
- for (int i = kVersions.length - 1; i >= 0; --i) {
- if (mainDataHeader.version >= kVersions[i].version) {
- if (mainDataHeader.size == kVersions[i].size) {
- // Found a match.
- break;
- }
- throw new bindings.MojoCodecError(
- 'Header size doesn\'t correspond to known version size.');
- }
- }
- } else if (mainDataHeader.size < kVersions.last.size) {
- throw new bindings.MojoCodecError(
- 'Message newer than the last known version cannot be shorter than '
- 'required by the last known version.');
- }
- if (mainDataHeader.version >= 0) {
-
- result.topLevelInterface = decoder0.decodeString(8, false);
- }
- if (mainDataHeader.version >= 0) {
-
- var decoder1 = decoder0.decodePointer(16, false);
- {
- var si1 = decoder1.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
- result.completeTypeSet = new List<String>(si1.numElements);
- for (int i1 = 0; i1 < si1.numElements; ++i1) {
-
- result.completeTypeSet[i1] = decoder1.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
- }
- }
- }
- return result;
- }
-
- void encode(bindings.Encoder encoder) {
- var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
- try {
- encoder0.encodeString(topLevelInterface, 8, false);
- } on bindings.MojoCodecError catch(e) {
- e.message = "Error encountered while encoding field "
- "topLevelInterface of struct ServiceTypeInfo: $e";
- rethrow;
- }
- try {
- if (completeTypeSet == null) {
- encoder0.encodeNullPointer(16, false);
- } else {
- var encoder1 = encoder0.encodePointerArray(completeTypeSet.length, 16, bindings.kUnspecifiedArrayLength);
- for (int i0 = 0; i0 < completeTypeSet.length; ++i0) {
- encoder1.encodeString(completeTypeSet[i0], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, false);
- }
- }
- } on bindings.MojoCodecError catch(e) {
- e.message = "Error encountered while encoding field "
- "completeTypeSet of struct ServiceTypeInfo: $e";
- rethrow;
- }
- }
-
- String toString() {
- return "ServiceTypeInfo("
- "topLevelInterface: $topLevelInterface" ", "
- "completeTypeSet: $completeTypeSet" ")";
- }
-
- Map toJson() {
- Map map = new Map();
- map["topLevelInterface"] = topLevelInterface;
- map["completeTypeSet"] = completeTypeSet;
- return map;
- }
-}
-
-
-
-
-class RuntimeTypeInfo extends bindings.Struct {
- static const List<bindings.StructDataHeader> kVersions = const [
- const bindings.StructDataHeader(24, 0)
- ];
- Map<String, ServiceTypeInfo> servicesByName = null;
- Map<String, mojom_types_mojom.UserDefinedType> typeMap = null;
-
- RuntimeTypeInfo() : super(kVersions.last.size);
-
- static RuntimeTypeInfo deserialize(bindings.Message message) {
- var decoder = new bindings.Decoder(message);
- var result = decode(decoder);
- if (decoder.excessHandles != null) {
- decoder.excessHandles.forEach((h) => h.close());
- }
- return result;
- }
-
- static RuntimeTypeInfo decode(bindings.Decoder decoder0) {
- if (decoder0 == null) {
- return null;
- }
- RuntimeTypeInfo result = new RuntimeTypeInfo();
-
- var mainDataHeader = decoder0.decodeStructDataHeader();
- if (mainDataHeader.version <= kVersions.last.version) {
- // Scan in reverse order to optimize for more recent versions.
- for (int i = kVersions.length - 1; i >= 0; --i) {
- if (mainDataHeader.version >= kVersions[i].version) {
- if (mainDataHeader.size == kVersions[i].size) {
- // Found a match.
- break;
- }
- throw new bindings.MojoCodecError(
- 'Header size doesn\'t correspond to known version size.');
- }
- }
- } else if (mainDataHeader.size < kVersions.last.size) {
- throw new bindings.MojoCodecError(
- 'Message newer than the last known version cannot be shorter than '
- 'required by the last known version.');
- }
- if (mainDataHeader.version >= 0) {
-
- var decoder1 = decoder0.decodePointer(8, false);
- {
- decoder1.decodeDataHeaderForMap();
- List<String> keys0;
- List<ServiceTypeInfo> values0;
- {
-
- var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize, false);
- {
- var si2 = decoder2.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
- keys0 = new List<String>(si2.numElements);
- for (int i2 = 0; i2 < si2.numElements; ++i2) {
-
- keys0[i2] = decoder2.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
- }
- }
- }
- {
-
- var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, false);
- {
- var si2 = decoder2.decodeDataHeaderForPointerArray(keys0.length);
- values0 = new List<ServiceTypeInfo>(si2.numElements);
- for (int i2 = 0; i2 < si2.numElements; ++i2) {
-
- var decoder3 = decoder2.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
- values0[i2] = ServiceTypeInfo.decode(decoder3);
- }
- }
- }
- result.servicesByName = new Map<String, ServiceTypeInfo>.fromIterables(
- keys0, values0);
- }
- }
- if (mainDataHeader.version >= 0) {
-
- var decoder1 = decoder0.decodePointer(16, false);
- {
- decoder1.decodeDataHeaderForMap();
- List<String> keys0;
- List<mojom_types_mojom.UserDefinedType> values0;
- {
-
- var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize, false);
- {
- var si2 = decoder2.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
- keys0 = new List<String>(si2.numElements);
- for (int i2 = 0; i2 < si2.numElements; ++i2) {
-
- keys0[i2] = decoder2.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
- }
- }
- }
- {
-
- var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, false);
- {
- var si2 = decoder2.decodeDataHeaderForUnionArray(keys0.length);
- values0 = new List<mojom_types_mojom.UserDefinedType>(si2.numElements);
- for (int i2 = 0; i2 < si2.numElements; ++i2) {
-
- values0[i2] = mojom_types_mojom.UserDefinedType.decode(decoder2, bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i2);
- if (values0[i2] == null) {
- throw new bindings.MojoCodecError(
- 'Trying to decode null union for non-nullable mojom_types_mojom.UserDefinedType.');
- }
- }
- }
- }
- result.typeMap = new Map<String, mojom_types_mojom.UserDefinedType>.fromIterables(
- keys0, values0);
- }
- }
- return result;
- }
-
- void encode(bindings.Encoder encoder) {
- var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
- try {
- if (servicesByName == null) {
- encoder0.encodeNullPointer(8, false);
- } else {
- var encoder1 = encoder0.encoderForMap(8);
- int size0 = servicesByName.length;
- var keys0 = servicesByName.keys.toList();
- var values0 = servicesByName.values.toList();
-
- {
- var encoder2 = encoder1.encodePointerArray(keys0.length, bindings.ArrayDataHeader.kHeaderSize, bindings.kUnspecifiedArrayLength);
- for (int i1 = 0; i1 < keys0.length; ++i1) {
- encoder2.encodeString(keys0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
- }
- }
-
- {
- var encoder2 = encoder1.encodePointerArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
- for (int i1 = 0; i1 < values0.length; ++i1) {
- encoder2.encodeStruct(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
- }
- }
- }
- } on bindings.MojoCodecError catch(e) {
- e.message = "Error encountered while encoding field "
- "servicesByName of struct RuntimeTypeInfo: $e";
- rethrow;
- }
- try {
- if (typeMap == null) {
- encoder0.encodeNullPointer(16, false);
- } else {
- var encoder1 = encoder0.encoderForMap(16);
- int size0 = typeMap.length;
- var keys0 = typeMap.keys.toList();
- var values0 = typeMap.values.toList();
-
- {
- var encoder2 = encoder1.encodePointerArray(keys0.length, bindings.ArrayDataHeader.kHeaderSize, bindings.kUnspecifiedArrayLength);
- for (int i1 = 0; i1 < keys0.length; ++i1) {
- encoder2.encodeString(keys0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
- }
- }
-
- {
- var encoder2 = encoder1.encodeUnionArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
- for (int i1 = 0; i1 < values0.length; ++i1) {
- encoder2.encodeUnion(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i1, false);
- }
- }
- }
- } on bindings.MojoCodecError catch(e) {
- e.message = "Error encountered while encoding field "
- "typeMap of struct RuntimeTypeInfo: $e";
- rethrow;
- }
- }
-
- String toString() {
- return "RuntimeTypeInfo("
- "servicesByName: $servicesByName" ", "
- "typeMap: $typeMap" ")";
- }
-
- Map toJson() {
- Map map = new Map();
- map["servicesByName"] = servicesByName;
- map["typeMap"] = typeMap;
- return map;
- }
-}
-
-
-
-
diff --git a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
index a97fa51..b97d8bd 100644
--- a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
+++ b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
@@ -2635,6 +2635,306 @@
+class ServiceTypeInfo extends bindings.Struct {
+ static const List<bindings.StructDataHeader> kVersions = const [
+ const bindings.StructDataHeader(24, 0)
+ ];
+ String topLevelInterface = null;
+ List<String> completeTypeSet = null;
+
+ ServiceTypeInfo() : super(kVersions.last.size);
+
+ static ServiceTypeInfo deserialize(bindings.Message message) {
+ var decoder = new bindings.Decoder(message);
+ var result = decode(decoder);
+ if (decoder.excessHandles != null) {
+ decoder.excessHandles.forEach((h) => h.close());
+ }
+ return result;
+ }
+
+ static ServiceTypeInfo decode(bindings.Decoder decoder0) {
+ if (decoder0 == null) {
+ return null;
+ }
+ ServiceTypeInfo result = new ServiceTypeInfo();
+
+ var mainDataHeader = decoder0.decodeStructDataHeader();
+ if (mainDataHeader.version <= kVersions.last.version) {
+ // Scan in reverse order to optimize for more recent versions.
+ for (int i = kVersions.length - 1; i >= 0; --i) {
+ if (mainDataHeader.version >= kVersions[i].version) {
+ if (mainDataHeader.size == kVersions[i].size) {
+ // Found a match.
+ break;
+ }
+ throw new bindings.MojoCodecError(
+ 'Header size doesn\'t correspond to known version size.');
+ }
+ }
+ } else if (mainDataHeader.size < kVersions.last.size) {
+ throw new bindings.MojoCodecError(
+ 'Message newer than the last known version cannot be shorter than '
+ 'required by the last known version.');
+ }
+ if (mainDataHeader.version >= 0) {
+
+ result.topLevelInterface = decoder0.decodeString(8, false);
+ }
+ if (mainDataHeader.version >= 0) {
+
+ var decoder1 = decoder0.decodePointer(16, false);
+ {
+ var si1 = decoder1.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
+ result.completeTypeSet = new List<String>(si1.numElements);
+ for (int i1 = 0; i1 < si1.numElements; ++i1) {
+
+ result.completeTypeSet[i1] = decoder1.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
+ }
+ }
+ }
+ return result;
+ }
+
+ void encode(bindings.Encoder encoder) {
+ var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
+ try {
+ encoder0.encodeString(topLevelInterface, 8, false);
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "topLevelInterface of struct ServiceTypeInfo: $e";
+ rethrow;
+ }
+ try {
+ if (completeTypeSet == null) {
+ encoder0.encodeNullPointer(16, false);
+ } else {
+ var encoder1 = encoder0.encodePointerArray(completeTypeSet.length, 16, bindings.kUnspecifiedArrayLength);
+ for (int i0 = 0; i0 < completeTypeSet.length; ++i0) {
+ encoder1.encodeString(completeTypeSet[i0], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, false);
+ }
+ }
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "completeTypeSet of struct ServiceTypeInfo: $e";
+ rethrow;
+ }
+ }
+
+ String toString() {
+ return "ServiceTypeInfo("
+ "topLevelInterface: $topLevelInterface" ", "
+ "completeTypeSet: $completeTypeSet" ")";
+ }
+
+ Map toJson() {
+ Map map = new Map();
+ map["topLevelInterface"] = topLevelInterface;
+ map["completeTypeSet"] = completeTypeSet;
+ return map;
+ }
+}
+
+
+
+
+class RuntimeTypeInfo extends bindings.Struct {
+ static const List<bindings.StructDataHeader> kVersions = const [
+ const bindings.StructDataHeader(24, 0)
+ ];
+ Map<String, ServiceTypeInfo> servicesByName = null;
+ Map<String, UserDefinedType> typeMap = null;
+
+ RuntimeTypeInfo() : super(kVersions.last.size);
+
+ static RuntimeTypeInfo deserialize(bindings.Message message) {
+ var decoder = new bindings.Decoder(message);
+ var result = decode(decoder);
+ if (decoder.excessHandles != null) {
+ decoder.excessHandles.forEach((h) => h.close());
+ }
+ return result;
+ }
+
+ static RuntimeTypeInfo decode(bindings.Decoder decoder0) {
+ if (decoder0 == null) {
+ return null;
+ }
+ RuntimeTypeInfo result = new RuntimeTypeInfo();
+
+ var mainDataHeader = decoder0.decodeStructDataHeader();
+ if (mainDataHeader.version <= kVersions.last.version) {
+ // Scan in reverse order to optimize for more recent versions.
+ for (int i = kVersions.length - 1; i >= 0; --i) {
+ if (mainDataHeader.version >= kVersions[i].version) {
+ if (mainDataHeader.size == kVersions[i].size) {
+ // Found a match.
+ break;
+ }
+ throw new bindings.MojoCodecError(
+ 'Header size doesn\'t correspond to known version size.');
+ }
+ }
+ } else if (mainDataHeader.size < kVersions.last.size) {
+ throw new bindings.MojoCodecError(
+ 'Message newer than the last known version cannot be shorter than '
+ 'required by the last known version.');
+ }
+ if (mainDataHeader.version >= 0) {
+
+ var decoder1 = decoder0.decodePointer(8, false);
+ {
+ decoder1.decodeDataHeaderForMap();
+ List<String> keys0;
+ List<ServiceTypeInfo> values0;
+ {
+
+ var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize, false);
+ {
+ var si2 = decoder2.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
+ keys0 = new List<String>(si2.numElements);
+ for (int i2 = 0; i2 < si2.numElements; ++i2) {
+
+ keys0[i2] = decoder2.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
+ }
+ }
+ }
+ {
+
+ var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, false);
+ {
+ var si2 = decoder2.decodeDataHeaderForPointerArray(keys0.length);
+ values0 = new List<ServiceTypeInfo>(si2.numElements);
+ for (int i2 = 0; i2 < si2.numElements; ++i2) {
+
+ var decoder3 = decoder2.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
+ values0[i2] = ServiceTypeInfo.decode(decoder3);
+ }
+ }
+ }
+ result.servicesByName = new Map<String, ServiceTypeInfo>.fromIterables(
+ keys0, values0);
+ }
+ }
+ if (mainDataHeader.version >= 0) {
+
+ var decoder1 = decoder0.decodePointer(16, false);
+ {
+ decoder1.decodeDataHeaderForMap();
+ List<String> keys0;
+ List<UserDefinedType> values0;
+ {
+
+ var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize, false);
+ {
+ var si2 = decoder2.decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength);
+ keys0 = new List<String>(si2.numElements);
+ for (int i2 = 0; i2 < si2.numElements; ++i2) {
+
+ keys0[i2] = decoder2.decodeString(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
+ }
+ }
+ }
+ {
+
+ var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, false);
+ {
+ var si2 = decoder2.decodeDataHeaderForUnionArray(keys0.length);
+ values0 = new List<UserDefinedType>(si2.numElements);
+ for (int i2 = 0; i2 < si2.numElements; ++i2) {
+
+ values0[i2] = UserDefinedType.decode(decoder2, bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i2);
+ if (values0[i2] == null) {
+ throw new bindings.MojoCodecError(
+ 'Trying to decode null union for non-nullable UserDefinedType.');
+ }
+ }
+ }
+ }
+ result.typeMap = new Map<String, UserDefinedType>.fromIterables(
+ keys0, values0);
+ }
+ }
+ return result;
+ }
+
+ void encode(bindings.Encoder encoder) {
+ var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
+ try {
+ if (servicesByName == null) {
+ encoder0.encodeNullPointer(8, false);
+ } else {
+ var encoder1 = encoder0.encoderForMap(8);
+ int size0 = servicesByName.length;
+ var keys0 = servicesByName.keys.toList();
+ var values0 = servicesByName.values.toList();
+
+ {
+ var encoder2 = encoder1.encodePointerArray(keys0.length, bindings.ArrayDataHeader.kHeaderSize, bindings.kUnspecifiedArrayLength);
+ for (int i1 = 0; i1 < keys0.length; ++i1) {
+ encoder2.encodeString(keys0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
+ }
+ }
+
+ {
+ var encoder2 = encoder1.encodePointerArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
+ for (int i1 = 0; i1 < values0.length; ++i1) {
+ encoder2.encodeStruct(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
+ }
+ }
+ }
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "servicesByName of struct RuntimeTypeInfo: $e";
+ rethrow;
+ }
+ try {
+ if (typeMap == null) {
+ encoder0.encodeNullPointer(16, false);
+ } else {
+ var encoder1 = encoder0.encoderForMap(16);
+ int size0 = typeMap.length;
+ var keys0 = typeMap.keys.toList();
+ var values0 = typeMap.values.toList();
+
+ {
+ var encoder2 = encoder1.encodePointerArray(keys0.length, bindings.ArrayDataHeader.kHeaderSize, bindings.kUnspecifiedArrayLength);
+ for (int i1 = 0; i1 < keys0.length; ++i1) {
+ encoder2.encodeString(keys0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
+ }
+ }
+
+ {
+ var encoder2 = encoder1.encodeUnionArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
+ for (int i1 = 0; i1 < values0.length; ++i1) {
+ encoder2.encodeUnion(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i1, false);
+ }
+ }
+ }
+ } on bindings.MojoCodecError catch(e) {
+ e.message = "Error encountered while encoding field "
+ "typeMap of struct RuntimeTypeInfo: $e";
+ rethrow;
+ }
+ }
+
+ String toString() {
+ return "RuntimeTypeInfo("
+ "servicesByName: $servicesByName" ", "
+ "typeMap: $typeMap" ")";
+ }
+
+ Map toJson() {
+ Map map = new Map();
+ map["servicesByName"] = servicesByName;
+ map["typeMap"] = typeMap;
+ return map;
+ }
+}
+
+
+
+
enum TypeTag {
simpleType,
diff --git a/mojo/public/interfaces/bindings/mojom_files.mojom b/mojo/public/interfaces/bindings/mojom_files.mojom
index 0acc83f..603e3e8 100644
--- a/mojo/public/interfaces/bindings/mojom_files.mojom
+++ b/mojo/public/interfaces/bindings/mojom_files.mojom
@@ -102,56 +102,4 @@
// All the constant_keys known to the owning MojomFileGraph.
array<string>? top_level_constants;
array<string>? embedded_constants;
-};
-
-// This structure is a component of RuntimeTypeInfo.
-// It contains the information necessary to extract the types corresponding
-// to a single service. See the comments on RuntimeTypeInfo for a fuller
-// explanation.
-struct ServiceTypeInfo {
- // The type_key of the top-level interface for the service. This is the
- // type_key of the interface that was annotated with the "ServiceName"
- // annotation.
- string top_level_interface;
-
- // All of the type_keys of the types in the complete type set of the serive.
- // Note that this set is not restricted to the types from a single .mojom
- // file.
- array<string> complete_type_set;
-};
-
-// This structure contains the information necessary for an implementation of
-// |ServiceDescription| (see service_describer.mojom), but restricted to a
-// single .mojom file and not restricted to a single service. At runtime an
-// implementation of |ServiceDescription| needs to merge the |RuntimeTypeInfo|
-// from all of the generated modules in the file graph and then filter on only
-// those types in the complete type set of a single service.
-//
-// Note that this structure is not literally a component of a MojomFileGraph.
-// Instead, at compile time an instance of this structure is created and
-// serialized to an array of bytes that is stored in the
-// |serialized_runtime_type_info| field of each |MojomFile|. Then at code
-// generation time this array of bytes is written into the generated source
-// code as a literal array of bytes. Then at runtime this array of bytes
-// is deserialized into an instance of RuntimeTypeInfo that may be used by
-// an implementation of |ServiceDescription|.
-struct RuntimeTypeInfo {
- // All of the services contained in a single .mojom file. A "service" is an
- // interface that has been annoted with the "ServiceName" annotation.
- // This indicates that it can be returned from
- // ServiceProvider.ProvideService() and its description can be returned
- // from ServiceDescriber.DescribeService(). The keys are the service names
- // (as specified in the "ServiceName" annotation) and the values are instances
- // of |ServiceTypeInfo| for that service.
- //
- // Note that the |type_map| field below is scoped to a single .mojom file and
- // so some of the keys in the |complete_type_set| field of each
- // |ServiceTypeInfo| struct may not occur in |type_map|. At runtime the
- // |type_map|s from multiple files may need to be combined in order to
- // get all of the types listed in the |complete_type_set| of a single service.
- map<string, ServiceTypeInfo> services_by_name;
-
- // All of the resolved user-defined-types contained in a single .mojom File.
- // The keys are the |type_key|s.
- map<string, UserDefinedType> type_map;
-};
+};
\ No newline at end of file
diff --git a/mojo/public/interfaces/bindings/mojom_types.mojom b/mojo/public/interfaces/bindings/mojom_types.mojom
index c036559..bd29dbc 100644
--- a/mojo/public/interfaces/bindings/mojom_types.mojom
+++ b/mojo/public/interfaces/bindings/mojom_types.mojom
@@ -447,3 +447,58 @@
// The the constant keys of constants declared in this namespace.
array<string>? constants;
};
+
+///////////////// Runtime Type Information //////////////////////
+
+// This structure is a component of RuntimeTypeInfo.
+// It contains the information necessary to extract the types corresponding
+// to a single service. See the comments on RuntimeTypeInfo for a fuller
+// explanation.
+struct ServiceTypeInfo {
+ // The type_key of the top-level interface for the service. This is the
+ // type_key of the interface that was annotated with the "ServiceName"
+ // annotation.
+ string top_level_interface;
+
+ // All of the type_keys of the types in the complete type set of the serive.
+ // Note that this set is not restricted to the types from a single .mojom
+ // file.
+ array<string> complete_type_set;
+};
+
+// This structure contains the information necessary for an implementation of
+// |ServiceDescription| (see service_describer.mojom), but restricted to a
+// single .mojom file and not restricted to a single service. At runtime an
+// implementation of |ServiceDescription| needs to merge the |RuntimeTypeInfo|
+// from all of the generated modules in the file graph and then filter on only
+// those types in the complete type set of a single service.
+//
+// Note that this structure is not literally a component of a MojomFileGraph.
+// Instead, at compile time an instance of this structure is created and
+// serialized to an array of bytes that is stored in the
+// |serialized_runtime_type_info| field of each |MojomFile|. Then at code
+// generation time this array of bytes is written into the generated source
+// code as a literal array of bytes. Then at runtime this array of bytes
+// is deserialized into an instance of RuntimeTypeInfo that may be used by
+// an implementation of |ServiceDescription|.
+struct RuntimeTypeInfo {
+ // All of the services contained in a single .mojom file. A "service" is an
+ // interface that has been annoted with the "ServiceName" annotation.
+ // This indicates that it can be returned from
+ // ServiceProvider.ProvideService() and its description can be returned
+ // from ServiceDescriber.DescribeService(). The keys are the service names
+ // (as specified in the "ServiceName" annotation) and the values are instances
+ // of |ServiceTypeInfo| for that service.
+ //
+ // Note that the |type_map| field below is scoped to a single .mojom file and
+ // so some of the keys in the |complete_type_set| field of each
+ // |ServiceTypeInfo| struct may not occur in |type_map|. At runtime the
+ // |type_map|s from multiple files may need to be combined in order to
+ // get all of the types listed in the |complete_type_set| of a single service.
+ map<string, ServiceTypeInfo> services_by_name;
+
+ // All of the resolved user-defined-types contained in a single .mojom File.
+ // The keys are the |type_key|s.
+ map<string, UserDefinedType> type_map;
+};
+
diff --git a/mojo/public/tools/bindings/mojom_parser/bin/linux64/mojom_parser.sha1 b/mojo/public/tools/bindings/mojom_parser/bin/linux64/mojom_parser.sha1
index 9fc06f9..a35b398 100644
--- a/mojo/public/tools/bindings/mojom_parser/bin/linux64/mojom_parser.sha1
+++ b/mojo/public/tools/bindings/mojom_parser/bin/linux64/mojom_parser.sha1
@@ -1 +1 @@
-63b5ed7da139aa02d5443abe846542dd81495aae
\ No newline at end of file
+b7d4b17fa6a4c0dc32f156f3ce2386eeef92bbc8
\ No newline at end of file
diff --git a/mojo/public/tools/bindings/mojom_parser/bin/mac64/mojom_parser.sha1 b/mojo/public/tools/bindings/mojom_parser/bin/mac64/mojom_parser.sha1
index 7a4e62c..0cc7071 100644
--- a/mojo/public/tools/bindings/mojom_parser/bin/mac64/mojom_parser.sha1
+++ b/mojo/public/tools/bindings/mojom_parser/bin/mac64/mojom_parser.sha1
@@ -1 +1 @@
-e5778703000caf9afb9b6d7edd02b160a27ad8b9
\ No newline at end of file
+aa5c886c2fe50c2f040fb605895e113e64c49aa0
\ No newline at end of file
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
index 5c6430a..7b59868 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
@@ -45,21 +45,3 @@
],
}
-class ServiceTypeInfo(object):
- __metaclass__ = _reflection.MojoStructType
- DESCRIPTOR = {
- 'fields': [
- _descriptor.SingleFieldGroup('top_level_interface', _descriptor.TYPE_STRING, 0, 0),
- _descriptor.SingleFieldGroup('complete_type_set', _descriptor.GenericArrayType(_descriptor.TYPE_STRING), 1, 0),
- ],
- }
-
-class RuntimeTypeInfo(object):
- __metaclass__ = _reflection.MojoStructType
- DESCRIPTOR = {
- 'fields': [
- _descriptor.SingleFieldGroup('services_by_name', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.StructType(lambda: ServiceTypeInfo)), 0, 0),
- _descriptor.SingleFieldGroup('type_map', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.UnionType(lambda: mojom_types_mojom.UserDefinedType)), 1, 0),
- ],
- }
-
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
index 12a25ac..9fabfc3 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
@@ -248,6 +248,24 @@
],
}
+class ServiceTypeInfo(object):
+ __metaclass__ = _reflection.MojoStructType
+ DESCRIPTOR = {
+ 'fields': [
+ _descriptor.SingleFieldGroup('top_level_interface', _descriptor.TYPE_STRING, 0, 0),
+ _descriptor.SingleFieldGroup('complete_type_set', _descriptor.GenericArrayType(_descriptor.TYPE_STRING), 1, 0),
+ ],
+ }
+
+class RuntimeTypeInfo(object):
+ __metaclass__ = _reflection.MojoStructType
+ DESCRIPTOR = {
+ 'fields': [
+ _descriptor.SingleFieldGroup('services_by_name', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.StructType(lambda: ServiceTypeInfo)), 0, 0),
+ _descriptor.SingleFieldGroup('type_map', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.UnionType(lambda: UserDefinedType)), 1, 0),
+ ],
+ }
+
class Type(object):
__metaclass__ = _reflection.MojoUnionType
DESCRIPTOR = {
diff --git a/mojom/mojom_parser/generated/mojom_files/mojom_files.mojom.go b/mojom/mojom_parser/generated/mojom_files/mojom_files.mojom.go
index a8f3824..62b9b36 100644
--- a/mojom/mojom_parser/generated/mojom_files/mojom_files.mojom.go
+++ b/mojom/mojom_parser/generated/mojom_files/mojom_files.mojom.go
@@ -1170,429 +1170,3 @@
}
return nil
}
-
-type ServiceTypeInfo struct {
- TopLevelInterface string
- CompleteTypeSet []string
-}
-
-func (s *ServiceTypeInfo) Encode(encoder *bindings.Encoder) error {
- encoder.StartStruct(16, 0)
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- if err := encoder.WriteString(s.TopLevelInterface); err != nil {
- return err
- }
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- encoder.StartArray(uint32(len(s.CompleteTypeSet)), 64)
- for _, elem0 := range s.CompleteTypeSet {
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- if err := encoder.WriteString(elem0); err != nil {
- return err
- }
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- return nil
-}
-
-var serviceTypeInfo_Versions []bindings.DataHeader = []bindings.DataHeader{
- bindings.DataHeader{24, 0},
-}
-
-func (s *ServiceTypeInfo) Decode(decoder *bindings.Decoder) error {
- header, err := decoder.StartStruct()
- if err != nil {
- return err
- }
- index := sort.Search(len(serviceTypeInfo_Versions), func(i int) bool {
- return serviceTypeInfo_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
- })
- if index < len(serviceTypeInfo_Versions) {
- if serviceTypeInfo_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
- index--
- }
- expectedSize := serviceTypeInfo_Versions[index].Size
- if expectedSize != header.Size {
- return &bindings.ValidationError{bindings.UnexpectedStructHeader,
- fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
- }
- }
- }
- if header.ElementsOrVersion >= 0 {
- pointer0, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer0 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- value0, err := decoder.ReadString()
- if err != nil {
- return err
- }
- s.TopLevelInterface = value0
- }
- }
- if header.ElementsOrVersion >= 0 {
- pointer0, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer0 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- len0, err := decoder.StartArray(64)
- if err != nil {
- return err
- }
- s.CompleteTypeSet = make([]string, len0)
- for i0 := uint32(0); i0 < len0; i0++ {
- pointer1, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer1 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- value1, err := decoder.ReadString()
- if err != nil {
- return err
- }
- s.CompleteTypeSet[i0] = value1
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- return nil
-}
-
-type RuntimeTypeInfo struct {
- ServicesByName map[string]ServiceTypeInfo
- TypeMap map[string]mojom_types.UserDefinedType
-}
-
-func (s *RuntimeTypeInfo) Encode(encoder *bindings.Encoder) error {
- encoder.StartStruct(16, 0)
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- encoder.StartMap()
- {
- var keys0 []string
- var values0 []ServiceTypeInfo
- for key0, value0 := range s.ServicesByName {
- keys0 = append(keys0, key0)
- values0 = append(values0, value0)
- }
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- encoder.StartArray(uint32(len(keys0)), 64)
- for _, elem1 := range keys0 {
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- if err := encoder.WriteString(elem1); err != nil {
- return err
- }
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- encoder.StartArray(uint32(len(values0)), 64)
- for _, elem1 := range values0 {
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- if err := elem1.Encode(encoder); err != nil {
- return err
- }
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- encoder.StartMap()
- {
- var keys0 []string
- var values0 []mojom_types.UserDefinedType
- for key0, value0 := range s.TypeMap {
- keys0 = append(keys0, key0)
- values0 = append(values0, value0)
- }
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- encoder.StartArray(uint32(len(keys0)), 64)
- for _, elem1 := range keys0 {
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- if err := encoder.WriteString(elem1); err != nil {
- return err
- }
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- if err := encoder.WritePointer(); err != nil {
- return err
- }
- encoder.StartArray(uint32(len(values0)), 128)
- for _, elem1 := range values0 {
- if elem1 == nil {
- return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
- }
- if err := elem1.Encode(encoder); err != nil {
- return err
- }
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- if err := encoder.Finish(); err != nil {
- return err
- }
- return nil
-}
-
-var runtimeTypeInfo_Versions []bindings.DataHeader = []bindings.DataHeader{
- bindings.DataHeader{24, 0},
-}
-
-func (s *RuntimeTypeInfo) Decode(decoder *bindings.Decoder) error {
- header, err := decoder.StartStruct()
- if err != nil {
- return err
- }
- index := sort.Search(len(runtimeTypeInfo_Versions), func(i int) bool {
- return runtimeTypeInfo_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
- })
- if index < len(runtimeTypeInfo_Versions) {
- if runtimeTypeInfo_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
- index--
- }
- expectedSize := runtimeTypeInfo_Versions[index].Size
- if expectedSize != header.Size {
- return &bindings.ValidationError{bindings.UnexpectedStructHeader,
- fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
- }
- }
- }
- if header.ElementsOrVersion >= 0 {
- pointer0, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer0 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- if err := decoder.StartMap(); err != nil {
- return err
- }
- var keys0 []string
- {
- pointer1, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer1 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- len1, err := decoder.StartArray(64)
- if err != nil {
- return err
- }
- keys0 = make([]string, len1)
- for i1 := uint32(0); i1 < len1; i1++ {
- pointer2, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer2 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- value2, err := decoder.ReadString()
- if err != nil {
- return err
- }
- keys0[i1] = value2
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- }
- }
- var values0 []ServiceTypeInfo
- {
- pointer1, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer1 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- len1, err := decoder.StartArray(64)
- if err != nil {
- return err
- }
- values0 = make([]ServiceTypeInfo, len1)
- for i1 := uint32(0); i1 < len1; i1++ {
- pointer2, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer2 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- if err := values0[i1].Decode(decoder); err != nil {
- return err
- }
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- }
- }
- if len(keys0) != len(values0) {
- return &bindings.ValidationError{bindings.DifferentSizedArraysInMap,
- fmt.Sprintf("Number of keys %d is different from number of values %d", len(keys0), len(values0)),
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- len0 := len(keys0)
- map0 := make(map[string]ServiceTypeInfo)
- for i0 := 0; i0 < len0; i0++ {
- map0[keys0[i0]] = values0[i0]
- }
- s.ServicesByName = map0
- }
- }
- if header.ElementsOrVersion >= 0 {
- pointer0, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer0 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- if err := decoder.StartMap(); err != nil {
- return err
- }
- var keys0 []string
- {
- pointer1, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer1 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- len1, err := decoder.StartArray(64)
- if err != nil {
- return err
- }
- keys0 = make([]string, len1)
- for i1 := uint32(0); i1 < len1; i1++ {
- pointer2, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer2 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- value2, err := decoder.ReadString()
- if err != nil {
- return err
- }
- keys0[i1] = value2
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- }
- }
- var values0 []mojom_types.UserDefinedType
- {
- pointer1, err := decoder.ReadPointer()
- if err != nil {
- return err
- }
- if pointer1 == 0 {
- return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
- } else {
- len1, err := decoder.StartArray(128)
- if err != nil {
- return err
- }
- values0 = make([]mojom_types.UserDefinedType, len1)
- for i1 := uint32(0); i1 < len1; i1++ {
- var err error
- values0[i1], err = mojom_types.DecodeUserDefinedType(decoder)
- if err != nil {
- return err
- }
- if values0[i1] == nil {
- return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- }
- }
- if len(keys0) != len(values0) {
- return &bindings.ValidationError{bindings.DifferentSizedArraysInMap,
- fmt.Sprintf("Number of keys %d is different from number of values %d", len(keys0), len(values0)),
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- len0 := len(keys0)
- map0 := make(map[string]mojom_types.UserDefinedType)
- for i0 := 0; i0 < len0; i0++ {
- map0[keys0[i0]] = values0[i0]
- }
- s.TypeMap = map0
- }
- }
- if err := decoder.Finish(); err != nil {
- return err
- }
- return nil
-}
diff --git a/mojom/mojom_parser/generated/mojom_types/mojom_types.mojom.go b/mojom/mojom_parser/generated/mojom_types/mojom_types.mojom.go
index 07409a3..149f3a1 100644
--- a/mojom/mojom_parser/generated/mojom_types/mojom_types.mojom.go
+++ b/mojom/mojom_parser/generated/mojom_types/mojom_types.mojom.go
@@ -2416,6 +2416,436 @@
+type ServiceTypeInfo struct {
+ TopLevelInterface string
+ CompleteTypeSet []string
+}
+
+func (s *ServiceTypeInfo) Encode(encoder *bindings.Encoder) error {
+ encoder.StartStruct(16, 0)
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ if err := encoder.WriteString(s.TopLevelInterface); err != nil {
+ return err
+ }
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ encoder.StartArray(uint32(len(s.CompleteTypeSet)), 64)
+ for _, elem0 := range s.CompleteTypeSet {
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ if err := encoder.WriteString(elem0); err != nil {
+ return err
+ }
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ return nil
+}
+
+var serviceTypeInfo_Versions []bindings.DataHeader = []bindings.DataHeader{
+ bindings.DataHeader{24, 0},
+}
+
+func (s *ServiceTypeInfo) Decode(decoder *bindings.Decoder) error {
+ header, err := decoder.StartStruct()
+ if err != nil {
+ return err
+ }
+ index := sort.Search(len(serviceTypeInfo_Versions), func(i int) bool {
+ return serviceTypeInfo_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
+ })
+ if index < len(serviceTypeInfo_Versions) {
+ if serviceTypeInfo_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
+ index--
+ }
+ expectedSize := serviceTypeInfo_Versions[index].Size
+ if expectedSize != header.Size {
+ return &bindings.ValidationError{bindings.UnexpectedStructHeader,
+ fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
+ }
+ }
+ }
+ if header.ElementsOrVersion >= 0 {
+ pointer0, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer0 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ value0, err := decoder.ReadString()
+ if err != nil {
+ return err
+ }
+ s.TopLevelInterface = value0
+ }
+ }
+ if header.ElementsOrVersion >= 0 {
+ pointer0, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer0 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ len0, err := decoder.StartArray(64)
+ if err != nil {
+ return err
+ }
+ s.CompleteTypeSet = make([]string, len0)
+ for i0 := uint32(0); i0 < len0; i0++ {
+ pointer1, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer1 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ value1, err := decoder.ReadString()
+ if err != nil {
+ return err
+ }
+ s.CompleteTypeSet[i0] = value1
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ return nil
+}
+
+
+
+type RuntimeTypeInfo struct {
+ ServicesByName map[string]ServiceTypeInfo
+ TypeMap map[string]UserDefinedType
+}
+
+func (s *RuntimeTypeInfo) Encode(encoder *bindings.Encoder) error {
+ encoder.StartStruct(16, 0)
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ encoder.StartMap()
+ {
+ var keys0 []string
+ var values0 []ServiceTypeInfo
+ for key0, value0 := range s.ServicesByName {
+ keys0 = append(keys0, key0)
+ values0 = append(values0, value0)
+ }
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ encoder.StartArray(uint32(len(keys0)), 64)
+ for _, elem1 := range keys0 {
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ if err := encoder.WriteString(elem1); err != nil {
+ return err
+ }
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ encoder.StartArray(uint32(len(values0)), 64)
+ for _, elem1 := range values0 {
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ if err := elem1.Encode(encoder); err != nil {
+ return err
+ }
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ encoder.StartMap()
+ {
+ var keys0 []string
+ var values0 []UserDefinedType
+ for key0, value0 := range s.TypeMap {
+ keys0 = append(keys0, key0)
+ values0 = append(values0, value0)
+ }
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ encoder.StartArray(uint32(len(keys0)), 64)
+ for _, elem1 := range keys0 {
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ if err := encoder.WriteString(elem1); err != nil {
+ return err
+ }
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ if err := encoder.WritePointer(); err != nil {
+ return err
+ }
+ encoder.StartArray(uint32(len(values0)), 128)
+ for _, elem1 := range values0 {
+ if elem1 == nil {
+ return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
+ }
+ if err := elem1.Encode(encoder); err != nil {
+ return err
+ }
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ if err := encoder.Finish(); err != nil {
+ return err
+ }
+ return nil
+}
+
+var runtimeTypeInfo_Versions []bindings.DataHeader = []bindings.DataHeader{
+ bindings.DataHeader{24, 0},
+}
+
+func (s *RuntimeTypeInfo) Decode(decoder *bindings.Decoder) error {
+ header, err := decoder.StartStruct()
+ if err != nil {
+ return err
+ }
+ index := sort.Search(len(runtimeTypeInfo_Versions), func(i int) bool {
+ return runtimeTypeInfo_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
+ })
+ if index < len(runtimeTypeInfo_Versions) {
+ if runtimeTypeInfo_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
+ index--
+ }
+ expectedSize := runtimeTypeInfo_Versions[index].Size
+ if expectedSize != header.Size {
+ return &bindings.ValidationError{bindings.UnexpectedStructHeader,
+ fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
+ }
+ }
+ }
+ if header.ElementsOrVersion >= 0 {
+ pointer0, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer0 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ if err := decoder.StartMap(); err != nil {
+ return err
+ }
+ var keys0 []string
+ {
+ pointer1, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer1 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ len1, err := decoder.StartArray(64)
+ if err != nil {
+ return err
+ }
+ keys0 = make([]string, len1)
+ for i1 := uint32(0); i1 < len1; i1++ {
+ pointer2, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer2 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ value2, err := decoder.ReadString()
+ if err != nil {
+ return err
+ }
+ keys0[i1] = value2
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ }
+ }
+ var values0 []ServiceTypeInfo
+ {
+ pointer1, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer1 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ len1, err := decoder.StartArray(64)
+ if err != nil {
+ return err
+ }
+ values0 = make([]ServiceTypeInfo, len1)
+ for i1 := uint32(0); i1 < len1; i1++ {
+ pointer2, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer2 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ if err := values0[i1].Decode(decoder); err != nil {
+ return err
+ }
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ }
+ }
+ if len(keys0) != len(values0) {
+ return &bindings.ValidationError{bindings.DifferentSizedArraysInMap,
+ fmt.Sprintf("Number of keys %d is different from number of values %d", len(keys0), len(values0)),
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ len0 := len(keys0)
+ map0 := make(map[string]ServiceTypeInfo)
+ for i0 := 0; i0 < len0; i0++ {
+ map0[keys0[i0]] = values0[i0]
+ }
+ s.ServicesByName = map0
+ }
+ }
+ if header.ElementsOrVersion >= 0 {
+ pointer0, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer0 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ if err := decoder.StartMap(); err != nil {
+ return err
+ }
+ var keys0 []string
+ {
+ pointer1, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer1 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ len1, err := decoder.StartArray(64)
+ if err != nil {
+ return err
+ }
+ keys0 = make([]string, len1)
+ for i1 := uint32(0); i1 < len1; i1++ {
+ pointer2, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer2 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ value2, err := decoder.ReadString()
+ if err != nil {
+ return err
+ }
+ keys0[i1] = value2
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ }
+ }
+ var values0 []UserDefinedType
+ {
+ pointer1, err := decoder.ReadPointer()
+ if err != nil {
+ return err
+ }
+ if pointer1 == 0 {
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+ } else {
+ len1, err := decoder.StartArray(128)
+ if err != nil {
+ return err
+ }
+ values0 = make([]UserDefinedType, len1)
+ for i1 := uint32(0); i1 < len1; i1++ {
+ var err error
+ values0[i1], err = DecodeUserDefinedType(decoder)
+ if err != nil {
+ return err
+ }
+ if values0[i1] == nil {
+ return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ }
+ }
+ if len(keys0) != len(values0) {
+ return &bindings.ValidationError{bindings.DifferentSizedArraysInMap,
+ fmt.Sprintf("Number of keys %d is different from number of values %d", len(keys0), len(values0)),
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ len0 := len(keys0)
+ map0 := make(map[string]UserDefinedType)
+ for i0 := 0; i0 < len0; i0++ {
+ map0[keys0[i0]] = values0[i0]
+ }
+ s.TypeMap = map0
+ }
+ }
+ if err := decoder.Finish(); err != nil {
+ return err
+ }
+ return nil
+}
+
+
+
type Type interface {
Tag() uint32
Interface() interface{}
diff --git a/mojom/mojom_parser/serialization/serialization.go b/mojom/mojom_parser/serialization/serialization.go
index e0ff2d9..d4ddff3 100644
--- a/mojom/mojom_parser/serialization/serialization.go
+++ b/mojom/mojom_parser/serialization/serialization.go
@@ -129,8 +129,8 @@
// We will populate a RuntimeTypeInfo structure and then serialize it and
// the serialized bytes will form the |serialized_runtime_type_info| field
// of the MojomFile.
- typeInfo := mojom_files.RuntimeTypeInfo{}
- typeInfo.ServicesByName = make(map[string]mojom_files.ServiceTypeInfo)
+ typeInfo := mojom_types.RuntimeTypeInfo{}
+ typeInfo.ServicesByName = make(map[string]mojom_types.ServiceTypeInfo)
typeInfo.TypeMap = make(map[string]mojom_types.UserDefinedType)
// We populate the declared_mojom_objects field
@@ -221,10 +221,10 @@
// addServiceTypeInfo will add a ServiceTypeInfo to the ServicesByName field of |typeInfo| corresponding
// to |intrfc| if |intrfc| is a top-level interface, meaning that it has a non-nil service name. In that
// case this method returns true. Otherwise this method will do nothing and return fals.
-func addServiceTypeInfo(intrfc *mojom.MojomInterface, typeInfo *mojom_files.RuntimeTypeInfo) (isTopLevel bool) {
+func addServiceTypeInfo(intrfc *mojom.MojomInterface, typeInfo *mojom_types.RuntimeTypeInfo) (isTopLevel bool) {
isTopLevel = intrfc.ServiceName != nil
if isTopLevel {
- serviceTypeInfo := mojom_files.ServiceTypeInfo{}
+ serviceTypeInfo := mojom_types.ServiceTypeInfo{}
serviceTypeInfo.TopLevelInterface = intrfc.TypeKey()
serviceTypeInfo.CompleteTypeSet = intrfc.FindReachableTypes()
typeInfo.ServicesByName[*intrfc.ServiceName] = serviceTypeInfo
diff --git a/mojom/mojom_parser/serialization/serialization_test.go b/mojom/mojom_parser/serialization/serialization_test.go
index 69eee81..3c543f5 100644
--- a/mojom/mojom_parser/serialization/serialization_test.go
+++ b/mojom/mojom_parser/serialization/serialization_test.go
@@ -1269,8 +1269,8 @@
// The contents of the two files
mojomContentsA string
mojomContentsB string
- expectedRuntimeTypeInfoA *mojom_files.RuntimeTypeInfo
- expectedRuntimeTypeInfoB *mojom_files.RuntimeTypeInfo
+ expectedRuntimeTypeInfoA *mojom_types.RuntimeTypeInfo
+ expectedRuntimeTypeInfoB *mojom_types.RuntimeTypeInfo
}
type runtimeTypeInfoTest struct {
@@ -1278,19 +1278,19 @@
testCaseNum int
}
-func (t *runtimeTypeInfoTest) expectedRuntimeTypeInfoA() *mojom_files.RuntimeTypeInfo {
+func (t *runtimeTypeInfoTest) expectedRuntimeTypeInfoA() *mojom_types.RuntimeTypeInfo {
return t.cases[t.testCaseNum].expectedRuntimeTypeInfoA
}
-func (t *runtimeTypeInfoTest) expectedRuntimeTypeInfoB() *mojom_files.RuntimeTypeInfo {
+func (t *runtimeTypeInfoTest) expectedRuntimeTypeInfoB() *mojom_types.RuntimeTypeInfo {
return t.cases[t.testCaseNum].expectedRuntimeTypeInfoB
}
func (test *runtimeTypeInfoTest) addTestCase(contentsA, contentsB string) {
- test.cases = append(test.cases, runtimeTypeInfoTestCase{contentsA, contentsB, new(mojom_files.RuntimeTypeInfo), new(mojom_files.RuntimeTypeInfo)})
- test.expectedRuntimeTypeInfoA().ServicesByName = make(map[string]mojom_files.ServiceTypeInfo)
+ test.cases = append(test.cases, runtimeTypeInfoTestCase{contentsA, contentsB, new(mojom_types.RuntimeTypeInfo), new(mojom_types.RuntimeTypeInfo)})
+ test.expectedRuntimeTypeInfoA().ServicesByName = make(map[string]mojom_types.ServiceTypeInfo)
test.expectedRuntimeTypeInfoA().TypeMap = make(map[string]mojom_types.UserDefinedType)
- test.expectedRuntimeTypeInfoB().ServicesByName = make(map[string]mojom_files.ServiceTypeInfo)
+ test.expectedRuntimeTypeInfoB().ServicesByName = make(map[string]mojom_types.ServiceTypeInfo)
test.expectedRuntimeTypeInfoB().TypeMap = make(map[string]mojom_types.UserDefinedType)
}
@@ -1476,7 +1476,7 @@
test.addTestCase(contentsA, contentsB)
// ServicesByName for file A
- test.expectedRuntimeTypeInfoA().ServicesByName["AwesomeService"] = mojom_files.ServiceTypeInfo{
+ test.expectedRuntimeTypeInfoA().ServicesByName["AwesomeService"] = mojom_types.ServiceTypeInfo{
TopLevelInterface: "TYPE_KEY:a.b.c.InterfaceA",
CompleteTypeSet: []string{"TYPE_KEY:a.b.c.FooA", "TYPE_KEY:a.b.c.InterfaceA", "TYPE_KEY:b.c.d.FooB"},
}
@@ -1592,7 +1592,7 @@
test.addTestCase(contentsA, contentsB)
// ServicesByName for file A
- test.expectedRuntimeTypeInfoA().ServicesByName["AwesomeService"] = mojom_files.ServiceTypeInfo{
+ test.expectedRuntimeTypeInfoA().ServicesByName["AwesomeService"] = mojom_types.ServiceTypeInfo{
TopLevelInterface: "TYPE_KEY:a.b.c.InterfaceA",
CompleteTypeSet: []string{"TYPE_KEY:a.b.c.FooA", "TYPE_KEY:a.b.c.InterfaceA", "TYPE_KEY:b.c.d.FooB"},
}
@@ -1717,7 +1717,7 @@
test.addTestCase(contentsA, contentsB)
// ServicesByName for file A
- test.expectedRuntimeTypeInfoA().ServicesByName["AwesomeService"] = mojom_files.ServiceTypeInfo{
+ test.expectedRuntimeTypeInfoA().ServicesByName["AwesomeService"] = mojom_types.ServiceTypeInfo{
TopLevelInterface: "TYPE_KEY:a.b.c.InterfaceA",
CompleteTypeSet: []string{"TYPE_KEY:a.b.c.FooA", "TYPE_KEY:a.b.c.InterfaceA", "TYPE_KEY:b.c.d.Enum1", "TYPE_KEY:b.c.d.FooB"},
}
@@ -1879,12 +1879,12 @@
// Deserialize RuntimeTypeInfo A
decoder = bindings.NewDecoder(*fileGraph.Files[fileNameA].SerializedRuntimeTypeInfo, nil)
- runtimeTypeInfoA := mojom_files.RuntimeTypeInfo{}
+ runtimeTypeInfoA := mojom_types.RuntimeTypeInfo{}
runtimeTypeInfoA.Decode(decoder)
// Deserialize RuntimeTypeInfo B
decoder = bindings.NewDecoder(*fileGraph.Files[fileNameB].SerializedRuntimeTypeInfo, nil)
- runtimeTypeInfoB := mojom_files.RuntimeTypeInfo{}
+ runtimeTypeInfoB := mojom_types.RuntimeTypeInfo{}
runtimeTypeInfoB.Decode(decoder)
// Compare A