use of org.infinispan.protostream.descriptors.FileDescriptor in project infinispan by infinispan.
the class ProtobufMetadataManagerInterceptor method computeErrorUpdatesAfterRemove.
private List<KeyValuePair<String, String>> computeErrorUpdatesAfterRemove(String key) {
// List of proto schemas and their errors
// Proto schemas with no errors have a null value
List<KeyValuePair<String, String>> errorUpdates = new ArrayList<>();
errorUpdates.add(KeyValuePair.of(key, null));
StringBuilder sb = new StringBuilder();
for (FileDescriptor fd : serializationContext.getFileDescriptors().values()) {
String fdName = fd.getName();
if (fd.isResolved()) {
errorUpdates.add(KeyValuePair.of(fdName, null));
} else {
if (sb.length() > 0) {
sb.append('\n');
}
sb.append(fdName);
errorUpdates.add(KeyValuePair.of(fdName, "One of the imported files is missing or has errors"));
}
}
errorUpdates.add(KeyValuePair.of("", sb.length() > 0 ? sb.toString() : null));
return errorUpdates;
}
use of org.infinispan.protostream.descriptors.FileDescriptor in project protostream by infinispan.
the class DescriptorsTest method testDocComment.
@Test
public void testDocComment() {
String file1 = "package test1;\n" + "/** \n" + " * some doc text \n" + " * some more doc text \n" + " **/\n\n" + "message X {\n" + " /**\n" + " * field doc text \n\n" + " */\n" + " optional int32 field1 = 1;\n" + "}\n";
FileDescriptorSource fileDescriptorSource = new FileDescriptorSource();
fileDescriptorSource.addProtoFile("file1.proto", file1);
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource);
assertEquals(1, descriptors.size());
assertTrue(descriptors.containsKey("file1.proto"));
Map<String, GenericDescriptor> types = descriptors.get("file1.proto").getTypes();
Descriptor typeX = (Descriptor) types.get("test1.X");
assertNotNull(typeX);
assertEquals(1, typeX.getFields().size());
FieldDescriptor field1 = typeX.getFields().get(0);
assertEquals("some doc text \n some more doc text", typeX.getDocumentation());
assertEquals("field doc text", field1.getDocumentation());
}
use of org.infinispan.protostream.descriptors.FileDescriptor in project protostream by infinispan.
the class DescriptorsTest method testArrayAnnotationAttributeNormalizing.
@Test
public void testArrayAnnotationAttributeNormalizing() {
Configuration config = Configuration.builder().annotationsConfig().annotation("Xyz", AnnotationElement.AnnotationTarget.MESSAGE).attribute("elem1").type(AnnotationElement.AttributeType.BOOLEAN).defaultValue(true).multiple(true).build();
String testProto = "/** @Xyz(elem1 = true) */\n" + "message M {\n" + " optional int32 field1 = 1; \n" + "}\n";
FileDescriptorSource fileDescriptorSource = FileDescriptorSource.fromString("test.proto", testProto);
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource, config);
FileDescriptor fileDescriptor = descriptors.get("test.proto");
List<Descriptor> messageTypes = fileDescriptor.getMessageTypes();
Descriptor messageType = messageTypes.get(0);
assertEquals("M", messageType.getFullName());
AnnotationElement.Annotation annotation = messageType.getAnnotations().get("Xyz");
assertNotNull(annotation);
AnnotationElement.Value attr = annotation.getAttributeValue("elem1");
assertTrue(attr instanceof AnnotationElement.Array);
assertTrue(attr.getValue() instanceof List);
List values = (List) attr.getValue();
assertEquals(1, values.size());
assertEquals(true, values.get(0));
}
use of org.infinispan.protostream.descriptors.FileDescriptor in project protostream by infinispan.
the class DescriptorsTest method testRepeatedAnnotation.
@Test
public void testRepeatedAnnotation() {
Configuration config = Configuration.builder().annotationsConfig().annotation("Field", AnnotationElement.AnnotationTarget.FIELD).repeatable("Fields").attribute(AnnotationElement.Annotation.VALUE_DEFAULT_ATTRIBUTE).type(AnnotationElement.AttributeType.BOOLEAN).defaultValue(true).build();
String testProto = "message M {\n" + " /** @Field @Field */\n" + " optional int32 field1 = 1; \n" + "}";
FileDescriptorSource fileDescriptorSource = FileDescriptorSource.fromString("test.proto", testProto);
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource, config);
Map<String, AnnotationElement.Annotation> annotations = descriptors.get("test.proto").getMessageTypes().get(0).getFields().get(0).getAnnotations();
assertFalse(annotations.containsKey("Field"));
assertTrue(annotations.containsKey("Fields"));
List<AnnotationElement.Annotation> innerAnnotations = (List<AnnotationElement.Annotation>) annotations.get("Fields").getDefaultAttributeValue().getValue();
assertEquals(2, innerAnnotations.size());
}
use of org.infinispan.protostream.descriptors.FileDescriptor in project protostream by infinispan.
the class DescriptorsTest method testDuplicateUndefinedAnnotation.
@Test
public void testDuplicateUndefinedAnnotation() {
Configuration config = Configuration.builder().annotationsConfig().annotation("Field", AnnotationElement.AnnotationTarget.FIELD).attribute(AnnotationElement.Annotation.VALUE_DEFAULT_ATTRIBUTE).type(AnnotationElement.AttributeType.BOOLEAN).defaultValue(true).build();
String testProto = "message M {\n" + " /** @SomeAnnotation @SomeAnnotation @Field */\n" + " optional int32 field1 = 1; \n" + "}";
FileDescriptorSource fileDescriptorSource = FileDescriptorSource.fromString("test.proto", testProto);
Map<String, FileDescriptor> descriptors = parseAndResolve(fileDescriptorSource, config);
// todo [anistor] The processing of annotations is waaay too lazy
AnnotationElement.Annotation someAnnotation = descriptors.get("test.proto").getMessageTypes().get(0).getFields().get(0).getAnnotations().get("SomeAnnotation");
// 'SomeAnnotation' annotation is not defined, but we accept it silently
assertNull(someAnnotation);
AnnotationElement.Annotation fieldAnnotation = descriptors.get("test.proto").getMessageTypes().get(0).getFields().get(0).getAnnotations().get("Field");
assertNotNull(fieldAnnotation);
assertEquals("Field", fieldAnnotation.getName());
}
Aggregations