public ImmutableList<Field> fieldsAndOneOfFields() { ImmutableList.Builder<Field> result = ImmutableList.builder(); result.addAll(declaredFields); result.addAll(extensionFields); for (OneOf oneOf : oneOfs) { result.addAll(oneOf.fields()); } return result.build(); }
/** Returns the field named {@code name}, or null if this type has no such field. */ public Field field(String name) { for (Field field : declaredFields) { if (field.name().equals(name)) { return field; } } for (OneOf oneOf : oneOfs) { for (Field field : oneOf.fields()) { if (field.name().equals(name)) { return field; } } } return null; }
private MethodSpec setter( NameAllocator nameAllocator, TypeName builderType, OneOf oneOf, Field field) { TypeName javaType = fieldType(field); String fieldName = nameAllocator.get(field); MethodSpec.Builder result = MethodSpec.methodBuilder(fieldName) .addModifiers(PUBLIC) .addParameter(javaType, fieldName) .returns(builderType); if (!field.documentation().isEmpty()) { result.addJavadoc("$L\n", sanitizeJavadoc(field.documentation())); } if (field.isDeprecated()) { result.addAnnotation(Deprecated.class); } if (field.isRepeated() || field.type().isMap()) { result.addStatement("$T.checkElementsNotNull($L)", Internal.class, fieldName); } result.addStatement("this.$L = $L", fieldName, fieldName); if (oneOf != null) { for (Field other : oneOf.fields()) { if (field != other) { result.addStatement("this.$L = null", nameAllocator.get(other)); } } } result.addStatement("return this"); return result.build(); }
private TypeSpec builder(NameAllocator nameAllocator, MessageType type, ClassName javaType, ClassName builderType) { TypeSpec.Builder result = TypeSpec.classBuilder("Builder") .addModifiers(PUBLIC, STATIC, FINAL); result.superclass(builderOf(javaType, builderType)); for (Field field : type.fieldsAndOneOfFields()) { String fieldName = nameAllocator.get(field); result.addField(fieldType(field), fieldName, PUBLIC); } result.addMethod(builderNoArgsConstructor(nameAllocator, type)); for (Field field : type.fields()) { result.addMethod(setter(nameAllocator, builderType, null, field)); } for (OneOf oneOf : type.oneOfs()) { for (Field field : oneOf.fields()) { result.addMethod(setter(nameAllocator, builderType, oneOf, field)); } } result.addMethod(builderBuild(nameAllocator, type, javaType)); return result.build(); }
private void markMessage(MessageType message) { markFields(message.type(), message.fields()); for (OneOf oneOf : message.oneOfs()) { markFields(message.type(), oneOf.fields()); } }
@Test public void retainFieldRetainsOneOf() throws Exception { Schema schema = new RepoBuilder() .add("service.proto", "" + "message Message {\n" + " oneof selection {\n" + " string a = 1;\n" + " string b = 2;\n" + " }\n" + " optional string c = 3;\n" + "}\n") .schema(); Schema pruned = schema.prune(new IdentifierSet.Builder() .include("Message#b") .build()); MessageType message = (MessageType) pruned.getType("Message"); OneOf onlyOneOf = getOnlyElement(message.oneOfs()); assertThat(onlyOneOf.name()).isEqualTo("selection"); assertThat(getOnlyElement(onlyOneOf.fields()).name()).isEqualTo("b"); assertThat(message.field("a")).isNull(); assertThat(message.field("c")).isNull(); }
public ImmutableList<Field> fieldsAndOneOfFields() { ImmutableList.Builder<Field> result = ImmutableList.builder(); result.addAll(declaredFields); result.addAll(extensionFields); for (OneOf oneOf : oneOfs) { result.addAll(oneOf.fields()); } return result.build(); }
public ImmutableList<Field> fieldsAndOneOfFields() { ImmutableList.Builder<Field> result = ImmutableList.builder(); result.addAll(declaredFields); result.addAll(extensionFields); for (OneOf oneOf : oneOfs) { result.addAll(oneOf.fields()); } return result.build(); }
/** Returns the field named {@code name}, or null if this type has no such field. */ public Field field(String name) { for (Field field : declaredFields) { if (field.name().equals(name)) { return field; } } for (OneOf oneOf : oneOfs) { for (Field field : oneOf.fields()) { if (field.name().equals(name)) { return field; } } } return null; }
/** Returns the field named {@code name}, or null if this type has no such field. */ public Field field(String name) { for (Field field : declaredFields) { if (field.name().equals(name)) { return field; } } for (OneOf oneOf : oneOfs) { for (Field field : oneOf.fields()) { if (field.name().equals(name)) { return field; } } } return null; }
private MethodSpec setter( NameAllocator nameAllocator, TypeName builderType, OneOf oneOf, Field field) { TypeName javaType = fieldType(field); String fieldName = nameAllocator.get(field); MethodSpec.Builder result = MethodSpec.methodBuilder(fieldName) .addModifiers(PUBLIC) .addParameter(javaType, fieldName) .returns(builderType); if (!field.documentation().isEmpty()) { result.addJavadoc("$L\n", sanitizeJavadoc(field.documentation())); } if (field.isDeprecated()) { result.addAnnotation(Deprecated.class); } if (field.isRepeated() || field.type().isMap()) { result.addStatement("$T.checkElementsNotNull($L)", Internal.class, fieldName); } result.addStatement("this.$L = $L", fieldName, fieldName); if (oneOf != null) { for (Field other : oneOf.fields()) { if (field != other) { result.addStatement("this.$L = null", nameAllocator.get(other)); } } } result.addStatement("return this"); return result.build(); }
private TypeSpec builder(NameAllocator nameAllocator, MessageType type, ClassName javaType, ClassName builderType) { TypeSpec.Builder result = TypeSpec.classBuilder("Builder") .addModifiers(PUBLIC, STATIC, FINAL); result.superclass(builderOf(javaType, builderType)); for (Field field : type.fieldsAndOneOfFields()) { String fieldName = nameAllocator.get(field); result.addField(fieldType(field), fieldName, PUBLIC); } result.addMethod(builderNoArgsConstructor(nameAllocator, type)); for (Field field : type.fields()) { result.addMethod(setter(nameAllocator, builderType, null, field)); } for (OneOf oneOf : type.oneOfs()) { for (Field field : oneOf.fields()) { result.addMethod(setter(nameAllocator, builderType, oneOf, field)); } } result.addMethod(builderBuild(nameAllocator, type, javaType)); return result.build(); }
private void markMessage(MessageType message) { markFields(message.type(), message.fields()); for (OneOf oneOf : message.oneOfs()) { markFields(message.type(), oneOf.fields()); } }
private void markMessage(MessageType message) { markFields(message.type(), message.fields()); for (OneOf oneOf : message.oneOfs()) { markFields(message.type(), oneOf.fields()); } }
private AnnotationSpec wireFieldAnnotation(Field field, ImmutableList<OneOf> oneOVES) { AnnotationSpec.Builder result = AnnotationSpec.builder(RaptorField.class); ProtoType type = field.type(); result.addMember("fieldType", "$S", getTypeString(type)); if (type.isMap()) { result.addMember("keyType", "$S", getTypeString(type.keyType())); } int tag = field.tag(); result.addMember("order", String.valueOf(tag)); result.addMember("name", "$S", field.name()); if (type.isMap()) { result.addMember("isMap", "true"); } if (field.isRepeated()) { result.addMember("repeated", "true"); } for (OneOf oneOF : oneOVES) { if (oneOF.fields().contains(field)) { result.addMember("oneof", "$S", oneOF.name()); } } return result.build(); }