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() {