From 08d8a44f0e5f61118fd849010f5e84f03bfc4856 Mon Sep 17 00:00:00 2001 From: Tristan Tarrant Date: Mon, 31 Jan 2022 13:29:03 +0100 Subject: [PATCH] IPROTO-227 Better errors --- .../annotations/impl/ProtoEnumTypeMetadata.java | 6 ++++-- .../annotations/impl/ProtoMessageTypeMetadata.java | 12 ++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoEnumTypeMetadata.java b/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoEnumTypeMetadata.java index 7eb975c14..dea6ebd57 100644 --- a/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoEnumTypeMetadata.java +++ b/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoEnumTypeMetadata.java @@ -87,14 +87,16 @@ public void scanMemberAnnotations() { } int number = getNumber(annotation, ec); if (membersByNumber.containsKey(number)) { - throw new ProtoSchemaBuilderException("Found duplicate definition of Protobuf enum tag " + number + " on enum constant: " + getAnnotatedClassName() + '.' + ec.getName()); + throw new ProtoSchemaBuilderException("Found duplicate definition of Protobuf enum tag " + number + " on enum constant: " + getAnnotatedClassName() + '.' + ec.getName() + + " clashes with " + membersByNumber.get(number).getJavaEnumName()); } String name = annotation.name(); if (name.isEmpty()) { name = ec.getName(); } if (membersByName.containsKey(name)) { - throw new ProtoSchemaBuilderException("Found duplicate definition of Protobuf enum constant " + name + " on enum constant: " + getAnnotatedClassName() + '.' + ec.getName()); + throw new ProtoSchemaBuilderException("Found duplicate definition of Protobuf enum constant " + name + " on enum constant: " + getAnnotatedClassName() + '.' + ec.getName() + + " clashes with " + membersByName.get(name).getJavaEnumName()); } ProtoEnumValueMetadata pevm = new ProtoEnumValueMetadata(number, name, ec.getOrdinal(), getJavaClassName() + '.' + ec.getName(), ec.getProtoDocs()); diff --git a/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoMessageTypeMetadata.java b/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoMessageTypeMetadata.java index 9f93da9d4..f583b6988 100644 --- a/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoMessageTypeMetadata.java +++ b/core/src/main/java/org/infinispan/protostream/annotations/impl/ProtoMessageTypeMetadata.java @@ -357,26 +357,26 @@ private void discoverFields(XClass clazz, Set examinedClasses) { for (XField field : clazz.getDeclaredFields()) { if (field.getAnnotation(ProtoUnknownFieldSet.class) != null) { if (isAdapter) { - throw new ProtoSchemaBuilderException("No ProtoStream annotations should be present on fields when @ProtoAdapter is present on a class : " + field); + throw new ProtoSchemaBuilderException("No ProtoStream annotations should be present on fields when @ProtoAdapter is present on a class : " + clazz.getCanonicalName() + '.' + field); } if (unknownFieldSetField != null || unknownFieldSetGetter != null || unknownFieldSetSetter != null) { - throw new ProtoSchemaBuilderException("The @ProtoUnknownFieldSet annotation should not occur more than once in a class and its superclasses and superinterfaces : " + field); + throw new ProtoSchemaBuilderException("The @ProtoUnknownFieldSet annotation should not occur more than once in a class and its superclasses and superinterfaces : " + clazz.getCanonicalName() + '.' + field); } unknownFieldSetField = field; } else { ProtoField annotation = field.getAnnotation(ProtoField.class); if (annotation != null) { if (isAdapter) { - throw new ProtoSchemaBuilderException("No ProtoStream annotations should be present on fields when @ProtoAdapter is present on a class : " + field); + throw new ProtoSchemaBuilderException("No ProtoStream annotations should be present on fields when @ProtoAdapter is present on a class : " + clazz.getCanonicalName() + '.' + field); } if (field.isStatic()) { - throw new ProtoSchemaBuilderException("Static fields cannot be @ProtoField annotated: " + field); + throw new ProtoSchemaBuilderException("Static fields cannot be @ProtoField annotated: " + clazz.getCanonicalName() + '.' + field); } if (factory == null && field.isFinal()) { //todo [anistor] maybe allow this - throw new ProtoSchemaBuilderException("Final fields cannot be @ProtoField annotated: " + field); + throw new ProtoSchemaBuilderException("Final fields cannot be @ProtoField annotated: " + clazz.getCanonicalName() + '.' + field); } if (field.isPrivate()) { - throw new ProtoSchemaBuilderException("Private fields cannot be @ProtoField annotated: " + field); + throw new ProtoSchemaBuilderException("Private fields cannot be @ProtoField annotated: " + clazz.getCanonicalName() + '.' + field); } int number = getNumber(annotation, field); String fieldName = annotation.name();