You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sd...@apache.org on 2022/03/03 15:46:24 UTC

[ignite-3] 02/07: .

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

sdanilov pushed a commit to branch ignite-16393
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 581850948d57286e7d5bb363a0063bd8afe876e7
Author: Semyon Danilov <sa...@yandex.ru>
AuthorDate: Thu Mar 3 11:53:47 2022 +0300

    .
---
 .../processor/messages/MessageImplGenerator.java   | 76 +++++++++++++++-------
 .../serialization/BaseMethodNameResolver.java      |  6 +-
 2 files changed, 56 insertions(+), 26 deletions(-)

diff --git a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java
index 835894b..95f0ba2 100644
--- a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java
+++ b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/messages/MessageImplGenerator.java
@@ -28,7 +28,7 @@ import com.squareup.javapoet.TypeName;
 import com.squareup.javapoet.TypeSpec;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashSet;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -46,9 +46,9 @@ import javax.tools.Diagnostic;
 import org.apache.ignite.internal.network.processor.MessageClass;
 import org.apache.ignite.internal.network.processor.MessageGroupWrapper;
 import org.apache.ignite.internal.network.processor.TypeUtils;
-import org.apache.ignite.internal.network.processor.serialization.BaseMethodNameResolver;
 import org.apache.ignite.network.NetworkMessage;
 import org.apache.ignite.network.annotations.Marshallable;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Class for generating implementations of the {@link NetworkMessage} interfaces and their builders, generated by a {@link
@@ -63,8 +63,6 @@ public class MessageImplGenerator {
 
     private final TypeUtils typeUtils;
 
-    private final BaseMethodNameResolver methodNameResolver;
-
     /**
      * Constructor.
      *
@@ -75,7 +73,6 @@ public class MessageImplGenerator {
         this.processingEnv = processingEnv;
         this.messageGroup = messageGroup;
         this.typeUtils = new TypeUtils(processingEnv);
-        this.methodNameResolver = new BaseMethodNameResolver(processingEnv);
     }
 
     /**
@@ -203,9 +200,33 @@ public class MessageImplGenerator {
         return messageImpl.build();
     }
 
+    private enum Type {
+        OBJECT_ARRAY,
+        COLLECTION,
+        MESSAGE,
+        MAP;
+    }
+
+    @Nullable
+    private Type resolveType(TypeMirror parameterType) {
+        if (parameterType.getKind() == TypeKind.ARRAY) {
+            if (!((ArrayType) parameterType).getComponentType().getKind().isPrimitive()) {
+                return Type.OBJECT_ARRAY;
+            }
+        } else if (parameterType.getKind() == TypeKind.DECLARED) {
+            if (typeUtils.isSameType(parameterType, Collection.class)) {
+                return Type.COLLECTION;
+            } else if (typeUtils.isSameType(parameterType, Map.class)) {
+                return Type.MAP;
+            }
+        } else if (typeUtils.isSubType(parameterType, NetworkMessage.class)) {
+            return Type.MESSAGE;
+        }
+        return null;
+    }
+
     private void generateBeforeSend(TypeSpec.Builder messageImplBuild, MessageClass message) {
         ParameterizedTypeName returnType = ParameterizedTypeName.get(ClassName.get(Set.class), TypeName.INT.box());
-        ParameterizedTypeName returnTypeImpl = ParameterizedTypeName.get(ClassName.get(HashSet.class), TypeName.INT.box());
 
         Builder beforeRead = MethodSpec.methodBuilder("beforeRead")
                 .addAnnotation(Override.class)
@@ -230,12 +251,15 @@ public class MessageImplGenerator {
                 beforeRead.addStatement("$T $N = marshaller.marshal($N)", marshalledObjectClass, moName, objectName);
                 beforeRead.addStatement("set.addAll($N.usedDescriptorIds())", moName);
                 beforeRead.addStatement("$N = $N.bytes()", baName, moName).addCode("\n");
-            } else if (typeUtils.isSubType(type, NetworkMessage.class)) {
-                beforeRead.addStatement("if ($N != null) $N.beforeRead(set, marshallerObj)", objectName, objectName);
             } else {
-                String methodType = methodNameResolver.resolveBaseMethodName(type);
-                switch (methodType) {
-                    case "ObjectArray":
+                Type objectType = resolveType(type);
+
+                if (objectType == null) {
+                    return;
+                }
+
+                switch (objectType) {
+                    case OBJECT_ARRAY:
                         ArrayType arrayType = (ArrayType) type;
                         if (typeUtils.isSubType(arrayType.getComponentType(), NetworkMessage.class)) {
                             beforeRead.beginControlFlow("if ($N != null)", objectName);
@@ -245,7 +269,7 @@ public class MessageImplGenerator {
                             beforeRead.endControlFlow().addCode("\n");
                         }
                         break;
-                    case "Collection":
+                    case COLLECTION:
                         DeclaredType declaredType = (DeclaredType) type;
                         TypeMirror elementType = declaredType.getTypeArguments().get(0);
                         if (typeUtils.isSubType(elementType, NetworkMessage.class)) {
@@ -256,7 +280,10 @@ public class MessageImplGenerator {
                             beforeRead.endControlFlow().addCode("\n");
                         }
                         break;
-                    case "Map":
+                    case MESSAGE:
+                        beforeRead.addStatement("if ($N != null) $N.beforeRead(set, marshallerObj)", objectName, objectName);
+                        break;
+                    case MAP:
                         DeclaredType mapType = (DeclaredType) type;
                         TypeMirror keyType = mapType.getTypeArguments().get(0);
                         boolean keyIsMessage = typeUtils.isSubType(keyType, NetworkMessage.class);
@@ -295,9 +322,6 @@ public class MessageImplGenerator {
     }
 
     private void generateAfterReceive(TypeSpec.Builder messageImplBuild, MessageClass message) {
-        ParameterizedTypeName returnType = ParameterizedTypeName.get(ClassName.get(Set.class), TypeName.INT.box());
-        ParameterizedTypeName returnTypeImpl = ParameterizedTypeName.get(ClassName.get(HashSet.class), TypeName.INT.box());
-
         Builder afterRead = MethodSpec.methodBuilder("afterRead")
                 .addAnnotation(Override.class)
                 .addModifiers(Modifier.PUBLIC)
@@ -318,12 +342,15 @@ public class MessageImplGenerator {
             if (executableElement.getAnnotation(Marshallable.class) != null) {
                 String baName = objectName + "ByteArray";
                 afterRead.addStatement("$N = marshaller.unmarshal($N, descriptorRegistry)", objectName, baName);
-            } else if (typeUtils.isSubType(type, NetworkMessage.class)) {
-                afterRead.addStatement("if ($N != null) $N.afterRead(marshallerObj, descriptorsObj)", objectName, objectName);
             } else {
-                String methodType = methodNameResolver.resolveBaseMethodName(type);
-                switch (methodType) {
-                    case "ObjectArray":
+                Type objectType = resolveType(type);
+
+                if (objectType == null) {
+                    return;
+                }
+
+                switch (objectType) {
+                    case OBJECT_ARRAY:
                         ArrayType arrayType = (ArrayType) type;
                         if (typeUtils.isSubType(arrayType.getComponentType(), NetworkMessage.class)) {
                             afterRead.beginControlFlow("if ($N != null)", objectName);
@@ -333,7 +360,7 @@ public class MessageImplGenerator {
                             afterRead.endControlFlow().addCode("\n");
                         }
                         break;
-                    case "Collection":
+                    case COLLECTION:
                         DeclaredType declaredType = (DeclaredType) type;
                         TypeMirror elementType = declaredType.getTypeArguments().get(0);
                         if (typeUtils.isSubType(elementType, NetworkMessage.class)) {
@@ -344,7 +371,10 @@ public class MessageImplGenerator {
                             afterRead.endControlFlow().addCode("\n");
                         }
                         break;
-                    case "Map":
+                    case MESSAGE:
+                        afterRead.addStatement("if ($N != null) $N.afterRead(marshallerObj, descriptorsObj)", objectName, objectName);
+                        break;
+                    case MAP:
                         DeclaredType mapType = (DeclaredType) type;
                         TypeMirror keyType = mapType.getTypeArguments().get(0);
                         boolean keyIsMessage = typeUtils.isSubType(keyType, NetworkMessage.class);
diff --git a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/serialization/BaseMethodNameResolver.java b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/serialization/BaseMethodNameResolver.java
index 3a87c4a..00783d0 100644
--- a/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/serialization/BaseMethodNameResolver.java
+++ b/modules/network-annotation-processor/src/main/java/org/apache/ignite/internal/network/processor/serialization/BaseMethodNameResolver.java
@@ -38,7 +38,7 @@ import org.apache.ignite.network.NetworkMessage;
  * @see MessageReaderMethodResolver
  * @see MessageWriterMethodResolver
  */
-public class BaseMethodNameResolver {
+class BaseMethodNameResolver {
     /** Processing environment. */
     private final ProcessingEnvironment processingEnvironment;
 
@@ -47,7 +47,7 @@ public class BaseMethodNameResolver {
      *
      * @param processingEnvironment Processing environment.
      */
-    public BaseMethodNameResolver(ProcessingEnvironment processingEnvironment) {
+    BaseMethodNameResolver(ProcessingEnvironment processingEnvironment) {
         this.processingEnvironment = processingEnvironment;
     }
 
@@ -57,7 +57,7 @@ public class BaseMethodNameResolver {
      * @param parameterType parameter of the method to resolve
      * @return part of the method name, depending on the parameter type
      */
-    public String resolveBaseMethodName(TypeMirror parameterType) {
+    String resolveBaseMethodName(TypeMirror parameterType) {
         if (parameterType.getKind().isPrimitive()) {
             return resolvePrimitiveMethodName(parameterType);
         } else if (parameterType.getKind() == TypeKind.ARRAY) {