From b8734ac3cbd91b56528d385a75b5d86f7f4b38ca Mon Sep 17 00:00:00 2001 From: Jacob Repp Date: Sat, 29 Nov 2025 16:13:59 -0800 Subject: [PATCH 1/2] Add Java 25 build compatibility via Groovy 4.0.30-SNAPSHOT This change enables building TinkerPop with Java 25 by: 1. Updating Groovy version to 4.0.30-SNAPSHOT which includes ASM 9.9 (required for Java 25 class file version 69 support) 2. Adding explicit annotationProcessorPaths to gremlin-groovy's maven-compiler-plugin configuration. This ensures the GremlinDsl annotation processor can load its dependencies (javapoet, gremlin-core) which is required due to stricter classloader isolation in Java 25. Build requirements: - Requires local installation of Groovy 4.0.30-SNAPSHOT with ASM 9.9 - Use -Denforcer.skip=true to bypass Java version check - Use -Dmaven.javadoc.skip=true due to Groovy source path issues --- gremlin-groovy/pom.xml | 32 ++++++++++++++++++++++++++++++++ pom.xml | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/gremlin-groovy/pom.xml b/gremlin-groovy/pom.xml index a501399a0eb..85e21cf6fbd 100644 --- a/gremlin-groovy/pom.xml +++ b/gremlin-groovy/pom.xml @@ -153,6 +153,38 @@ limitations under the License. -parameters + + + org.apache.tinkerpop + gremlin-annotations + ${project.version} + + + org.apache.tinkerpop + gremlin-core + ${project.version} + + + org.apache.tinkerpop + gremlin-shaded + ${project.version} + + + org.apache.tinkerpop + gremlin-language + ${project.version} + + + com.squareup + javapoet + ${javapoet.version} + + + org.antlr + antlr4-runtime + ${antlr4.version} + + diff --git a/pom.xml b/pom.xml index 701031edb46..0db8d7b6675 100644 --- a/pom.xml +++ b/pom.xml @@ -162,7 +162,7 @@ limitations under the License. 1.10.0 7.21.1 0.4.8 - 4.0.25 + 4.0.30-SNAPSHOT 4.2.3 3.3.3 3.0 From 184c7ef8c2f935dfef5d3a0d0a63c1ca051468c0 Mon Sep 17 00:00:00 2001 From: Jacob Repp Date: Sat, 29 Nov 2025 17:09:15 -0800 Subject: [PATCH 2/2] Fix Java 25 test compatibility issues - LambdaRestrictionStrategy: Use case-insensitive check for lambda class names (Java 25 changed lambda naming to $$Lambda/ instead of $$lambda$) - ImportGremlinPluginTest: Handle Math.TAU field added in Java 19 --- .../verification/LambdaRestrictionStrategy.java | 2 +- .../gremlin/jsr223/ImportGremlinPluginTest.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java index 71999c54419..0e690014d70 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategy.java @@ -51,7 +51,7 @@ private LambdaRestrictionStrategy() { @Override public void apply(final Traversal.Admin traversal) { for (final Step step : traversal.getSteps()) { - if ((step instanceof LambdaHolder || step instanceof ComparatorHolder) && step.toString().contains("lambda")) + if ((step instanceof LambdaHolder || step instanceof ComparatorHolder) && step.toString().toLowerCase().contains("lambda")) throw new VerificationException("The provided traversal contains a lambda step: " + step, traversal); } } diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java index b2a1a3cbd02..316899b9c54 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java @@ -147,8 +147,15 @@ public void shouldImportWildcardFields() throws Exception { .fieldsImports(Collections.singletonList(Math.class.getCanonicalName() + "#*")).create(); final DefaultImportCustomizer customizer = (DefaultImportCustomizer) module.getCustomizers().get()[0]; - assertThat(customizer.getFieldImports(), is(new HashSet<>( - Arrays.asList(Math.class.getField("PI"), Math.class.getField("E"))))); + // Math.TAU was added in Java 19 + final HashSet expectedFields = new HashSet<>(Arrays.asList( + Math.class.getField("PI"), Math.class.getField("E"))); + try { + expectedFields.add(Math.class.getField("TAU")); + } catch (NoSuchFieldException ignored) { + // TAU not available in Java < 19 + } + assertThat(customizer.getFieldImports(), is(expectedFields)); } @Test