IGNITE-15433 Improve network annotation processor error messages (#310)
diff --git a/modules/network-annotation-processor/src/integrationTest/java/org/apache/ignite/internal/network/processor/ITTransferableObjectProcessorTest.java b/modules/network-annotation-processor/src/integrationTest/java/org/apache/ignite/internal/network/processor/ITTransferableObjectProcessorTest.java
index 0a23e0b..54f37ad 100644
--- a/modules/network-annotation-processor/src/integrationTest/java/org/apache/ignite/internal/network/processor/ITTransferableObjectProcessorTest.java
+++ b/modules/network-annotation-processor/src/integrationTest/java/org/apache/ignite/internal/network/processor/ITTransferableObjectProcessorTest.java
@@ -172,7 +172,7 @@
Compilation compilation = compiler.compile(sources("AllTypesMessage"));
assertThat(compilation).hadErrorContaining(
- "Invalid number of message groups (classes annotated with @MessageGroup): 0"
+ "No message groups (classes annotated with @MessageGroup) found"
);
}
@@ -182,11 +182,14 @@
@Test
void testMultipleMessageGroups() {
Compilation compilation = compiler.compile(
- sources("AllTypesMessage", "ITTestMessageGroup", "SecondGroup")
+ sources("AllTypesMessage", "ConflictingTypeMessage", "ITTestMessageGroup", "SecondGroup")
);
assertThat(compilation).hadErrorContaining(
- "Invalid number of message groups (classes annotated with @MessageGroup): 2"
+ "Invalid number of message groups (classes annotated with @MessageGroup), " +
+ "only one can be present in a compilation unit: " +
+ "[org.apache.ignite.internal.network.processor.ITTestMessageGroup, " +
+ "org.apache.ignite.internal.network.processor.SecondGroup]"
);
}
diff --git a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessor.java b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessor.java
index ca4355d..77c5c50 100644
--- a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessor.java
+++ b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessor.java
@@ -75,10 +75,10 @@
if (messages.isEmpty())
return true;
- validateMessages(messages);
-
MessageGroupWrapper messageGroup = getMessageGroup(roundEnv);
+ validateMessages(messages);
+
generateMessageImpls(messages, messageGroup);
generateSerializers(messages, messageGroup);
@@ -228,16 +228,25 @@
* annotation.
*/
private static MessageGroupWrapper getMessageGroup(RoundEnvironment roundEnv) {
- Set<? extends Element> messagemessageGroupSet = roundEnv.getElementsAnnotatedWith(MessageGroup.class);
+ Set<? extends Element> messageGroupSet = roundEnv.getElementsAnnotatedWith(MessageGroup.class);
- if (messagemessageGroupSet.size() != 1) {
- var errorMsg = "Invalid number of message groups (classes annotated with @MessageGroup): " +
- messagemessageGroupSet.size();
+ if (messageGroupSet.isEmpty())
+ throw new ProcessingException("No message groups (classes annotated with @MessageGroup) found");
- throw new ProcessingException(errorMsg);
+ if (messageGroupSet.size() != 1) {
+ List<String> sortedNames = messageGroupSet.stream()
+ .map(Object::toString)
+ .sorted()
+ .collect(Collectors.toList());
+
+ throw new ProcessingException(
+ "Invalid number of message groups (classes annotated with @MessageGroup), " +
+ "only one can be present in a compilation unit: " + sortedNames
+ );
}
- Element singleElement = messagemessageGroupSet.iterator().next();
+ Element singleElement = messageGroupSet.iterator().next();
+
return new MessageGroupWrapper((TypeElement) singleElement);
}