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

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


The following commit(s) were added to refs/heads/main by this push:
     new bac613c518 IGNITE-17591 Refactor toString generation for network 
messages (#3519)
bac613c518 is described below

commit bac613c518afd9a1e1ff7619cc4e0ad2c4769682
Author: Phillippko <[email protected]>
AuthorDate: Wed Apr 3 12:58:49 2024 +0400

    IGNITE-17591 Refactor toString generation for network messages (#3519)
---
 .../ignite/internal/tostring/IgniteToStringExclude.java |  6 +++---
 .../ignite/internal/tostring/IgniteToStringInclude.java |  6 +++---
 .../processor/messages/MessageImplGenerator.java        | 15 ++++++++++++++-
 .../ignite/internal/network/AllTypesMessageTest.java    | 17 +++++++++++++++++
 .../internal/network/messages/AllTypesMessage.java      | 10 ++++++++++
 .../replication/request/SingleRowReplicaRequest.java    |  2 ++
 6 files changed, 49 insertions(+), 7 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringExclude.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringExclude.java
index e99eceb496..289d0fdb29 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringExclude.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringExclude.java
@@ -24,12 +24,12 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Class or field annotated with IgniteToStringInclude claims the element 
<b>must be</b> excluded from {@code toString()} output. This
- * annotation is used to override the default exclusion policy.
+ * Class, field or method annotated with IgniteToStringInclude claims the 
element <b>must be</b> excluded from {@code toString()} output.
+ * This annotation is used to override the default exclusion policy.
  */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD, ElementType.TYPE})
+@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
 public @interface IgniteToStringExclude {
     // No-op.
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringInclude.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringInclude.java
index 3a20b41cac..12b3f4727a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringInclude.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/tostring/IgniteToStringInclude.java
@@ -25,12 +25,12 @@ import java.lang.annotation.Target;
 import org.apache.ignite.internal.lang.IgniteSystemProperties;
 
 /**
- * Class or field annotated with IgniteToStringInclude claims the element 
<b>should</b> be included in {@code toString()} output. This
- * annotation is used to override the default exclusion policy.
+ * Class, field or method annotated with IgniteToStringInclude claims the 
element <b>should</b> be included in {@code toString()} output.
+ * This annotation is used to override the default exclusion policy.
  */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.FIELD, ElementType.TYPE})
+@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
 public @interface IgniteToStringInclude {
     /**
      * A flag indicating if sensitive information stored in the field or 
fields of the class. Such information will be included to {@code
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 c990654da2..c9c81509f7 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
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.network.processor.messages;
 
+import com.squareup.javapoet.AnnotationSpec;
 import com.squareup.javapoet.ArrayTypeName;
 import com.squareup.javapoet.ClassName;
 import com.squareup.javapoet.CodeBlock;
@@ -55,6 +56,7 @@ import 
org.apache.ignite.internal.network.processor.MessageClass;
 import org.apache.ignite.internal.network.processor.MessageGroupWrapper;
 import org.apache.ignite.internal.network.processor.ProcessingException;
 import org.apache.ignite.internal.network.processor.TypeUtils;
+import org.apache.ignite.internal.tostring.IgniteToStringExclude;
 import org.apache.ignite.internal.tostring.IgniteToStringInclude;
 import org.apache.ignite.internal.tostring.S;
 import org.jetbrains.annotations.Nullable;
@@ -131,9 +133,20 @@ public class MessageImplGenerator {
             }
 
             FieldSpec.Builder fieldBuilder = 
FieldSpec.builder(getterReturnType, getterName)
-                    .addAnnotation(IgniteToStringInclude.class)
                     .addModifiers(Modifier.PRIVATE);
 
+            if (getter.getAnnotation(IgniteToStringExclude.class) == null) {
+                IgniteToStringInclude includeAnnotation = 
getter.getAnnotation(IgniteToStringInclude.class);
+
+                AnnotationSpec includeAnnotationSpec = includeAnnotation == 
null
+                        ? 
AnnotationSpec.builder(IgniteToStringInclude.class).build()
+                        : AnnotationSpec.get(includeAnnotation);
+
+                fieldBuilder.addAnnotation(includeAnnotationSpec);
+            } else {
+                fieldBuilder.addAnnotation(IgniteToStringExclude.class);
+            }
+
             boolean generateSetter = getter.getAnnotation(WithSetter.class) != 
null;
 
             if (!isMarshallable && !generateSetter) {
diff --git 
a/modules/network/src/test/java/org/apache/ignite/internal/network/AllTypesMessageTest.java
 
b/modules/network/src/test/java/org/apache/ignite/internal/network/AllTypesMessageTest.java
index d38bfe1a19..aaf9a5ae6b 100644
--- 
a/modules/network/src/test/java/org/apache/ignite/internal/network/AllTypesMessageTest.java
+++ 
b/modules/network/src/test/java/org/apache/ignite/internal/network/AllTypesMessageTest.java
@@ -17,11 +17,16 @@
 
 package org.apache.ignite.internal.network;
 
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.StringContains.containsString;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.ignite.internal.network.messages.AllTypesMessage;
+import org.apache.ignite.internal.tostring.IgniteToStringExclude;
+import org.apache.ignite.internal.tostring.IgniteToStringInclude;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -63,4 +68,16 @@ public class AllTypesMessageTest {
 
         fail("All generated messages had the same hash code");
     }
+
+    /**
+     * Tests that {@link IgniteToStringInclude} and {@link 
IgniteToStringExclude} are processed correctly.
+     */
+    @Test
+    public void testIgniteToStringAnnotations() {
+        AllTypesMessage msg = AllTypesMessageGenerator.generate(0, false);
+
+        assertThat(msg.toString(), containsString("strQ"));
+        assertThat(msg.toString(), not(containsString("excludedString")));
+        assertThat(msg.toString(), not(containsString("sensitiveString")));
+    }
 }
