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);
     }