下面列出了com.google.protobuf.DescriptorProtos.DescriptorProto#Builder ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Accepts
protected void accept(DescriptorProto.Builder message) {
MessageNodeInfo messageInfo =
(MessageNodeInfo) pushParent(BuilderVisitorNodeInfo.create(message, currentFile));
visitRepeated(DescriptorProto.FIELD_FIELD_NUMBER);
visitRepeated(DescriptorProto.NESTED_TYPE_FIELD_NUMBER);
visitRepeated(DescriptorProto.ENUM_TYPE_FIELD_NUMBER);
visitRepeated(DescriptorProto.EXTENSION_FIELD_NUMBER);
visit(message.getOptionsBuilder());
popExpectedParent(message);
}
public void processAddedFields(DescriptorProto.Builder message, Iterable<FieldLocation> fields) {
if (manageSourceCodeInfo) {
ProtoPathWrapper messagePath = pathFromElement(message);
if (messagePath == null) {
throw new RuntimeException(
String.format(
"Internal error - couldn't find path for proto message %s",
ProtoHelpers.getName(message)));
}
ProtoPathWrapper fieldsPath =
ProtoHelpers.buildPath(messagePath, DescriptorProto.FIELD_FIELD_NUMBER);
ProtoPathTree<SourceCodeInfo.Location> fieldsPathTree =
pathToLocation.getSubtree(fieldsPath, true);
for (FieldLocation field : fields) {
Integer fieldIndex = fieldsPathTree.size();
if (fieldIndex > 0
&& (fieldsPathTree.firstKey() != 0 || fieldsPathTree.lastKey() != (fieldIndex - 1))) {
throw new RuntimeException(
String.format(
"BuilderVisitor internal error - non-contiguous field indexes found [%d..%d]\n",
fieldsPathTree.firstKey(), fieldsPathTree.lastKey()));
}
fieldsPathTree.addDataElement(
new ProtoPathWrapper(fieldIndex), // relative path of field within this message
field.location());
elementToOriginalPath.put(
field.fieldDescriptor(), ProtoHelpers.buildPath(fieldsPath, fieldIndex));
}
}
}
private void processAddedFields(FileNodeInfo currentFile) {
if (!toBeAddedFields().isEmpty()) {
DescriptorProto.Builder message = (DescriptorProto.Builder) node();
if (currentFile != null) {
currentFile.processAddedFields(message, toBeAddedFields());
}
for (FieldLocation fieldInfo : toBeAddedFields()) {
message.addField(fieldInfo.fieldDescriptor());
}
}
}
public static BuilderVisitorNodeInfo create(
DescriptorProto.Builder node, FileNodeInfo parentFile) {
return new MessageNodeInfo(node, parentFile);
}