static ImmutableList<FieldElement> toElements(ImmutableList<Field> fields) { ImmutableList.Builder<FieldElement> elements = new ImmutableList.Builder<>(); for (Field field : fields) { elements.add(FieldElement.builder(field.location) .label(field.label) .name(field.name) .documentation(field.documentation) .tag(field.tag) .defaultValue(field.defaultValue) .options(field.options.toElements()) .type(field.elementType) .build()); } return elements.build(); }
static ImmutableList<Field> fromElements(String packageName, ImmutableList<FieldElement> fieldElements, boolean extension) { ImmutableList.Builder<Field> fields = ImmutableList.builder(); for (FieldElement field : fieldElements) { fields.add(new Field(packageName, field.location(), field.label(), field.name(), field.documentation(), field.tag(), field.defaultValue(), field.type(), new Options(Options.FIELD_OPTIONS, field.options()), extension)); } return fields.build(); }
public final String toSchema() { StringBuilder builder = new StringBuilder(); appendDocumentation(builder, documentation()); if (label() != null) { builder.append(label().name().toLowerCase(Locale.US)).append(' '); } builder.append(type()) .append(' ') .append(name()) .append(" = ") .append(tag()); if (!options().isEmpty()) { builder.append(" "); Util.appendOptions(builder, options()); } return builder.append(";\n").toString(); }
@Test public void addMultipleOptions() { OptionElement kitKat = OptionElement.create("kit", Kind.STRING, "kat"); OptionElement fooBar = OptionElement.create("foo", Kind.STRING, "bar"); FieldElement field = FieldElement.builder(location) .label(REQUIRED) .type("string") .name("name") .tag(1) .options(ImmutableList.of(kitKat, fooBar)) .build(); assertThat(field.options()).hasSize(2); } }
public final String toSchema() { StringBuilder builder = new StringBuilder(); appendDocumentation(builder, documentation()); builder.append("extend ") .append(name()) .append(" {"); if (!fields().isEmpty()) { builder.append('\n'); for (FieldElement field : fields()) { appendIndented(builder, field.toSchema()); } } return builder.append("}\n").toString(); }
@Test public void trailingCommentNotAssignedToFollowingField() { String proto = "" + "message Test {\n" + " optional string first_name = 1; // Testing!\n" + " optional string last_name = 2;\n" + "}"; ProtoFileElement parsed = ProtoParser.parse(location, proto); MessageElement message = (MessageElement) parsed.types().get(0); FieldElement field1 = message.fields().get(0); assertThat(field1.documentation()).isEqualTo("Testing!"); FieldElement field2 = message.fields().get(1); assertThat(field2.documentation()).isEqualTo(""); }
public final String toSchema() { StringBuilder builder = new StringBuilder(); appendDocumentation(builder, documentation()); if (label() != null) { builder.append(label().name().toLowerCase(Locale.US)).append(' '); } builder.append(type()) .append(' ') .append(name()) .append(" = ") .append(tag()); if (!options().isEmpty()) { builder.append(" [\n"); for (OptionElement option : options()) { appendIndented(builder, option.toSchema()); } builder.append(']'); } return builder.append(";\n").toString(); }
@Test public void field() { FieldElement field = FieldElement.builder(location) .label(OPTIONAL) .type("CType") .name("ctype") .tag(1) .options(ImmutableList.of( OptionElement.create("default", Kind.ENUM, "TEST"), OptionElement.create("deprecated", Kind.BOOLEAN, "true"))) .build(); assertThat(field.options()).containsOnly( // OptionElement.create("default", Kind.ENUM, "TEST"), // OptionElement.create("deprecated", Kind.BOOLEAN, "true")); }
public final String toSchema() { StringBuilder builder = new StringBuilder(); appendDocumentation(builder, documentation()); if (label() != null) { builder.append(label().name().toLowerCase(Locale.US)).append(' '); } builder.append("group ") .append(name()) .append(" = ") .append(tag()) .append(" {"); if (!fields().isEmpty()) { builder.append('\n'); for (FieldElement field : fields()) { appendIndented(builder, field.toSchema()); } } return builder.append("}\n").toString(); }
@Test public void messageFieldLeadingAndTrailingCommentAreCombined() { String proto = "" + "message Test {\n" + " // Test all...\n" + " optional string name = 1; // ...the things!\n" + "}"; ProtoFileElement parsed = ProtoParser.parse(location, proto); MessageElement message = (MessageElement) parsed.types().get(0); FieldElement field = message.fields().get(0); assertThat(field.documentation()).isEqualTo("Test all...\n...the things!"); }
Builder(FieldElement source) { this.location = source.location(); this.label = source.label(); this.type = source.type(); this.name = source.name(); this.defaultValue = source.defaultValue(); this.tag = source.tag(); this.documentation = source.documentation(); this.options = source.options(); } @Override
public final String toSchema() { StringBuilder builder = new StringBuilder(); appendDocumentation(builder, documentation()); if (label() != null) { builder.append(label().name().toLowerCase(Locale.US)).append(' '); } builder.append(type()) .append(' ') .append(name()) .append(" = ") .append(tag()); if (!options().isEmpty()) { builder.append(" [\n"); for (OptionElement option : options()) { appendIndented(builder, option.toSchema()); } builder.append(']'); } return builder.append(";\n").toString(); }
/** Reads an field declaration and returns it. */ private FieldElement readField( Location location, String documentation, @Nullable Field.Label label, String type) { String name = reader.readName(); reader.require('='); int tag = reader.readInt(); FieldElement.Builder builder = FieldElement.builder(location) .label(label) .type(type) .name(name) .tag(tag); List<OptionElement> options = new OptionReader(reader).readOptions(); reader.require(';'); options = new ArrayList<>(options); // Mutable copy for extractDefault. String defaultValue = stripDefault(options); documentation = reader.tryAppendTrailingDocumentation(documentation); return builder.documentation(documentation) .defaultValue(defaultValue) .options(ImmutableList.copyOf(options)) .build(); }
+ " ];\n" + "}"; FieldElement field = FieldElement.builder(location.at(2, 5)) .label(OPTIONAL) .type("field.type") ImmutableList.of("string1", "string2"), true))) .build(); assertThat(field.options()).containsOnly( // OptionElement.create("option_map", Kind.MAP, ImmutableMap.of("nested_map", ImmutableMap.of("key", "value", "key2", ImmutableList.of("value2a", "value2b"))), true),
public final String toSchema() { StringBuilder builder = new StringBuilder(); appendDocumentation(builder, documentation()); builder.append("oneof ").append(name()).append(" {"); if (!fields().isEmpty()) { builder.append('\n'); for (FieldElement field : fields()) { appendIndented(builder, field.toSchema()); } } if (!groups().isEmpty()) { builder.append('\n'); for (GroupElement group : groups()) { appendIndented(builder, group.toSchema()); } } return builder.append("}\n").toString(); }
@Test public void messageFieldTrailingComment() { // Trailing message field comment. String proto = "" + "message Test {\n" + " optional string name = 1; // Test all the things!\n" + "}"; ProtoFileElement parsed = ProtoParser.parse(location, proto); MessageElement message = (MessageElement) parsed.types().get(0); FieldElement field = message.fields().get(0); assertThat(field.documentation()).isEqualTo("Test all the things!"); }
static ImmutableList<Field> fromElements(String packageName, ImmutableList<FieldElement> fieldElements, boolean extension) { ImmutableList.Builder<Field> fields = ImmutableList.builder(); for (FieldElement field : fieldElements) { fields.add(new Field(packageName, field.location(), field.label(), field.name(), field.documentation(), field.tag(), field.defaultValue(), field.type(), new Options(Options.FIELD_OPTIONS, field.options()), extension)); } return fields.build(); }
@Test public void simpleToSchema() { ExtendElement extend = ExtendElement.builder(location) .name("Name") .fields(ImmutableList.of( FieldElement.builder(location) .label(REQUIRED) .type("string") .name("name") .tag(1) .build())) .build(); String expected = "" + "extend Name {\n" + " required string name = 1;\n" + "}\n"; assertThat(extend.toSchema()).isEqualTo(expected); }