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;