下面列出了怎么用com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* TODO (guptasu): Only needed to create NullValue enum. Check if this can be removed.
* Create the Protobuf.Enum instance from enumDescriptorProto.
*/
private static Enum createEnum(String enumName,
EnumDescriptorProto enumDescriptorProto, String fileName) {
com.google.protobuf.Enum.Builder coreEnumBuilder =
com.google.protobuf.Enum.newBuilder().setName(enumName);
coreEnumBuilder.setSyntax(Syntax.SYNTAX_PROTO3);
for (EnumValueDescriptorProto value : enumDescriptorProto.getValueList()) {
com.google.protobuf.EnumValue.Builder coreEnumValueBuilder =
com.google.protobuf.EnumValue.newBuilder();
coreEnumValueBuilder.setName(value.getName()).setNumber(value.getNumber());
coreEnumBuilder.addEnumvalue(coreEnumValueBuilder.build());
}
coreEnumBuilder.setSourceContext(SourceContext.newBuilder().setFileName(fileName));
return coreEnumBuilder.build();
}
private EnumValueDescriptor(
final FileDescriptor file,
final EnumDescriptor parent,
final Integer number) {
String name = "UNKNOWN_ENUM_VALUE_" + parent.getName() + "_" + number;
EnumValueDescriptorProto proto = EnumValueDescriptorProto
.newBuilder().setName(name).setNumber(number).build();
this.index = -1;
this.proto = proto;
this.file = file;
this.type = parent;
this.fullName = parent.getFullName() + '.' + proto.getName();
this.number = number;
// Don't add this descriptor into pool.
}
private EnumDescriptorProto generateEnum(Enum e) {
EnumDescriptorProto.Builder builder = EnumDescriptorProto.newBuilder();
builder.setName(getSimpleName(e.getName()));
for (EnumValue value : e.getEnumvalueList()) {
EnumValueDescriptorProto.Builder valueBuilder = EnumValueDescriptorProto.newBuilder();
valueBuilder.setName(value.getName());
valueBuilder.setNumber(value.getNumber());
valueBuilder.setOptions(generateEnumValueOptions(value));
builder.addValue(valueBuilder.build());
}
builder.setOptions(generateEnumOptions(e));
return builder.build();
}
private EnumType(ProtoContainerElement parent, EnumDescriptorProto proto, String path) {
super(parent, proto.getName(), path);
this.proto = proto;
// Build values.
ImmutableList.Builder<EnumValue> valuesBuilder = ImmutableList.builder();
List<EnumValueDescriptorProto> valueProtos = proto.getValueList();
for (int i = 0; i < valueProtos.size(); i++) {
EnumValueDescriptorProto value = valueProtos.get(i);
String childPath = buildPath(path, EnumDescriptorProto.VALUE_FIELD_NUMBER, i);
valuesBuilder.add(EnumValue.create(this, value, childPath));
}
values = valuesBuilder.build();
}
private EnumValueDescriptor(final EnumValueDescriptorProto proto,
final FileDescriptor file,
final EnumDescriptor parent,
final int index)
throws DescriptorValidationException {
this.index = index;
this.proto = proto;
this.file = file;
type = parent;
fullName = parent.getFullName() + '.' + proto.getName();
file.pool.addSymbol(this);
file.pool.addEnumValueByNumber(this);
}
protected void decompile(EnumDescriptorProto enumDescriptor) throws IOException {
indentedFormat("enum %s {", enumDescriptor.getName());
indent++;
if (enumDescriptor.hasOptions()) {
decompileOptions(enumDescriptor.getOptions());
}
for (EnumValueDescriptorProto value : enumDescriptor.getValueList()) {
indentedFormat("%s = %d%s;", value.getName(), value.getNumber(),
value.hasOptions() ? bracketedOptions(value.getOptions()) : "");
}
indent--;
indentedFormat("}");
}
public void setEnumFields(List<EnumValueDescriptorProto> enumFields) {
this.enumFields = enumFields;
}
public static List<Option> getOptions(EnumValueDescriptorProto descriptor) {
return getOptions(descriptor, true);
}
public static List<Option> getOptions(EnumValueDescriptorProto descriptor, boolean withDefaults) {
return toCoreOptions(maybeCombineOptionsWithDefault(withDefaults,
descriptor.getOptions().getAllFields(), DEFAULT_ENUM_VALUE_OPTIONS));
}
/**
* Creates an enum value backed up by the given proto.
*/
public static EnumValue create(EnumType parent, EnumValueDescriptorProto proto, String path) {
return new EnumValue(parent, proto, path);
}
private EnumValue(EnumType parent, EnumValueDescriptorProto proto, String path) {
super(parent, proto.getName(), path);
this.proto = proto;
}
/**
* Returns the underlying proto representation.
*/
public EnumValueDescriptorProto getProto() {
return proto;
}
@Accepts
protected void accept(EnumValueDescriptorProto.Builder val) {
pushParent(BuilderVisitorNodeInfo.create(val, currentFile));
visit(val.getOptionsBuilder());
popExpectedParent(val);
}
/** Convert the descriptor to its protocol message representation. */
@Override
public EnumValueDescriptorProto toProto() {
return proto;
}
/** See {@link FileDescriptor#setProto}. */
private void setProto(final EnumValueDescriptorProto proto) {
this.proto = proto;
}
/**
* Tests the translate/crosslink for an example with a more complex namespace
* referencing.
*/
public void testComplexNamespacePublicDependency() throws Exception {
FileDescriptorProto fooProto = FileDescriptorProto.newBuilder()
.setName("bar.proto")
.setPackage("a.b.c.d.bar.shared")
.addEnumType(EnumDescriptorProto.newBuilder()
.setName("MyEnum")
.addValue(EnumValueDescriptorProto.newBuilder()
.setName("BLAH")
.setNumber(1)))
.build();
FileDescriptorProto barProto = FileDescriptorProto.newBuilder()
.setName("foo.proto")
.addDependency("bar.proto")
.setPackage("a.b.c.d.foo.shared")
.addMessageType(DescriptorProto.newBuilder()
.setName("MyMessage")
.addField(FieldDescriptorProto.newBuilder()
.setLabel(FieldDescriptorProto.Label.LABEL_REPEATED)
.setTypeName("bar.shared.MyEnum")
.setName("MyField")
.setNumber(1)))
.build();
// translate and crosslink
FileDescriptor fooFile = Descriptors.FileDescriptor.buildFrom(
fooProto, new FileDescriptor[0]);
FileDescriptor barFile = Descriptors.FileDescriptor.buildFrom(
barProto, new FileDescriptor[]{fooFile});
// verify resulting descriptors
assertNotNull(barFile);
List<Descriptor> msglist = barFile.getMessageTypes();
assertNotNull(msglist);
assertTrue(msglist.size() == 1);
Descriptor desc = msglist.get(0);
if (desc.getName().equals("MyMessage")) {
assertNotNull(desc.getFields());
List<FieldDescriptor> fieldlist = desc.getFields();
assertNotNull(fieldlist);
assertTrue(fieldlist.size() == 1);
FieldDescriptor field = fieldlist.get(0);
assertTrue(field.getType() == FieldDescriptor.Type.ENUM);
assertTrue(field.getEnumType().getName().equals("MyEnum"));
assertTrue(field.getEnumType().getFile().getName().equals("bar.proto"));
assertTrue(field.getEnumType().getFile().getPackage().equals(
"a.b.c.d.bar.shared"));
}
}
public Builder addValue(String name, int num) {
EnumValueDescriptorProto.Builder enumValBuilder = EnumValueDescriptorProto.newBuilder();
enumValBuilder.setName(name).setNumber(num);
mEnumTypeBuilder.addValue(enumValBuilder.build());
return this;
}