This is an automated email from the ASF dual-hosted git repository.
mihaibudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new c3e3e6b86b [CALCITE-7632] Replace java.util.Stack with
java.util.ArrayDeque in Pattern and TopDownRuleDriver
c3e3e6b86b is described below
commit c3e3e6b86bc6af7501ad7298fc4260b7557437c2
Author: liuzhengri <[email protected]>
AuthorDate: Wed Jul 1 01:46:18 2026 +0800
[CALCITE-7632] Replace java.util.Stack with java.util.ArrayDeque in Pattern
and TopDownRuleDriver
Replace java.util.Stack (which extends Vector and provides unnecessary
synchronized access) with java.util.ArrayDeque in:
- runtime/Pattern.java: PatternBuilder.stack field
- plan/volcano/TopDownRuleDriver.java: tasks field
Also remove @SuppressWarnings("JdkObsolete") annotations and TODO
comments that requested this change.
Stack is officially discouraged by the Java documentation, which
recommends using Deque implementations like ArrayDeque instead.
ArrayDeque is faster for single-threaded use since it avoids the
synchronization overhead inherited from Vector.
---
.../org/apache/calcite/plan/volcano/TopDownRuleDriver.java | 10 +++++-----
core/src/main/java/org/apache/calcite/runtime/Pattern.java | 6 +++---
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git
a/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java
b/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java
index 8e25a8e45b..6940b0b1ae 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/TopDownRuleDriver.java
@@ -28,12 +28,13 @@
import org.checkerframework.checker.nullness.qual.Nullable;
import org.slf4j.Logger;
+import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Deque;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import java.util.Stack;
import java.util.function.Predicate;
import static java.util.Objects.requireNonNull;
@@ -47,7 +48,6 @@
* A Task is a piece of work to be executed, it may apply some rules
* or schedule other tasks.
*/
-@SuppressWarnings("JdkObsolete")
class TopDownRuleDriver implements RuleDriver {
private static final Logger LOGGER = CalciteTrace.getPlannerTaskTracer();
@@ -62,7 +62,7 @@ class TopDownRuleDriver implements RuleDriver {
/**
* All tasks waiting for execution.
*/
- private final Stack<Task> tasks = new Stack<>(); // TODO: replace with Deque
+ private final Deque<Task> tasks = new ArrayDeque<>();
/**
* A task that is currently applying and may generate new RelNode.
@@ -350,7 +350,7 @@ private class OptimizeGroup implements Task {
for (RelNode rel : physicals) {
Task task = getOptimizeInputTask(rel, group);
if (task != null) {
- tasks.add(task);
+ tasks.push(task);
}
}
}
@@ -602,7 +602,7 @@ private class ApplyRule implements GeneratorTask {
requireNonNull(group.getTraitSet().getConvention(),
() -> "convention for " + group))));
if (match != null) {
- tasks.add(new ApplyRule(match, group, false));
+ tasks.push(new ApplyRule(match, group, false));
}
return null;
}
diff --git a/core/src/main/java/org/apache/calcite/runtime/Pattern.java
b/core/src/main/java/org/apache/calcite/runtime/Pattern.java
index 6fb331d80c..dfeaac3634 100644
--- a/core/src/main/java/org/apache/calcite/runtime/Pattern.java
+++ b/core/src/main/java/org/apache/calcite/runtime/Pattern.java
@@ -18,7 +18,8 @@
import com.google.common.collect.ImmutableList;
-import java.util.Stack;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.stream.Collectors;
import static com.google.common.base.Preconditions.checkArgument;
@@ -68,9 +69,8 @@ enum Op {
}
/** Builds a pattern expression. */
- @SuppressWarnings("JdkObsolete")
class PatternBuilder {
- final Stack<Pattern> stack = new Stack<>(); // TODO: replace with Deque
+ final Deque<Pattern> stack = new ArrayDeque<>();
private PatternBuilder() {}