diff --git 
a/modules/network/src/testFixtures/java/org/apache/ignite/internal/network/messages/AllTypesMessage.java
 
b/modules/network/src/testFixtures/java/org/apache/ignite/internal/network/messages/AllTypesMessage.java
index a9a03b6ddb..ddffdffc08 100644
--- 
a/modules/network/src/testFixtures/java/org/apache/ignite/internal/network/messages/AllTypesMessage.java
+++ 
b/modules/network/src/testFixtures/java/org/apache/ignite/internal/network/messages/AllTypesMessage.java
@@ -28,6 +28,8 @@ import java.util.UUID;
 import org.apache.ignite.internal.lang.IgniteUuid;
 import org.apache.ignite.internal.network.NetworkMessage;
 import org.apache.ignite.internal.network.annotations.Transferable;
+import org.apache.ignite.internal.tostring.IgniteToStringExclude;
+import org.apache.ignite.internal.tostring.IgniteToStringInclude;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -114,4 +116,12 @@ public interface AllTypesMessage extends NetworkMessage, 
Serializable {
 
     @Nullable
     ByteBuffer byteBufferZ();
+
+    @IgniteToStringExclude
+    @Nullable
+    String excludedString();
+
+    @IgniteToStringInclude(sensitive = true)
+    @Nullable
+    String sensitiveString();
 }
diff --git 
a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/replication/request/SingleRowReplicaRequest.java
 
b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/replication/request/SingleRowReplicaRequest.java
index a5fce94661..8a6df9a3b9 100644
--- 
a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/replication/request/SingleRowReplicaRequest.java
+++ 
b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/replication/request/SingleRowReplicaRequest.java
@@ -23,11 +23,13 @@ import 
org.apache.ignite.internal.replicator.message.SchemaVersionAwareReplicaRe
 import org.apache.ignite.internal.schema.BinaryRow;
 import org.apache.ignite.internal.schema.BinaryRowImpl;
 import 
org.apache.ignite.internal.table.distributed.replicator.action.RequestType;
+import org.apache.ignite.internal.tostring.IgniteToStringInclude;
 
 /**
  * Single-row replica request.
  */
 public interface SingleRowReplicaRequest extends 
SchemaVersionAwareReplicaRequest {
+    @IgniteToStringInclude(sensitive = true)
     ByteBuffer binaryTuple();
 
     default BinaryRow binaryRow() {

Reply via email to