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

philo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git


The following commit(s) were added to refs/heads/main by this push:
     new 265fcbbe9d [GLUTEN-10473] Change `TypeNode` from interface to abstract 
class (#10474)
265fcbbe9d is described below

commit 265fcbbe9de4cdd8ca30faec72bdf8313ae104e3
Author: Jiaan Geng <[email protected]>
AuthorDate: Tue Aug 19 16:59:17 2025 +0800

    [GLUTEN-10473] Change `TypeNode` from interface to abstract class (#10474)
---
 .../org/apache/gluten/substrait/type/BinaryTypeNode.java | 12 ++----------
 .../apache/gluten/substrait/type/BooleanTypeNode.java    | 12 ++----------
 .../org/apache/gluten/substrait/type/DateTypeNode.java   | 12 ++----------
 .../apache/gluten/substrait/type/DecimalTypeNode.java    | 12 ++----------
 .../org/apache/gluten/substrait/type/FP32TypeNode.java   | 12 ++----------
 .../org/apache/gluten/substrait/type/FP64TypeNode.java   | 12 ++----------
 .../gluten/substrait/type/FixedBinaryTypeNode.java       | 12 ++----------
 .../apache/gluten/substrait/type/FixedCharTypeNode.java  | 12 ++----------
 .../org/apache/gluten/substrait/type/I16TypeNode.java    | 12 ++----------
 .../org/apache/gluten/substrait/type/I32TypeNode.java    | 12 ++----------
 .../org/apache/gluten/substrait/type/I64TypeNode.java    | 12 ++----------
 .../org/apache/gluten/substrait/type/I8TypeNode.java     | 12 ++----------
 .../gluten/substrait/type/IntervalYearTypeNode.java      | 13 ++-----------
 .../java/org/apache/gluten/substrait/type/ListNode.java  | 12 ++----------
 .../java/org/apache/gluten/substrait/type/MapNode.java   | 11 ++---------
 .../org/apache/gluten/substrait/type/NothingNode.java    | 13 ++++---------
 .../org/apache/gluten/substrait/type/StringTypeNode.java | 12 ++----------
 .../org/apache/gluten/substrait/type/StructNode.java     | 13 +++----------
 .../apache/gluten/substrait/type/TimestampTypeNode.java  | 12 ++----------
 .../java/org/apache/gluten/substrait/type/TypeNode.java  | 16 +++++++++++++---
 20 files changed, 54 insertions(+), 192 deletions(-)

diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BinaryTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BinaryTypeNode.java
index 82770eea88..a4840c69bc 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BinaryTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BinaryTypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class BinaryTypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class BinaryTypeNode extends TypeNode {
 
   public BinaryTypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class BinaryTypeNode implements TypeNode, Serializable 
{
     builder.setBinary(binaryBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BooleanTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BooleanTypeNode.java
index 531da33502..f91c378dae 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BooleanTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/BooleanTypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class BooleanTypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class BooleanTypeNode extends TypeNode {
 
   public BooleanTypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class BooleanTypeNode implements TypeNode, 
Serializable {
     builder.setBool(booleanBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DateTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DateTypeNode.java
index 0438abc781..57642740b0 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DateTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DateTypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class DateTypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class DateTypeNode extends TypeNode {
 
   public DateTypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -39,9 +36,4 @@ public class DateTypeNode implements TypeNode, Serializable {
     builder.setDate(dateBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DecimalTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DecimalTypeNode.java
index 59c810b0ef..b48ace5524 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DecimalTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/DecimalTypeNode.java
@@ -18,15 +18,12 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class DecimalTypeNode implements TypeNode, Serializable {
-  public final Boolean nullable;
+public class DecimalTypeNode extends TypeNode {
   public final int precision;
   public final int scale;
 
   public DecimalTypeNode(Boolean nullable, int precision, int scale) {
-    this.nullable = nullable;
+    super(nullable);
     this.precision = precision;
     this.scale = scale;
   }
@@ -46,9 +43,4 @@ public class DecimalTypeNode implements TypeNode, 
Serializable {
     builder.setDecimal(decimalBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP32TypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP32TypeNode.java
index 76d72ce658..7ece6278c8 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP32TypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP32TypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class FP32TypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class FP32TypeNode extends TypeNode {
 
   public FP32TypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class FP32TypeNode implements TypeNode, Serializable {
     builder.setFp32(doubleBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP64TypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP64TypeNode.java
index 21abe07570..7ab6d4224b 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP64TypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FP64TypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class FP64TypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class FP64TypeNode extends TypeNode {
 
   public FP64TypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class FP64TypeNode implements TypeNode, Serializable {
     builder.setFp64(doubleBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedBinaryTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedBinaryTypeNode.java
index 7fa6b7ef81..230c31f05f 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedBinaryTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedBinaryTypeNode.java
@@ -18,14 +18,11 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class FixedBinaryTypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class FixedBinaryTypeNode extends TypeNode {
   private final int length;
 
   public FixedBinaryTypeNode(Boolean nullable, int length) {
-    this.nullable = nullable;
+    super(nullable);
     this.length = length;
   }
 
@@ -43,9 +40,4 @@ public class FixedBinaryTypeNode implements TypeNode, 
Serializable {
     builder.setFixedBinary(fixedBinaryBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedCharTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedCharTypeNode.java
index 710aa05566..1562ebc239 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedCharTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/FixedCharTypeNode.java
@@ -18,14 +18,11 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class FixedCharTypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class FixedCharTypeNode extends TypeNode {
   private final int length;
 
   public FixedCharTypeNode(Boolean nullable, int length) {
-    this.nullable = nullable;
+    super(nullable);
     this.length = length;
   }
 
@@ -43,9 +40,4 @@ public class FixedCharTypeNode implements TypeNode, 
Serializable {
     builder.setFixedChar(fixedCharBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I16TypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I16TypeNode.java
index d6a9dc016e..b50bd3842c 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I16TypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I16TypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class I16TypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class I16TypeNode extends TypeNode {
 
   public I16TypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class I16TypeNode implements TypeNode, Serializable {
     builder.setI16(i16Builder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I32TypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I32TypeNode.java
index 85ae2ec96c..2ffd9345e1 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I32TypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I32TypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class I32TypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class I32TypeNode extends TypeNode {
 
   public I32TypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class I32TypeNode implements TypeNode, Serializable {
     builder.setI32(i32Builder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I64TypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I64TypeNode.java
index 57248915a5..e9a6e1be3f 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I64TypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I64TypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class I64TypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class I64TypeNode extends TypeNode {
 
   public I64TypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class I64TypeNode implements TypeNode, Serializable {
     builder.setI64(i64Builder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I8TypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I8TypeNode.java
index 53e69e2ae8..c1a3449b4a 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I8TypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/I8TypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class I8TypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class I8TypeNode extends TypeNode {
 
   public I8TypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class I8TypeNode implements TypeNode, Serializable {
     builder.setI8(i8Builder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/IntervalYearTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/IntervalYearTypeNode.java
index 532a2ec3ba..0544c20ca9 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/IntervalYearTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/IntervalYearTypeNode.java
@@ -18,14 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class IntervalYearTypeNode implements TypeNode, Serializable {
-
-  private final Boolean nullable;
+public class IntervalYearTypeNode extends TypeNode {
 
   public IntervalYearTypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +36,4 @@ public class IntervalYearTypeNode implements TypeNode, 
Serializable {
     builder.setIntervalYear(intervalYearBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/ListNode.java 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/ListNode.java
index 4676d69a3b..c3a5ef1bb6 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/ListNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/ListNode.java
@@ -18,14 +18,11 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class ListNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class ListNode extends TypeNode {
   private final TypeNode nestedType;
 
   public ListNode(Boolean nullable, TypeNode nestedType) {
-    this.nullable = nullable;
+    super(nullable);
     this.nestedType = nestedType;
   }
 
@@ -45,9 +42,4 @@ public class ListNode implements TypeNode, Serializable {
     builder.setList(listBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/MapNode.java 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/MapNode.java
index 0514c39646..65615f61e8 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/MapNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/MapNode.java
@@ -18,17 +18,15 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
-public class MapNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class MapNode extends TypeNode {
   private final TypeNode keyType;
   private final TypeNode valType;
 
   public MapNode(Boolean nullable, TypeNode keyType, TypeNode valType) {
-    this.nullable = nullable;
+    super(nullable);
     this.keyType = keyType;
     this.valType = valType;
   }
@@ -61,9 +59,4 @@ public class MapNode implements TypeNode, Serializable {
     builder.setMap(mapBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/NothingNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/NothingNode.java
index b79994ddae..048dce9cd1 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/NothingNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/NothingNode.java
@@ -18,10 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class NothingNode implements TypeNode, Serializable {
-  public NothingNode() {}
+public class NothingNode extends TypeNode {
+  public NothingNode() {
+    super(true);
+  }
 
   @Override
   public Type toProtobuf() {
@@ -30,9 +30,4 @@ public class NothingNode implements TypeNode, Serializable {
     builder.setNothing(nothingBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return true;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StringTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StringTypeNode.java
index 68e43c06c6..4ade5b1cf0 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StringTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StringTypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class StringTypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class StringTypeNode extends TypeNode {
 
   public StringTypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class StringTypeNode implements TypeNode, Serializable 
{
     builder.setString(stringBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StructNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StructNode.java
index 57deda94cc..92c91a0f25 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StructNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/StructNode.java
@@ -18,23 +18,21 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
-public class StructNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class StructNode extends TypeNode {
   private final List<TypeNode> types = new ArrayList<>();
   private final List<String> names = new ArrayList<>();
 
   public StructNode(Boolean nullable, List<TypeNode> types, List<String> 
names) {
-    this.nullable = nullable;
+    super(nullable);
     this.types.addAll(types);
     this.names.addAll(names);
   }
 
   public StructNode(Boolean nullable, List<TypeNode> types) {
-    this.nullable = nullable;
+    super(nullable);
     this.types.addAll(types);
   }
 
@@ -61,9 +59,4 @@ public class StructNode implements TypeNode, Serializable {
     builder.setStruct(structBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TimestampTypeNode.java
 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TimestampTypeNode.java
index 5c63429cbd..f25b5e900e 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TimestampTypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TimestampTypeNode.java
@@ -18,13 +18,10 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-import java.io.Serializable;
-
-public class TimestampTypeNode implements TypeNode, Serializable {
-  private final Boolean nullable;
+public class TimestampTypeNode extends TypeNode {
 
   public TimestampTypeNode(Boolean nullable) {
-    this.nullable = nullable;
+    super(nullable);
   }
 
   @Override
@@ -40,9 +37,4 @@ public class TimestampTypeNode implements TypeNode, 
Serializable {
     builder.setTimestamp(timestampBuilder.build());
     return builder.build();
   }
-
-  @Override
-  public Boolean nullable() {
-    return nullable;
-  }
 }
diff --git 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TypeNode.java 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TypeNode.java
index de251fa06a..54ead45a09 100644
--- 
a/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TypeNode.java
+++ 
b/gluten-substrait/src/main/java/org/apache/gluten/substrait/type/TypeNode.java
@@ -18,8 +18,18 @@ package org.apache.gluten.substrait.type;
 
 import io.substrait.proto.Type;
 
-public interface TypeNode {
-  Type toProtobuf();
+import java.io.Serializable;
 
-  Boolean nullable();
+public abstract class TypeNode implements Serializable {
+  protected final Boolean nullable;
+
+  protected TypeNode(Boolean nullable) {
+    this.nullable = nullable;
+  }
+
+  public abstract Type toProtobuf();
+
+  public Boolean nullable() {
+    return nullable;
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to