This is an automated email from the ASF dual-hosted git repository.

alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new e7bda4f21d6 IGNITE-26526 Fix message serializer code generation 
problems - Fixes #12374.
e7bda4f21d6 is described below

commit e7bda4f21d64b15395c5514f06960072ecf46a66
Author: Aleksey Plekhanov <[email protected]>
AuthorDate: Fri Sep 26 21:22:12 2025 +0300

    IGNITE-26526 Fix message serializer code generation problems - Fixes #12374.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
---
 .../internal/MessageSerializerGenerator.java       | 45 ++++++++++++++--------
 .../java/org/apache/ignite/internal/Order.java     |  2 +-
 .../resources/codegen/ChildMessageSerializer.java  |  8 ++--
 .../codegen/TestCollectionsMessageSerializer.java  |  9 ++---
 .../codegen/TestMapMessageSerializer.java          |  9 ++---
 .../resources/codegen/TestMessageSerializer.java   |  9 ++---
 6 files changed, 42 insertions(+), 40 deletions(-)

diff --git 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
index f34346da3b0..3ebf72412d0 100644
--- 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
+++ 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/MessageSerializerGenerator.java
@@ -28,13 +28,14 @@ import java.io.Writer;
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.UUID;
 import javax.annotation.processing.FilerException;
 import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
 import javax.lang.model.element.QualifiedNameable;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.element.VariableElement;
@@ -48,7 +49,6 @@ import javax.tools.Diagnostic;
 import javax.tools.FileObject;
 import javax.tools.JavaFileObject;
 import javax.tools.StandardLocation;
-
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.jetbrains.annotations.Nullable;
@@ -83,13 +83,13 @@ class MessageSerializerGenerator {
     private static final String METHOD_JAVADOC = "/** */";
 
     /** Collection of lines for {@code writeTo} method. */
-    private final Collection<String> write = new ArrayList<>();
+    private final List<String> write = new ArrayList<>();
 
     /** Collection of lines for {@code readFrom} method. */
-    private final Collection<String> read = new ArrayList<>();
+    private final List<String> read = new ArrayList<>();
 
     /** Collection of message-specific imports. */
-    private final Set<String> imports = new HashSet<>();
+    private final Set<String> imports = new TreeSet<>();
 
     /** */
     private final ProcessingEnvironment env;
@@ -155,6 +155,8 @@ class MessageSerializerGenerator {
 
             writer.write("}");
 
+            writer.write(NL);
+
             return writer.toString();
         }
     }
