/** Returns the initial value of {@code field}, or null if it is doesn't have one. */ private @Nullable CodeBlock initialValue(Field field) { if (field.isPacked() || field.isRepeated()) { return CodeBlock.of("$T.newMutableList()", Internal.class); } else if (field.type().isMap()) { return CodeBlock.of("$T.newMutableMap()", Internal.class); } else { return null; } }
@Test public void scalarFieldIsPacked() throws Exception { Schema schema = new RepoBuilder() .add("message.proto", "" + "message Message {\n" + " repeated int32 a = 1;\n" + " repeated int32 b = 2 [packed=false];\n" + " repeated int32 c = 3 [packed=true];\n" + "}\n") .schema(); MessageType message = (MessageType) schema.getType("Message"); assertThat(message.field("a").isPacked()).isFalse(); assertThat(message.field("b").isPacked()).isFalse(); assertThat(message.field("c").isPacked()).isTrue(); }
private CodeBlock adapterFor(Field field) { CodeBlock.Builder result = singleAdapterFor(field).toBuilder(); if (field.isPacked()) { result.add(".asPacked()"); } else if (field.isRepeated()) { result.add(".asRepeated()"); } return result.build(); }
void validate(Linker linker) { linker = linker.withContext(this); if (isPacked() && !isPackable(linker, type)) { linker.addError("packed=true not permitted on %s", type); } if (extension && isRequired()) { linker.addError("extension fields cannot be required", type); } linker.validateImport(location(), type); }
@Test public void enumFieldIsPacked() throws Exception { Schema schema = new RepoBuilder() .add("message.proto", "" + "message Message {\n" + " repeated HabitablePlanet home_planet = 1 [packed=true];\n" + " enum HabitablePlanet {\n" + " EARTH = 1;\n" + " }\n" + "}\n") .schema(); MessageType message = (MessageType) schema.getType("Message"); assertThat(message.field("home_planet").isPacked()).isTrue(); }
@Test public void specialOptionsNotPruned() throws Exception { Schema schema = new RepoBuilder() .add("message.proto", "" + "option java_package = \"p\";\n" + "\n" + "message Message {\n" + " optional int32 a = 1 [packed = true, deprecated = true, default = 5];\n" + "}\n" + "enum Enum {\n" + " option allow_alias = true;\n" + " A = 1;\n" + " B = 1;\n" + "}\n") .schema(); Schema pruned = schema.prune(new IdentifierSet.Builder() .exclude("google.protobuf.*") .build()); ProtoFile protoFile = pruned.protoFile("message.proto"); assertThat(protoFile.javaPackage()).isEqualTo("p"); MessageType message = (MessageType) pruned.getType("Message"); Field field = message.field("a"); assertThat(field.getDefault()).isEqualTo("5"); assertThat(field.isDeprecated()).isTrue(); assertThat(field.isPacked()).isTrue(); EnumType enumType = (EnumType) pruned.getType("Enum"); assertThat(enumType.allowAlias()).isTrue(); } }
&& !field.isPacked()) { builder.addField(defaultField(nameAllocator, field, fieldJavaType));
private AnnotationSpec wireFieldAnnotation(Field field) { AnnotationSpec.Builder result = AnnotationSpec.builder(WireField.class); int tag = field.tag(); result.addMember("tag", String.valueOf(tag)); if (field.type().isMap()) { result.addMember("keyAdapter", "$S", adapterString(field.type().keyType())); result.addMember("adapter", "$S", adapterString(field.type().valueType())); } else { result.addMember("adapter", "$S", adapterString(field.type())); } if (!field.isOptional()) { if (field.isPacked()) { result.addMember("label", "$T.PACKED", WireField.Label.class); } else if (field.label() != null) { result.addMember("label", "$T.$L", WireField.Label.class, field.label()); } } if (field.isRedacted()) { result.addMember("redacted", "true"); } return result.build(); }
private MethodSpec builderNoArgsConstructor(NameAllocator nameAllocator, MessageType type) { MethodSpec.Builder result = MethodSpec.constructorBuilder().addModifiers(PUBLIC); for (Field field : type.fieldsAndOneOfFields()) { String fieldName = nameAllocator.get(field); if (field.isPacked() || field.isRepeated()) { result.addStatement("$L = $T.newMutableList()", fieldName, Internal.class); } else if (field.type().isMap()) { result.addStatement("$L = $T.newMutableMap()", fieldName, Internal.class); } } return result.build(); }
private CodeBlock adapterFor(Field field) { CodeBlock.Builder result = singleAdapterFor(field).toBuilder(); if (field.isPacked()) { result.add(".asPacked()"); } else if (field.isRepeated()) { result.add(".asRepeated()"); } return result.build(); }
void validate(Linker linker) { linker = linker.withContext(this); if (isPacked() && !isPackable(linker, type)) { linker.addError("packed=true not permitted on %s", type); } if (extension && isRequired()) { linker.addError("extension fields cannot be required", type); } linker.validateImport(location(), type); }
void validate(Linker linker) { linker = linker.withContext(this); if (isPacked() && !isPackable(linker, type)) { linker.addError("packed=true not permitted on %s", type); } if (extension && isRequired()) { linker.addError("extension fields cannot be required", type); } linker.validateImport(location(), type); }
&& !field.isPacked()) { builder.addField(defaultField(nameAllocator, field, fieldJavaType));
private AnnotationSpec wireFieldAnnotation(Field field) { AnnotationSpec.Builder result = AnnotationSpec.builder(WireField.class); int tag = field.tag(); result.addMember("tag", String.valueOf(tag)); if (field.type().isMap()) { result.addMember("keyAdapter", "$S", adapterString(field.type().keyType())); result.addMember("adapter", "$S", adapterString(field.type().valueType())); } else { result.addMember("adapter", "$S", adapterString(field.type())); } if (!field.isOptional()) { if (field.isPacked()) { result.addMember("label", "$T.PACKED", WireField.Label.class); } else if (field.label() != null) { result.addMember("label", "$T.$L", WireField.Label.class, field.label()); } } if (field.isRedacted()) { result.addMember("redacted", "true"); } return result.build(); }