generateConstants method
Writes a Dart constant containing the JSON for the ProtoDescriptor. Also writes a separate constant for each nested message, to avoid duplication.
Implementation
void generateConstants(IndentingWriter out) {
const nestedTypeTag = 3;
const enumTypeTag = 4;
assert(_descriptor.info_.fieldInfo[nestedTypeTag]!.name == 'nestedType');
assert(_descriptor.info_.fieldInfo[enumTypeTag]!.name == 'enumType');
var name = getJsonConstant(fileGen);
var json = _descriptor.writeToJsonMap();
var nestedTypeNames =
_messageGenerators.map((m) => m.getJsonConstant(fileGen)).toList();
var nestedEnumNames =
_enumGenerators.map((e) => e.getJsonConstant(fileGen)).toList();
out.println('@$coreImportPrefix.Deprecated'
'(\'Use ${toplevelParent!.binaryDescriptorName} instead\')');
out.addBlock('const $name = const {', '};', () {
for (var key in json.keys) {
out.print("'$key': ");
if (key == '$nestedTypeTag') {
// refer to message constants by name instead of repeating each value
out.println("const [${nestedTypeNames.join(", ")}],");
continue;
} else if (key == '$enumTypeTag') {
// refer to enum constants by name
out.println("const [${nestedEnumNames.join(", ")}],");
continue;
}
writeJsonConst(out, json[key]);
out.println(',');
}
});
out.println();
for (var m in _messageGenerators) {
m.generateConstants(out);
}
for (var e in _enumGenerators) {
e.generateConstants(out);
}
}