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

xiazcy pushed a commit to branch 3.8-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/3.8-dev by this push:
     new 57ed0467ac CTR backport refactored typeOf() implementation for P & 
CompareType from TP 4.0
57ed0467ac is described below

commit 57ed0467ace20691e9dae9baf69bdd8001d20459
Author: xiazcy <[email protected]>
AuthorDate: Fri Oct 24 16:02:34 2025 -0700

    CTR backport refactored typeOf() implementation for P & CompareType from TP 
4.0
---
 .../gremlin/process/traversal/CompareType.java        | 19 +++++++++----------
 .../apache/tinkerpop/gremlin/process/traversal/P.java |  2 +-
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CompareType.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CompareType.java
index c3854d2de2..45bafc5483 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CompareType.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CompareType.java
@@ -36,22 +36,21 @@ public enum CompareType implements PBiPredicate<Object, 
Object> {
     typeOf {
         @Override
         public boolean test(final Object first, final Object second) {
-            Class<?> valueClass;
             if (first == null) {
-                return second == null;
+                return second == null || (second instanceof GType && ((GType) 
second).getType() == null);
             }
+
+            Class<?> valueClass;
             if (second instanceof String) {
-                // need to assess the string token at run time on server
-                final Optional<Class<?>> opt = 
CompareType.GlobalTypeCache.getRegisteredType((String) second);
-                if (opt.isEmpty()) {
-                    throw new IllegalArgumentException(second + " is not a 
registered type");
-                }
-                else
-                    valueClass = opt.get();
+                valueClass = 
CompareType.GlobalTypeCache.getRegisteredType((String) second)
+                        .orElseThrow(() -> new IllegalArgumentException(second 
+ " is not a registered type"));
+            } else if (second instanceof GType) {
+                valueClass = ((GType) second).getType();
             } else {
                 valueClass = (Class<?>) second;
             }
-            return second != null && 
valueClass.isAssignableFrom(first.getClass());
+
+            return valueClass != null && 
valueClass.isAssignableFrom(first.getClass());
         }
 
     };
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java
index cea7a9258f..559682a56e 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java
@@ -444,7 +444,7 @@ public class P<V> implements Predicate<V>, Serializable, 
Cloneable {
      * @since 3.8.0
      */
     public static <V> P<V> typeOf(final GType value) {
-        return new P(CompareType.typeOf, value.getType());
+        return new P(CompareType.typeOf, value);
     }
 
     /**

Reply via email to