anton-vinogradov commented on code in PR #12677:
URL: https://github.com/apache/ignite/pull/12677#discussion_r2755102308
##########
modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IgniteDataTransferObjectProcessor.java:
##########
@@ -107,28 +112,27 @@ private void generateSingle(Element el) {
return;
TypeMirror dtoCls =
processingEnv.getElementUtils().getTypeElement(DTO_CLASS).asType();
- TypeMirror argAnnotation =
processingEnv.getElementUtils().getTypeElement(ARG_ANNOTATION).asType();
TypeElement clazz = (TypeElement)el;
// Generate code for inner classes.
clazz.getEnclosedElements().forEach(this::generateSingle);
+ if (unsupported.contains(clazz.getQualifiedName().toString()))
Review Comment:
WARN or ERROR required?
##########
modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IDTOSerializerGenerator.java:
##########
@@ -295,21 +320,50 @@ private List<String> fieldsSerdes(
List<VariableElement> flds,
Function<IgniteBiTuple<String, String>, String> lineProvider
) {
+ TypeMirror dtoCls =
env.getElementUtils().getTypeElement(DTO_CLASS).asType();
+
List<String> code = new ArrayList<>();
for (VariableElement fld : flds) {
TypeMirror type = fld.asType();
TypeMirror comp = null;
- IgniteBiTuple<String, String> serDes;
+ IgniteBiTuple<String, String> serDes = null;
- if (type.getKind() == TypeKind.ARRAY) {
+ if (env.getTypeUtils().isAssignable(type, dtoCls))
+ serDes = OBJECT_SERDES;
+ else if (type.getKind() == TypeKind.TYPEVAR)
+ serDes = F.t("out.writeObject(obj.${f});", "obj.${f} =
in.readObject();");
+ else if (type.getKind() == TypeKind.ARRAY) {
comp = ((ArrayType)type).getComponentType();
- serDes = enumType(env, comp) ? OBJ_ARRAY_SERDES :
ARRAY_TYPE_SERDES.get(className(comp));
+ serDes = ARRAY_TYPE_SERDES.get(className(comp));
+
+ if (serDes == null && enumType(env, comp))
+ serDes = OBJ_ARRAY_SERDES;
+ }
+ else {
Review Comment:
lets use elseif instead and check at final else that there is no enexpected
type.
##########
modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IgniteDataTransferObjectProcessor.java:
##########
@@ -107,28 +112,27 @@ private void generateSingle(Element el) {
return;
TypeMirror dtoCls =
processingEnv.getElementUtils().getTypeElement(DTO_CLASS).asType();
- TypeMirror argAnnotation =
processingEnv.getElementUtils().getTypeElement(ARG_ANNOTATION).asType();
TypeElement clazz = (TypeElement)el;
// Generate code for inner classes.
clazz.getEnclosedElements().forEach(this::generateSingle);
+ if (unsupported.contains(clazz.getQualifiedName().toString()))
+ return;
+
if (!processingEnv.getTypeUtils().isAssignable(clazz.asType(), dtoCls))
return;
if (clazz.getModifiers().contains(Modifier.ABSTRACT))
return;
- if (!clazz.getModifiers().contains(Modifier.PUBLIC))
+ if (clazz.getModifiers().contains(Modifier.PRIVATE) &&
clazz.getModifiers().contains(Modifier.PROTECTED))
Review Comment:
How about to use some annotation instead of "package field" mark?
##########
modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IgniteDataTransferObjectProcessor.java:
##########
@@ -62,23 +62,28 @@ public class IgniteDataTransferObjectProcessor extends
AbstractProcessor {
/** Package for serializers. */
private static final String FACTORY_PKG_NAME =
"org.apache.ignite.internal.codegen.idto";
- /** Base class that every dto must extend. */
- private static final String DTO_CLASS =
"org.apache.ignite.internal.dto.IgniteDataTransferObject";
-
- /**
- * Annotation used in management commands.
- * For now, we restrict set of generated serdes to all management commands
argument classes.
- * Because, they strictly follows Ignite codestyle convention.
- * Providing support of all other inheritor of {@code
IgniteDataTransferObject} is matter of following improvements.
- */
- private static final String ARG_ANNOTATION =
"org.apache.ignite.internal.management.api.Argument";
+ /** Base class that every dto must extends. */
+ static final String DTO_CLASS =
"org.apache.ignite.internal.dto.IgniteDataTransferObject";
/** Factory class name. */
public static final String FACTORY_CLASS = "IDTOSerializerFactory";
/** Generated classes. */
private final Map<TypeElement, String> genSerDes = new HashMap<>();
+ /** Currently unsupported classes. */
+ private final Set<String> unsupported = Set.of(
Review Comment:
may be static
##########
modules/codegen2/src/main/java/org/apache/ignite/internal/idto/IDTOSerializerGenerator.java:
##########
@@ -85,22 +98,34 @@ public class IDTOSerializerGenerator {
TYPE_SERDES.put(float.class.getName(),
F.t("out.writeFloat(obj.${f});", "obj.${f} = in.readFloat();"));
TYPE_SERDES.put(double.class.getName(),
F.t("out.writeDouble(obj.${f});", "obj.${f} = in.readDouble();"));
- IgniteBiTuple<String, String> objSerdes =
F.t("out.writeObject(obj.${f});", "obj.${f} = (${c})in.readObject();");
-
- TYPE_SERDES.put(Boolean.class.getName(), objSerdes);
- TYPE_SERDES.put(Byte.class.getName(), objSerdes);
- TYPE_SERDES.put(Short.class.getName(), objSerdes);
- TYPE_SERDES.put(Integer.class.getName(), objSerdes);
- TYPE_SERDES.put(Long.class.getName(), objSerdes);
- TYPE_SERDES.put(Float.class.getName(), objSerdes);
- TYPE_SERDES.put(Double.class.getName(), objSerdes);
+ TYPE_SERDES.put(Boolean.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Byte.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Short.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Integer.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Long.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Float.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Double.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Throwable.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Exception.class.getName(), OBJECT_SERDES);
+ TYPE_SERDES.put(Object.class.getName(), OBJECT_SERDES);
TYPE_SERDES.put(String.class.getName(), F.t("U.writeString(out,
obj.${f});", "obj.${f} = U.readString(in);"));
TYPE_SERDES.put(UUID.class.getName(), F.t("U.writeUuid(out,
obj.${f});", "obj.${f} = U.readUuid(in);"));
TYPE_SERDES.put("org.apache.ignite.lang.IgniteUuid",
F.t("U.writeIgniteUuid(out, obj.${f});", "obj.${f} = U.readIgniteUuid(in);"));
-
TYPE_SERDES.put("org.apache.ignite.internal.processors.cache.version.GridCacheVersion",
objSerdes);
-
+
TYPE_SERDES.put("org.apache.ignite.internal.processors.cache.version.GridCacheVersion",
OBJECT_SERDES);
+ TYPE_SERDES.put("org.apache.ignite.lang.IgniteProductVersion",
OBJECT_SERDES);
+ TYPE_SERDES.put("org.apache.ignite.internal.binary.BinaryMetadata",
OBJECT_SERDES);
+
TYPE_SERDES.put("org.apache.ignite.internal.management.cache.PartitionKey",
OBJECT_SERDES);
+
TYPE_SERDES.put("org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion",
OBJECT_SERDES);
+ TYPE_SERDES.put("org.apache.ignite.cache.CacheMode",
+ F.t("out.writeByte(CacheMode.toCode(obj.${f}));", "obj.${f} =
CacheMode.fromCode(in.readByte());"));
+
+ TYPE_SERDES.put(TreeMap.class.getName(), F.t("U.writeMap(out,
obj.${f});", "obj.${f} = U.readTreeMap(in);"));
Review Comment:
How about to write classname or smth similar instead of changing the type of
the field to TreeMap?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]