@@ -404,7 +406,7 @@ class MessageSerializerGenerator {
      * </pre>
      */
     private void returnFalseIfWriteFailed(Collection<String> code, String 
accessor, @Nullable String... args) {
-        String argsStr = String.join(",", args);
+        String argsStr = String.join(", ", args);
 
         code.add(line("if (!%s(msg.%s))", accessor, argsStr));
 
@@ -460,12 +462,20 @@ class MessageSerializerGenerator {
             }
 
             if (componentType.getKind() == TypeKind.DECLARED) {
-                String cls = 
((DeclaredType)arrType.getComponentType()).asElement().getSimpleName().toString();
+                Element componentElement = 
((DeclaredType)componentType).asElement();
+
+                String cls = componentElement.getSimpleName().toString();
 
                 returnFalseIfReadFailed(name, "reader.readObjectArray",
                     "MessageCollectionItemType." + 
messageCollectionItemType(componentType),
                     cls + ".class");
 
+                if 
(!"java.lang".equals(env.getElementUtils().getPackageOf(componentElement).getQualifiedName().toString()))
 {
+                    String importCls = 
((QualifiedNameable)componentElement).getQualifiedName().toString();
+
+                    imports.add(importCls);
+                }
+
                 return;
             }
         }
@@ -583,10 +593,6 @@ class MessageSerializerGenerator {
         if (!assignableFrom(type, type(MESSAGE_INTERFACE)))
             throw new Exception("Do not support type: " + type);
 
-        String cls = 
((QualifiedNameable)env.getTypeUtils().asElement(type)).getQualifiedName().toString();
-
-        imports.add(cls);
-
         return "MSG";
     }
 
@@ -635,7 +641,11 @@ class MessageSerializerGenerator {
     }
 
     /** */
-    private void finish(Collection<String> code) {
+    private void finish(List<String> code) {
+        // Remove the last empty line for the last "case".
+        String removed = code.remove(code.size() - 1);
+        assert EMPTY.equals(removed) : removed;
+
         code.add(line("}"));
         code.add(EMPTY);
 
@@ -673,11 +683,12 @@ class MessageSerializerGenerator {
 
         writer.write(NL);
         writer.write("package " + pkgName + ";" + NL + NL);
-        writer.write("import java.nio.ByteBuffer;" + NL);
-        writer.write("import 
org.apache.ignite.plugin.extensions.communication.Message;" + NL);
-        writer.write("import 
org.apache.ignite.plugin.extensions.communication.MessageSerializer;" + NL);
-        writer.write("import 
org.apache.ignite.plugin.extensions.communication.MessageWriter;" + NL);
-        writer.write("import 
org.apache.ignite.plugin.extensions.communication.MessageReader;" + NL);
+
+        imports.add("java.nio.ByteBuffer");
+        
imports.add("org.apache.ignite.plugin.extensions.communication.Message");
+        
imports.add("org.apache.ignite.plugin.extensions.communication.MessageSerializer");
+        
imports.add("org.apache.ignite.plugin.extensions.communication.MessageWriter");
+        
imports.add("org.apache.ignite.plugin.extensions.communication.MessageReader");
 
         for (String i: imports)
             writer.write("import " + i + ";" + NL);
diff --git 
a/modules/codegen2/src/main/java/org/apache/ignite/internal/Order.java 
b/modules/codegen2/src/main/java/org/apache/ignite/internal/Order.java
index d1f50d0db87..d24214baa88 100644
--- a/modules/codegen2/src/main/java/org/apache/ignite/internal/Order.java
+++ b/modules/codegen2/src/main/java/org/apache/ignite/internal/Order.java
@@ -34,7 +34,7 @@ import java.lang.annotation.Target;
  * should be performed strictly through corresponding getter and setter methods
  * following the naming convention: {@code fieldName()} for getter and {@code 
fieldName(Type)} for setter.
  */
-@Retention(RetentionPolicy.SOURCE)
+@Retention(RetentionPolicy.CLASS)
 @Target(ElementType.FIELD)
 public @interface Order {
     /** @return Order of the field. */
diff --git 
a/modules/core/src/test/resources/codegen/ChildMessageSerializer.java 
b/modules/core/src/test/resources/codegen/ChildMessageSerializer.java
index 865bffc18c1..9a4cc2f17ee 100644
--- a/modules/core/src/test/resources/codegen/ChildMessageSerializer.java
+++ b/modules/core/src/test/resources/codegen/ChildMessageSerializer.java
@@ -18,11 +18,11 @@
 package org.apache.ignite.internal.codegen;
 
 import java.nio.ByteBuffer;
+import org.apache.ignite.internal.ChildMessage;
 import org.apache.ignite.plugin.extensions.communication.Message;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
 import org.apache.ignite.plugin.extensions.communication.MessageSerializer;
 import org.apache.ignite.plugin.extensions.communication.MessageWriter;
-import org.apache.ignite.plugin.extensions.communication.MessageReader;
-import org.apache.ignite.internal.ChildMessage;
 
 /**
  * This class is generated automatically.
@@ -55,7 +55,6 @@ public class ChildMessageSerializer implements 
MessageSerializer {
                     return false;
 
                 writer.incrementState();
-
         }
 
         return true;
@@ -83,9 +82,8 @@ public class ChildMessageSerializer implements 
MessageSerializer {
                     return false;
 
                 reader.incrementState();
-
         }
 
         return true;
     }
-}
\ No newline at end of file
+}
diff --git 
a/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java 
b/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java
index ad88dec2e06..e2e331827c8 100644
--- 
a/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java
+++ 
b/modules/core/src/test/resources/codegen/TestCollectionsMessageSerializer.java
@@ -18,13 +18,12 @@
 package org.apache.ignite.internal.codegen;
 
 import java.nio.ByteBuffer;
+import org.apache.ignite.internal.TestCollectionsMessage;
 import org.apache.ignite.plugin.extensions.communication.Message;
+import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
 import org.apache.ignite.plugin.extensions.communication.MessageSerializer;
 import org.apache.ignite.plugin.extensions.communication.MessageWriter;
-import org.apache.ignite.plugin.extensions.communication.MessageReader;
-import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
-import org.apache.ignite.internal.TestCollectionsMessage;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 
 /**
  * This class is generated automatically.
@@ -183,7 +182,6 @@ public class TestCollectionsMessageSerializer implements 
MessageSerializer {
                     return false;
 
                 writer.incrementState();
-
         }
 
         return true;
@@ -379,7 +377,6 @@ public class TestCollectionsMessageSerializer implements 
MessageSerializer {
                     return false;
 
                 reader.incrementState();
-
         }
 
         return true;
diff --git 
a/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java 
b/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
index b88f75d364f..34c830bae73 100644
--- a/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
+++ b/modules/core/src/test/resources/codegen/TestMapMessageSerializer.java
@@ -18,13 +18,12 @@
 package org.apache.ignite.internal.codegen;
 
 import java.nio.ByteBuffer;
+import org.apache.ignite.internal.TestMapMessage;
 import org.apache.ignite.plugin.extensions.communication.Message;
+import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
 import org.apache.ignite.plugin.extensions.communication.MessageSerializer;
 import org.apache.ignite.plugin.extensions.communication.MessageWriter;
-import org.apache.ignite.plugin.extensions.communication.MessageReader;
-import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
-import org.apache.ignite.internal.TestMapMessage;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 
 /**
  * This class is generated automatically.
@@ -189,7 +188,6 @@ public class TestMapMessageSerializer implements 
MessageSerializer {
                     return false;
 
                 writer.incrementState();
-
         }
 
         return true;
@@ -393,7 +391,6 @@ public class TestMapMessageSerializer implements 
MessageSerializer {
                     return false;
 
                 reader.incrementState();
-
         }
 
         return true;
diff --git a/modules/core/src/test/resources/codegen/TestMessageSerializer.java 
b/modules/core/src/test/resources/codegen/TestMessageSerializer.java
index b05b4a519c9..a955fe2dc4f 100644
--- a/modules/core/src/test/resources/codegen/TestMessageSerializer.java
+++ b/modules/core/src/test/resources/codegen/TestMessageSerializer.java
@@ -18,13 +18,13 @@
 package org.apache.ignite.internal.codegen;
 
 import java.nio.ByteBuffer;
+import org.apache.ignite.internal.TestMessage;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.plugin.extensions.communication.Message;
+import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
+import org.apache.ignite.plugin.extensions.communication.MessageReader;
 import org.apache.ignite.plugin.extensions.communication.MessageSerializer;
 import org.apache.ignite.plugin.extensions.communication.MessageWriter;
-import org.apache.ignite.plugin.extensions.communication.MessageReader;
-import 
org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
-import org.apache.ignite.internal.TestMessage;
 
 /**
  * This class is generated automatically.
@@ -135,7 +135,6 @@ public class TestMessageSerializer implements 
MessageSerializer {
                     return false;
 
                 writer.incrementState();
-
         }
 
         return true;

Reply via email to