@Test public void fieldDefault() throws Exception { Schema schema = new RepoBuilder() .add("message.proto", "" + "message Message {\n" + " optional int32 a = 1;\n" + " optional int32 b = 2 [default = 5];\n" + " optional bool c = 3 [default = true];\n" + " optional string d = 4 [default = \"foo\"];\n" + " optional Roshambo e = 5 [default = PAPER];\n" + " enum Roshambo {\n" + " ROCK = 0;\n" + " SCISSORS = 1;\n" + " PAPER = 2;\n" + " }\n" + "}\n") .schema(); MessageType message = (MessageType) schema.getType("Message"); assertThat(message.field("a").getDefault()).isNull(); assertThat(message.field("b").getDefault()).isEqualTo("5"); assertThat(message.field("c").getDefault()).isEqualTo("true"); assertThat(message.field("d").getDefault()).isEqualTo("foo"); assertThat(message.field("e").getDefault()).isEqualTo("PAPER"); }
private CodeBlock defaultValue(Field field) { Object defaultValue = field.getDefault(); if (defaultValue == null && isEnum(field.type())) { defaultValue = enumDefault(field.type()).name(); } if (field.type().isScalar() || defaultValue != null) { return fieldInitializer(field.type(), defaultValue); } throw new IllegalStateException("Field " + field + " cannot have default value"); }
@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(); } }
private CodeBlock defaultValue(Field field) { Object defaultValue = field.getDefault(); if (defaultValue == null && isEnum(field.type())) { defaultValue = enumDefault(field.type()).name(); } if (field.type().isScalar() || defaultValue != null) { return fieldInitializer(field.type(), defaultValue); } throw new IllegalStateException("Field " + field + " cannot have default value"); }