use of com.squareup.wire.schema.internal.parser.TypeElement in project wire by square.
the class ProtoFileTest method roundTripToElement.
@Test
public void roundTripToElement() {
TypeElement element1 = MessageElement.builder(location.at(11, 1)).name("Message1").documentation("Some comments about Message1").build();
TypeElement element2 = MessageElement.builder(location.at(12, 1)).name("Message2").fields(ImmutableList.<FieldElement>of(FieldElement.builder(location.at(13, 3)).type("string").name("field").tag(1).build())).build();
ExtendElement extend1 = ExtendElement.builder(location.at(16, 1)).name("Extend1").build();
ExtendElement extend2 = ExtendElement.builder(location.at(17, 1)).name("Extend2").build();
OptionElement option1 = OptionElement.create("kit", OptionElement.Kind.STRING, "kat");
OptionElement option2 = OptionElement.create("foo", OptionElement.Kind.STRING, "bar");
ServiceElement service1 = ServiceElement.builder(location.at(19, 1)).name("Service1").rpcs(ImmutableList.<RpcElement>of(RpcElement.builder(location.at(20, 3)).name("MethodA").requestType("Message2").responseType("Message1").options(ImmutableList.<OptionElement>of(OptionElement.create("methodoption", OptionElement.Kind.NUMBER, 1))).build())).build();
ServiceElement service2 = ServiceElement.builder(location.at(24, 1)).name("Service2").build();
ProtoFileElement fileElement = ProtoFileElement.builder(location).packageName("example.simple").imports(ImmutableList.of("example.thing")).publicImports(ImmutableList.of("example.other")).types(ImmutableList.of(element1, element2)).services(ImmutableList.of(service1, service2)).extendDeclarations(ImmutableList.of(extend1, extend2)).options(ImmutableList.of(option1, option2)).build();
ProtoFile file = ProtoFile.get(fileElement);
String expected = "" + "// file.proto\n" + "package example.simple;\n" + "\n" + "import \"example.thing\";\n" + "import public \"example.other\";\n" + "\n" + "option kit = \"kat\";\n" + "option foo = \"bar\";\n" + "\n" + "// Some comments about Message1\n" + "message Message1 {}\n" + "message Message2 {\n" + " string field = 1;\n" + "}\n" + "\n" + "extend Extend1 {}\n" + "extend Extend2 {}\n" + "\n" + "service Service1 {\n" + " rpc MethodA (Message2) returns (Message1) {\n" + " option methodoption = 1;\n" + " };\n" + "}\n" + "service Service2 {}\n";
assertThat(file.toElement().toSchema()).isEqualTo(expected);
assertThat(file.toElement()).isEqualToComparingFieldByField(fileElement);
}
use of com.squareup.wire.schema.internal.parser.TypeElement in project wire by square.
the class MessageType method fromElement.
static MessageType fromElement(String packageName, ProtoType protoType, MessageElement messageElement) {
if (!messageElement.groups().isEmpty()) {
throw new IllegalStateException("'group' is not supported");
}
ImmutableList<Field> declaredFields = Field.fromElements(packageName, messageElement.fields(), false);
// Extension fields be populated during linking.
List<Field> extensionFields = new ArrayList<>();
ImmutableList<OneOf> oneOfs = OneOf.fromElements(packageName, messageElement.oneOfs(), false);
ImmutableList.Builder<Type> nestedTypes = ImmutableList.builder();
for (TypeElement nestedType : messageElement.nestedTypes()) {
nestedTypes.add(Type.get(packageName, protoType.nestedType(nestedType.name()), nestedType));
}
ImmutableList<Extensions> extensionsList = Extensions.fromElements(messageElement.extensions());
ImmutableList<Reserved> reserveds = Reserved.fromElements(messageElement.reserveds());
Options options = new Options(Options.MESSAGE_OPTIONS, messageElement.options());
return new MessageType(protoType, messageElement.location(), messageElement.documentation(), messageElement.name(), declaredFields, extensionFields, oneOfs, nestedTypes.build(), extensionsList, reserveds, options);
}
use of com.squareup.wire.schema.internal.parser.TypeElement in project wire by square.
the class Type method fromElements.
static ImmutableList<Type> fromElements(String packageName, ImmutableList<TypeElement> elements) {
ImmutableList.Builder<Type> types = new ImmutableList.Builder<>();
for (TypeElement element : elements) {
ProtoType protoType = ProtoType.get(packageName, element.name());
types.add(Type.get(packageName, protoType, element));
}
return types.build();
}
Aggregations