You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tl...@apache.org on 2021/10/20 13:45:57 UTC

[ignite-3] branch main updated: IGNITE-15599 Get rid Guava in Calcite module (#398)

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

tledkov 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 03e9467  IGNITE-15599 Get rid Guava in Calcite module  (#398)
03e9467 is described below

commit 03e9467f40d5ce1749614daae2d204eefb52912b
Author: Taras Ledkov <tl...@gridgain.com>
AuthorDate: Wed Oct 20 16:45:47 2021 +0300

    IGNITE-15599 Get rid Guava in Calcite module  (#398)
---
 .../query/calcite/exec/ExchangeServiceImpl.java    |   4 +-
 .../query/calcite/exec/ExecutionServiceImpl.java   |   3 +-
 .../query/calcite/exec/PlannerHelper.java          |   6 +-
 .../query/calcite/exec/exp/ExpressionFactory.java  |   3 +-
 .../calcite/exec/exp/ExpressionFactoryImpl.java    |  11 +-
 .../query/calcite/exec/exp/RexImpTable.java        |   7 +-
 .../query/calcite/exec/exp/RexToLixTranslator.java |   3 +-
 .../calcite/exec/exp/agg/AccumulatorsFactory.java  |  24 ++---
 .../query/calcite/externalize/RelJson.java         |  24 ++---
 .../query/calcite/externalize/RelJsonReader.java   |  17 ++-
 .../query/calcite/metadata/IgniteMdCollation.java  | 115 ++++++++++++++-------
 .../calcite/metadata/IgniteMdFragmentMapping.java  |   7 +-
 .../query/calcite/metadata/IgniteMetadata.java     |   5 +-
 .../processors/query/calcite/prepare/Cloner.java   |  11 +-
 .../query/calcite/prepare/ExecutionPlan.java       |   6 +-
 .../processors/query/calcite/prepare/Fragment.java |   5 +-
 .../query/calcite/prepare/FragmentSplitter.java    |   5 +-
 .../query/calcite/prepare/IgnitePlanner.java       |   9 +-
 .../query/calcite/prepare/PlannerHelper.java       |   6 +-
 .../query/calcite/prepare/QueryTemplate.java       |  16 +--
 .../processors/query/calcite/prepare/Splitter.java |   5 +-
 .../query/calcite/rel/AbstractIgniteJoin.java      |  31 +++---
 .../query/calcite/rel/IgniteAggregate.java         |   3 +-
 .../rel/IgniteCorrelatedNestedLoopJoin.java        |  24 ++---
 .../processors/query/calcite/rel/IgniteFilter.java |  13 ++-
 .../query/calcite/rel/IgniteIndexScan.java         |   3 +-
 .../processors/query/calcite/rel/IgniteLimit.java  |   5 +-
 .../query/calcite/rel/IgniteMergeJoin.java         |  10 +-
 .../query/calcite/rel/IgniteNestedLoopJoin.java    |   3 +-
 .../query/calcite/rel/IgniteProject.java           |  23 ++---
 .../processors/query/calcite/rel/IgniteSort.java   |   5 +-
 .../query/calcite/rel/IgniteTableFunctionScan.java |   3 +-
 .../query/calcite/rel/IgniteTableScan.java         |   4 +-
 .../query/calcite/rel/IgniteUnionAll.java          |  16 +--
 .../calcite/rel/agg/IgniteHashAggregateBase.java   |   7 +-
 .../calcite/rel/agg/IgniteMapAggregateBase.java    |  10 +-
 .../calcite/rel/agg/IgniteReduceAggregateBase.java |  14 +--
 .../calcite/rel/agg/IgniteReduceHashAggregate.java |   5 +-
 .../calcite/rel/agg/IgniteSingleAggregateBase.java |  10 +-
 .../calcite/rel/agg/IgniteSortAggregateBase.java   |   7 +-
 .../rel/logical/IgniteLogicalIndexScan.java        |   3 +-
 .../rel/logical/IgniteLogicalTableScan.java        |   3 +-
 .../query/calcite/rel/set/IgniteMapSetOp.java      |  13 ++-
 .../query/calcite/rel/set/IgniteMinusBase.java     |   4 +-
 .../calcite/rel/set/IgniteReduceIntersect.java     |   3 +-
 .../query/calcite/rel/set/IgniteReduceMinus.java   |   3 +-
 .../query/calcite/rel/set/IgniteReduceSetOp.java   |  11 +-
 .../query/calcite/rel/set/IgniteSetOp.java         |   3 +-
 .../query/calcite/rel/set/IgniteSingleSetOp.java   |  11 +-
 .../FilterSpoolMergeToSortedIndexSpoolRule.java    |   5 +-
 .../calcite/rule/logical/LogicalOrToUnionRule.java |   5 +-
 .../query/calcite/schema/IgniteTableImpl.java      |   5 +-
 .../calcite/sql/IgniteSqlCreateTableOption.java    |   3 +-
 .../query/calcite/trait/CorrelationTrait.java      |   5 +-
 .../query/calcite/trait/DistributionTrait.java     |  27 ++++-
 .../processors/query/calcite/trait/TraitUtils.java |  26 +++--
 .../processors/query/calcite/util/Commons.java     |  16 +++
 .../processors/query/calcite/util/HintUtils.java   |   6 +-
 .../ExecutionPlan.java => util/LocalCache.java}    |  42 +++++---
 .../processors/query/calcite/util/Primitives.java  | 105 +++++++++++++++++++
 .../processors/query/calcite/util/TypeUtils.java   |   3 +-
 .../calcite/exec/rel/AbstractExecutionTest.java    |   4 +-
 .../query/calcite/exec/rel/BaseAggregateTest.java  |  21 ++--
 .../query/calcite/exec/rel/ExecutionTest.java      |   4 +-
 .../exec/rel/HashAggregateExecutionTest.java       |   6 +-
 .../rel/HashAggregateSingleGroupExecutionTest.java |  21 ++--
 .../exec/rel/SortAggregateExecutionTest.java       |   6 +-
 .../query/calcite/planner/AbstractPlannerTest.java |   5 +-
 .../query/calcite/planner/PlannerTest.java         |   4 +-
 .../query/calcite/sql/SqlDdlParserTest.java        |  15 ++-
 .../{calcite/util/Commons.java => ITUtils.java}    |  27 +++--
 .../calcite/AbstractBasicIntegrationTest.java      |   5 +-
 .../ignite/internal/calcite/ITDataTypesTest.java   |   8 +-
 .../ignite/internal/calcite/ITSetOpTest.java       |   4 +-
 .../ignite/internal/calcite/util/Commons.java      |   4 +-
 .../runner/app/AbstractSchemaChangeTest.java       |   5 +-
 .../internal/runner/app/ITBaselineChangesTest.java |   5 +-
 .../runner/app/ITDynamicTableCreationTest.java     |   5 +-
 .../ignite/internal/runner/app/ITIgnitionTest.java |   5 +-
 .../internal/runner/app/ITTablesApiTest.java       |   5 +-
 .../runner/app/ITThinClientConnectionTest.java     |   5 +-
 81 files changed, 563 insertions(+), 391 deletions(-)

diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExchangeServiceImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExchangeServiceImpl.java
index bed5e6b..15cf232 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExchangeServiceImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExchangeServiceImpl.java
@@ -19,9 +19,9 @@ package org.apache.ignite.internal.processors.query.calcite.exec;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
-import com.google.common.collect.ImmutableMap;
 import org.apache.ignite.internal.processors.query.calcite.exec.rel.Inbox;
 import org.apache.ignite.internal.processors.query.calcite.exec.rel.Outbox;
 import org.apache.ignite.internal.processors.query.calcite.message.InboxCloseMessage;
@@ -257,7 +257,7 @@ public class ExchangeServiceImpl implements ExchangeService {
                 null,
                 null),
             null,
-            ImmutableMap.of());
+            Map.of());
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
index f2f2f6d..7e0ed83 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/ExecutionServiceImpl.java
@@ -28,7 +28,6 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.Contexts;
 import org.apache.calcite.plan.ConventionTraitDef;
 import org.apache.calcite.plan.RelOptUtil;
@@ -307,7 +306,7 @@ public class ExecutionServiceImpl<Row> implements ExecutionService {
 
     /** */
     private List<QueryPlan> prepareFragment(PlanningContext ctx) {
-        return ImmutableList.of(new FragmentPlan(fromJson(ctx, ctx.query())));
+        return List.of(new FragmentPlan(fromJson(ctx, ctx.query())));
     }
 
     /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/PlannerHelper.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/PlannerHelper.java
index 4d53326..01a57d8 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/PlannerHelper.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/PlannerHelper.java
@@ -19,8 +19,8 @@ package org.apache.ignite.internal.processors.query.calcite.exec;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.RelNode;
@@ -95,7 +95,7 @@ public class PlannerHelper {
                 igniteRel = new IgniteProject(igniteRel.getCluster(), desired, igniteRel, projects, root.validatedRowType);
             }
 
-            if (sqlNode.isA(ImmutableSet.of(SqlKind.INSERT, SqlKind.UPDATE, SqlKind.MERGE)))
+            if (sqlNode.isA(Set.of(SqlKind.INSERT, SqlKind.UPDATE, SqlKind.MERGE)))
                 igniteRel = new FixDependentModifyNodeShuttle().visit(igniteRel);
 
             return igniteRel;
@@ -207,7 +207,7 @@ public class PlannerHelper {
             if (scan instanceof IgniteTableScan)
                 return (IgniteRel)scan;
 
-            ImmutableSet<Integer> indexedCols = ImmutableSet.copyOf(
+            Set<Integer> indexedCols = Set.copyOf(
                 tbl.getIndex(((AbstractIndexScan)scan).indexName()).collation().getKeys());
 
             spoolNeeded = modifyNode.getUpdateColumnList().stream()
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactory.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactory.java
index 7255955..d48027d 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactory.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactory.java
@@ -23,7 +23,6 @@ import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.function.Supplier;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.core.AggregateCall;
@@ -111,7 +110,7 @@ public interface ExpressionFactory<Row> {
      * @return Scalar.
      */
     default Scalar scalar(RexNode node, RelDataType type) {
-        return scalar(ImmutableList.of(node), type);
+        return scalar(List.of(node), type);
     }
 
     /**
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactoryImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactoryImpl.java
index eb8260d..adbffaf 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactoryImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/ExpressionFactoryImpl.java
@@ -29,9 +29,6 @@ import java.util.function.Predicate;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Ordering;
-import com.google.common.primitives.Primitives;
 import org.apache.calcite.DataContext;
 import org.apache.calcite.adapter.enumerable.EnumUtils;
 import org.apache.calcite.linq4j.function.Function1;
@@ -65,6 +62,7 @@ import org.apache.ignite.internal.processors.query.calcite.exec.exp.agg.Aggregat
 import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 import org.apache.ignite.internal.processors.query.calcite.util.Commons;
 import org.apache.ignite.internal.processors.query.calcite.util.IgniteMethod;
+import org.apache.ignite.internal.processors.query.calcite.util.Primitives;
 
 import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 
@@ -119,7 +117,8 @@ public class ExpressionFactoryImpl<Row> implements ExpressionFactory<Row> {
             return null;
         else if (collation.getFieldCollations().size() == 1)
             return comparator(collation.getFieldCollations().get(0));
-        return Ordering.compound(collation.getFieldCollations()
+
+        return Commons.compoundComparator(collation.getFieldCollations()
             .stream()
             .map(this::comparator)
             .collect(Collectors.toList()));
@@ -136,7 +135,7 @@ public class ExpressionFactoryImpl<Row> implements ExpressionFactory<Row> {
         for (int i = 0; i < left.size(); i++)
             comparators.add(comparator(left.get(i), right.get(i)));
 
-        return Ordering.compound(comparators);
+        return Commons.compoundComparator(comparators);
     }
 
     /** */
@@ -291,7 +290,7 @@ public class ExpressionFactoryImpl<Row> implements ExpressionFactory<Row> {
 
         MethodDeclaration decl = Expressions.methodDecl(
             Modifier.PUBLIC, void.class, IgniteMethod.SCALAR_EXECUTE.method().getName(),
-            ImmutableList.of(ctx_, in_, out_), builder.toBlock());
+            List.of(ctx_, in_, out_), builder.toBlock());
 
         return Commons.compile(Scalar.class, Expressions.toString(List.of(decl), "\n", false));
     }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java
index 93dff87..330141d 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexImpTable.java
@@ -31,7 +31,6 @@ import java.util.Map;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.adapter.enumerable.EnumUtils;
 import org.apache.calcite.adapter.enumerable.NullPolicy;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
@@ -1107,7 +1106,7 @@ public class RexImpTable {
          * Types that can be arguments to comparison operators such as {@code <}.
          */
         private static final List<Primitive> COMP_OP_TYPES =
-            ImmutableList.of(
+            List.of(
                 Primitive.BYTE,
                 Primitive.CHAR,
                 Primitive.SHORT,
@@ -1118,7 +1117,7 @@ public class RexImpTable {
 
         /** */
         private static final List<SqlBinaryOperator> COMPARISON_OPERATORS =
-            ImmutableList.of(
+            List.of(
                 SqlStdOperatorTable.LESS_THAN,
                 SqlStdOperatorTable.LESS_THAN_OR_EQUAL,
                 SqlStdOperatorTable.GREATER_THAN,
@@ -1126,7 +1125,7 @@ public class RexImpTable {
 
         /** */
         private static final List<SqlBinaryOperator> EQUALS_OPERATORS =
-            ImmutableList.of(
+            List.of(
                 SqlStdOperatorTable.EQUALS,
                 SqlStdOperatorTable.NOT_EQUALS);
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexToLixTranslator.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexToLixTranslator.java
index b980735..2342908 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexToLixTranslator.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/RexToLixTranslator.java
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.adapter.enumerable.PhysType;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.avatica.util.ByteString;
@@ -1181,7 +1180,7 @@ public class RexToLixTranslator implements RexVisitor<RexToLixTranslator.Result>
                     builder.makeLiteral(fieldName, typeFactory.createType(String.class), true);
                 RexCall accessCall = (RexCall)builder.makeCall(
                     fieldAccess.getType(), SqlStdOperatorTable.STRUCT_ACCESS,
-                    ImmutableList.of(target, rxIndex, rxName));
+                    List.of(target, rxIndex, rxName));
                 final Result result2 = accessCall.accept(this);
                 rexWithStorageTypeResultMap.put(key, result2);
                 return result2;
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/AccumulatorsFactory.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/AccumulatorsFactory.java
index 4626623..f39b07d 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/AccumulatorsFactory.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/AccumulatorsFactory.java
@@ -19,15 +19,9 @@ package org.apache.ignite.internal.processors.query.calcite.exec.exp.agg;
 
 import java.lang.reflect.Modifier;
 import java.util.List;
-import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableList;
-import com.google.common.primitives.Primitives;
 import org.apache.calcite.DataContext;
 import org.apache.calcite.adapter.enumerable.EnumUtils;
 import org.apache.calcite.adapter.enumerable.JavaRowFormat;
@@ -52,7 +46,8 @@ import org.apache.ignite.internal.processors.query.calcite.exec.RowHandler;
 import org.apache.ignite.internal.processors.query.calcite.prepare.PlanningContext;
 import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 import org.apache.ignite.internal.processors.query.calcite.util.Commons;
-import org.apache.ignite.lang.IgniteInternalException;
+import org.apache.ignite.internal.processors.query.calcite.util.LocalCache;
+import org.apache.ignite.internal.processors.query.calcite.util.Primitives;
 import org.jetbrains.annotations.NotNull;
 
 import static org.apache.ignite.internal.processors.query.calcite.util.TypeUtils.createRowType;
@@ -61,8 +56,8 @@ import static org.apache.ignite.internal.util.CollectionUtils.nullOrEmpty;
 /** */
 public class AccumulatorsFactory<Row> implements Supplier<List<AccumulatorWrapper<Row>>> {
     /** */
-    private static final LoadingCache<Pair<RelDataType, RelDataType>, Function<Object, Object>> CACHE =
-        CacheBuilder.newBuilder().build(CacheLoader.from(AccumulatorsFactory::cast0));
+    private static final LocalCache<Pair<RelDataType, RelDataType>, Function<Object, Object>> CACHE =
+        new LocalCache<>(AccumulatorsFactory::cast0);
 
     /** */
     public static interface CastFunction extends Function<Object, Object> {
@@ -79,12 +74,7 @@ public class AccumulatorsFactory<Row> implements Supplier<List<AccumulatorWrappe
 
     /** */
     private static Function<Object, Object> cast(Pair<RelDataType, RelDataType> types) {
-        try {
-            return CACHE.get(types);
-        }
-        catch (ExecutionException e) {
-            throw new IgniteInternalException(e);
-        }
+        return CACHE.get(types);
     }
 
     /** */
@@ -114,7 +104,7 @@ public class AccumulatorsFactory<Row> implements Supplier<List<AccumulatorWrappe
 
         RexToLixTranslator.InputGetter getter =
             new RexToLixTranslator.InputGetterImpl(
-                ImmutableList.of(
+                List.of(
                     Pair.of(EnumUtils.convert(in_, Object.class, typeFactory.getJavaClass(from)),
                         PhysTypeImpl.of(typeFactory, rowType,
                             JavaRowFormat.SCALAR, false))));
@@ -130,7 +120,7 @@ public class AccumulatorsFactory<Row> implements Supplier<List<AccumulatorWrappe
         list.add(projects.get(0));
 
         MethodDeclaration decl = Expressions.methodDecl(
-            Modifier.PUBLIC, Object.class, "apply", ImmutableList.of(in_), list.toBlock());
+            Modifier.PUBLIC, Object.class, "apply", List.of(in_), list.toBlock());
 
         return Commons.compile(CastFunction.class, Expressions.toString(List.of(decl), "\n", false));
     }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java
index 17ce506..b099a30 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java
@@ -20,6 +20,7 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Modifier;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -29,11 +30,7 @@ import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
 import org.apache.calcite.avatica.AvaticaUtils;
 import org.apache.calcite.avatica.util.TimeUnit;
 import org.apache.calcite.avatica.util.TimeUnitRange;
@@ -103,6 +100,7 @@ import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistribut
 import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions;
 import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
 import org.apache.ignite.internal.processors.query.calcite.util.Commons;
+import org.apache.ignite.internal.processors.query.calcite.util.LocalCache;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.lang.IgniteException;
 
@@ -126,8 +124,7 @@ class RelJson {
     }
 
     /** */
-    private static final LoadingCache<String, RelFactory> FACTORIES_CACHE = CacheBuilder.newBuilder()
-        .build(CacheLoader.from(RelJson::relFactory));
+    private static final LocalCache<String, RelFactory> FACTORIES_CACHE = new LocalCache<>(RelJson::relFactory);
 
     /** */
     private static RelFactory relFactory(String typeName) {
@@ -164,15 +161,14 @@ class RelJson {
     }
 
     /** */
-    private static final ImmutableMap<String, Enum<?>> ENUM_BY_NAME;
+    private static final Map<String, Enum<?>> ENUM_BY_NAME;
 
     /** */
     static {
         // Build a mapping from enum constants (e.g. LEADING) to the enum
         // that contains them (e.g. SqlTrimFunction.Flag). If there two
         // enum constants have the same name, the builder will throw.
-        final ImmutableMap.Builder<String, Enum<?>> enumByName =
-            ImmutableMap.builder();
+        final Map<String, Enum<?>> enumByName = new HashMap<>();
 
         register(enumByName, JoinConditionType.class);
         register(enumByName, JoinType.class);
@@ -193,14 +189,14 @@ class RelJson {
         register(enumByName, SqlTrimFunction.Flag.class);
         register(enumByName, TimeUnitRange.class);
 
-        ENUM_BY_NAME = enumByName.build();
+        ENUM_BY_NAME = Map.copyOf(enumByName);
     }
 
     /** */
-    private static void register(ImmutableMap.Builder<String, Enum<?>> builder, Class<? extends Enum> aClass) {
+    private static void register(Map<String, Enum<?>> map, Class<? extends Enum> aClass) {
         String preffix = aClass.getSimpleName() + "#";
         for (Enum enumConstant : aClass.getEnumConstants())
-            builder.put(preffix + enumConstant.name(), enumConstant);
+            map.put(preffix + enumConstant.name(), enumConstant);
     }
 
     /** */
@@ -218,7 +214,7 @@ class RelJson {
 
     /** */
     private static final List<String> PACKAGES =
-        ImmutableList.of(
+        List.of(
             "org.apache.ignite.internal.processors.query.calcite.rel.",
             "org.apache.ignite.internal.processors.query.calcite.rel.agg.",
             "org.apache.ignite.internal.processors.query.calcite.rel.set.",
@@ -235,7 +231,7 @@ class RelJson {
 
     /** */
     Function<RelInput, RelNode> factory(String type) {
-        return FACTORIES_CACHE.getUnchecked(type);
+        return FACTORIES_CACHE.get(type);
     }
 
     /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonReader.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonReader.java
index 0d0a9a3..e2d8407 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonReader.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonReader.java
@@ -156,7 +156,7 @@ public class RelJsonReader {
         @Override public List<RelNode> getInputs() {
             List<String> jsonInputs = getStringList("inputs");
             if (jsonInputs == null)
-                return ImmutableList.of(lastRel);
+                return List.of(lastRel);
             List<RelNode> inputs = new ArrayList<>();
             for (String jsonInput : jsonInputs)
                 inputs.add(lookupInput(jsonInput));
@@ -176,13 +176,16 @@ public class RelJsonReader {
         /** {@inheritDoc} */
         @Override public List<ImmutableBitSet> getBitSetList(String tag) {
             List<List<Integer>> list = getIntegerListList(tag);
+
             if (list == null)
                 return null;
-            ImmutableList.Builder<ImmutableBitSet> builder =
-                ImmutableList.builder();
+
+            List<ImmutableBitSet> bitSets = new ArrayList<>();
+
             for (List<Integer> integers : list)
-                builder.add(ImmutableBitSet.of(integers));
-            return builder.build();
+                bitSets.add(ImmutableBitSet.of(integers));
+
+            return List.copyOf(bitSets);
         }
 
         /** {@inheritDoc} */
@@ -289,8 +292,10 @@ public class RelJsonReader {
             List<List> jsonTuples = (List)get(tag);
             ImmutableList.Builder<ImmutableList<RexLiteral>> builder =
                 ImmutableList.builder();
+
             for (List jsonTuple : jsonTuples)
                 builder.add(getTuple(jsonTuple));
+
             return builder.build();
         }
 
@@ -307,8 +312,10 @@ public class RelJsonReader {
         private ImmutableList<RexLiteral> getTuple(List jsonTuple) {
             ImmutableList.Builder<RexLiteral> builder =
                 ImmutableList.builder();
+
             for (Object jsonValue : jsonTuple)
                 builder.add((RexLiteral)relJson.toRex(this, jsonValue));
+
             return builder.build();
         }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdCollation.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdCollation.java
index d8a2974..fda198a 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdCollation.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdCollation.java
@@ -18,8 +18,12 @@
 package org.apache.ignite.internal.processors.query.calcite.metadata;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -28,9 +32,6 @@ import java.util.TreeSet;
 import java.util.stream.Collectors;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.LinkedListMultimap;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Ordering;
 import org.apache.calcite.adapter.enumerable.EnumerableCorrelate;
 import org.apache.calcite.adapter.enumerable.EnumerableHashJoin;
 import org.apache.calcite.adapter.enumerable.EnumerableMergeJoin;
@@ -294,14 +295,24 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
         final SortedSet<RelCollation> collations = new TreeSet<>();
         final List<RelCollation> inputCollations = mq.collations(input);
         if (inputCollations == null || inputCollations.isEmpty()) {
-            return ImmutableList.of();
+            return List.of();
         }
-        final Multimap<Integer, Integer> targets = LinkedListMultimap.create();
+        final Map<Integer, List<Integer>> targets = new HashMap<>();
         final Map<Integer, SqlMonotonicity> targetsWithMonotonicity =
             new HashMap<>();
         for (Ord<RexNode> project : Ord.<RexNode>zip(projects)) {
-            if (project.e instanceof RexInputRef)
-                targets.put(((RexSlot) project.e).getIndex(), project.i);
+            if (project.e instanceof RexInputRef) {
+                targets.compute(((RexSlot)project.e).getIndex(), (k, v) -> {
+                        if (v == null)
+                            return new ArrayList<>(Collections.singleton(project.i));
+                        else {
+                            v.add(project.i);
+
+                            return v;
+                        }
+                    }
+                );
+            }
             else if (project.e instanceof RexCall) {
                 final RexCall call = (RexCall) project.e;
                 final RexCallBinding binding =
@@ -355,7 +366,7 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
             collations.add(RelCollations.of(fieldCollationsForRexCalls));
         }
 
-        return ImmutableList.copyOf(collations);
+        return List.copyOf(collations);
     }
 
     /** Helper method to determine a
@@ -366,7 +377,7 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
      * implementation does not re-order its input rows, then any collations of its
      * input are preserved. */
     public static List<RelCollation> window(RelMetadataQuery mq, RelNode input,
-        ImmutableList<Window.Group> groups) {
+        List<Window.Group> groups) {
         return mq.collations(input);
     }
 
@@ -405,22 +416,26 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
         Util.discard(mq); // for future use
         final List<RelCollation> list = new ArrayList<>();
         final int n = rowType.getFieldCount();
-        final List<Pair<RelFieldCollation, Ordering<List<RexLiteral>>>> pairs =
+        final List<Pair<RelFieldCollation, Comparator<List<RexLiteral>>>> pairs =
             new ArrayList<>();
         boolean skip = false;
+
         for (int i = 0; i < n; i++) {
             pairs.clear();
             for (int j = i; j < n; j++) {
                 final RelFieldCollation fieldCollation = new RelFieldCollation(j);
-                Ordering<List<RexLiteral>> comparator = comparator(fieldCollation);
-                Ordering<List<RexLiteral>> ordering;
+
+                Comparator<List<RexLiteral>> comparator = comparator(fieldCollation);
+                Comparator<List<RexLiteral>> ordering;
+
                 if (pairs.isEmpty())
                     ordering = comparator;
                 else
-                    ordering = Util.last(pairs).right.compound(comparator);
+                    ordering = Commons.compoundComparator(Arrays.asList(Util.last(pairs).right, comparator));
 
                 pairs.add(Pair.of(fieldCollation, ordering));
-                if (!ordering.isOrdered(tuples)) {
+
+                if (!isOrdered(tuples, ordering)) {
                     if (j == i) {
                         skip = true;
 
@@ -435,33 +450,57 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
             if (!pairs.isEmpty())
                 list.add(RelCollations.of(Pair.left(pairs)));
         }
+
         return list;
     }
 
-    private static Ordering<List<RexLiteral>> comparator(
+    /** */
+    private static Comparator<List<RexLiteral>> comparator(
         RelFieldCollation fieldCollation) {
         final int nullComparison = fieldCollation.nullDirection.nullComparison;
         final int x = fieldCollation.getFieldIndex();
+
         switch (fieldCollation.direction) {
-            case ASCENDING:
-                return new Ordering<List<RexLiteral>>() {
-                    @Override public int compare(List<RexLiteral> o1, List<RexLiteral> o2) {
-                        final Comparable c1 = o1.get(x).getValueAs(Comparable.class);
-                        final Comparable c2 = o2.get(x).getValueAs(Comparable.class);
-                        return RelFieldCollation.compare(c1, c2, nullComparison);
-                    }
+            case ASCENDING: {
+                return (o1, o2) -> {
+                    final Comparable c1 = o1.get(x).getValueAs(Comparable.class);
+                    final Comparable c2 = o2.get(x).getValueAs(Comparable.class);
+
+                    return RelFieldCollation.compare(c1, c2, nullComparison);
                 };
-            default:
-                return new Ordering<List<RexLiteral>>() {
-                    @Override public int compare(List<RexLiteral> o1, List<RexLiteral> o2) {
-                        final Comparable c1 = o1.get(x).getValueAs(Comparable.class);
-                        final Comparable c2 = o2.get(x).getValueAs(Comparable.class);
-                        return RelFieldCollation.compare(c2, c1, -nullComparison);
-                    }
+            }
+            default: {
+                return (o1, o2) -> {
+                    final Comparable c1 = o1.get(x).getValueAs(Comparable.class);
+                    final Comparable c2 = o2.get(x).getValueAs(Comparable.class);
+
+                    return RelFieldCollation.compare(c2, c1, nullComparison);
                 };
+            }
         }
     }
 
+    /** */
+    public static <T> boolean isOrdered(Iterable<? extends T> iterable, Comparator<T> cmp) {
+        Iterator<? extends T> it = iterable.iterator();
+
+        if (it.hasNext()) {
+            T prev = it.next();
+
+            while (it.hasNext()) {
+                T next = it.next();
+
+                if (cmp.compare(prev, next) > 0) {
+                    return false;
+                }
+
+                prev = next;
+            }
+        }
+
+        return true;
+    }
+
     /** Helper method to determine a {@link Join}'s collation assuming that it
      * uses a merge-join algorithm.
      *
@@ -486,24 +525,24 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
         assert EnumerableMergeJoin.isMergeJoinSupported(joinType)
             : "EnumerableMergeJoin unsupported for join type " + joinType;
 
-        final ImmutableList<RelCollation> leftCollations = mq.collations(left);
+        final List<RelCollation> leftCollations = mq.collations(left);
         assert RelCollations.contains(leftCollations, leftKeys)
             : "cannot merge join: left input is not sorted on left keys";
         if (!joinType.projectsRight()) {
             return leftCollations;
         }
 
-        final ImmutableList.Builder<RelCollation> builder = ImmutableList.builder();
-        builder.addAll(leftCollations);
+        final List<RelCollation> collations = new ArrayList<>();
+        collations.addAll(leftCollations);
 
-        final ImmutableList<RelCollation> rightCollations = mq.collations(right);
+        final List<RelCollation> rightCollations = mq.collations(right);
         assert RelCollations.contains(rightCollations, rightKeys)
             : "cannot merge join: right input is not sorted on right keys";
         final int leftFieldCount = left.getRowType().getFieldCount();
         for (RelCollation collation : rightCollations) {
-            builder.add(RelCollations.shift(collation, leftFieldCount));
+            collations.add(RelCollations.shift(collation, leftFieldCount));
         }
-        return builder.build();
+        return List.copyOf(collations);
     }
 
     /**
@@ -551,7 +590,7 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
         // following conditions hold:
         // (i) join type is INNER or LEFT;
         // (ii) RelCollation always orders nulls last.
-        final ImmutableList<RelCollation> leftCollations = mq.collations(left);
+        final List<RelCollation> leftCollations = mq.collations(left);
         switch (joinType) {
             case SEMI:
             case ANTI:
@@ -563,12 +602,12 @@ public class IgniteMdCollation implements MetadataHandler<BuiltInMetadata.Collat
                 for (RelCollation collation : leftCollations) {
                     for (RelFieldCollation field : collation.getFieldCollations()) {
                         if (!(RelFieldCollation.NullDirection.LAST == field.nullDirection)) {
-                            return ImmutableList.of();
+                            return List.of();
                         }
                     }
                 }
                 return leftCollations;
         }
-        return ImmutableList.of();
+        return List.of();
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentMapping.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentMapping.java
index e16ce58..82c8c75 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentMapping.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMdFragmentMapping.java
@@ -17,7 +17,8 @@
 
 package org.apache.ignite.internal.processors.query.calcite.metadata;
 
-import com.google.common.collect.ImmutableList;
+import java.util.List;
+
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.volcano.RelSubset;
 import org.apache.calcite.rel.BiRel;
@@ -108,8 +109,8 @@ public class IgniteMdFragmentMapping implements MetadataHandler<FragmentMappingM
             IgniteExchange lExch = new IgniteExchange(rel.getCluster(), left.getTraitSet(), left, TraitUtils.distribution(left));
             IgniteExchange rExch = new IgniteExchange(rel.getCluster(), right.getTraitSet(), right, TraitUtils.distribution(right));
 
-            RelNode lVar = rel.copy(rel.getTraitSet(), ImmutableList.of(lExch, right));
-            RelNode rVar = rel.copy(rel.getTraitSet(), ImmutableList.of(left, rExch));
+            RelNode lVar = rel.copy(rel.getTraitSet(), List.of(lExch, right));
+            RelNode rVar = rel.copy(rel.getTraitSet(), List.of(left, rExch));
 
             RelOptCost lVarCost = mq.getCumulativeCost(lVar);
             RelOptCost rVarCost = mq.getCumulativeCost(rVar);
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMetadata.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMetadata.java
index 1b71fc1..3e1a010 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMetadata.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/metadata/IgniteMetadata.java
@@ -17,7 +17,8 @@
 
 package org.apache.ignite.internal.processors.query.calcite.metadata;
 
-import com.google.common.collect.ImmutableList;
+import java.util.List;
+
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.metadata.ChainedRelMetadataProvider;
 import org.apache.calcite.rel.metadata.DefaultRelMetadataProvider;
@@ -35,7 +36,7 @@ public class IgniteMetadata {
     /** */
     public static final RelMetadataProvider METADATA_PROVIDER =
         ChainedRelMetadataProvider.of(
-            ImmutableList.of(
+            List.of(
                 // Ignite specific providers
                 IgniteMdFragmentMapping.SOURCE,
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java
index af89e28..297f514 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java
@@ -17,7 +17,9 @@
 
 package org.apache.ignite.internal.processors.query.calcite.prepare;
 
-import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
@@ -58,7 +60,7 @@ public class Cloner implements IgniteRelVisitor<IgniteRel> {
     private final RelOptCluster cluster;
 
     /** */
-    private ImmutableList.Builder<IgniteReceiver> remotes;
+    private List<IgniteReceiver> remotes;
 
     /** */
     Cloner(RelOptCluster cluster) {
@@ -73,12 +75,11 @@ public class Cloner implements IgniteRelVisitor<IgniteRel> {
      */
     public Fragment go(Fragment src) {
         try {
-            remotes = ImmutableList.builder();
+            remotes = new ArrayList<>();
 
             IgniteRel newRoot = visit(src.root());
-            ImmutableList<IgniteReceiver> remotes = this.remotes.build();
 
-            return new Fragment(src.fragmentId(), newRoot, remotes, src.serialized(), src.mapping());
+            return new Fragment(src.fragmentId(), newRoot, List.copyOf(remotes), src.serialized(), src.mapping());
         }
         finally {
             remotes = null;
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ExecutionPlan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ExecutionPlan.java
index 53dc4fa..6676d2f 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ExecutionPlan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ExecutionPlan.java
@@ -19,8 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.prepare;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
-
 /**
  *
  */
@@ -29,12 +27,12 @@ class ExecutionPlan {
     private final long ver;
 
     /** */
-    private final ImmutableList<Fragment> fragments;
+    private final List<Fragment> fragments;
 
     /** */
     ExecutionPlan(long ver, List<Fragment> fragments) {
         this.ver = ver;
-        this.fragments = ImmutableList.copyOf(fragments);
+        this.fragments = List.copyOf(fragments);
     }
 
     /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Fragment.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Fragment.java
index 9f85b0e..a5f92b7 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Fragment.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Fragment.java
@@ -21,7 +21,6 @@ import java.util.List;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.function.Supplier;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.rel.metadata.RelMetadataQuery;
@@ -60,7 +59,7 @@ public class Fragment {
     private final FragmentMapping mapping;
 
     /** */
-    private final ImmutableList<IgniteReceiver> remotes;
+    private final List<IgniteReceiver> remotes;
 
     /**
      * @param id Fragment id.
@@ -75,7 +74,7 @@ public class Fragment {
     Fragment(long id, IgniteRel root, List<IgniteReceiver> remotes, @Nullable String rootSer, @Nullable FragmentMapping mapping) {
         this.id = id;
         this.root = root;
-        this.remotes = ImmutableList.copyOf(remotes);
+        this.remotes = List.copyOf(remotes);
         this.rootSer = rootSer != null ? rootSer : toJson(root);
         this.mapping = mapping;
     }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java
index a9d31ca..09dacc0 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/FragmentSplitter.java
@@ -22,7 +22,6 @@ import java.util.Deque;
 import java.util.LinkedList;
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelNode;
@@ -128,7 +127,7 @@ public class FragmentSplitter extends IgniteRelShuttle {
         private IgniteRel root;
 
         /** */
-        private final ImmutableList.Builder<IgniteReceiver> remotes = ImmutableList.builder();
+        private final List<IgniteReceiver> remotes = new ArrayList<>();
 
         /** */
         private FragmentProto(long id, IgniteRel root) {
@@ -138,7 +137,7 @@ public class FragmentSplitter extends IgniteRelShuttle {
 
         /** */
         Fragment build() {
-            return new Fragment(id, root, remotes.build());
+            return new Fragment(id, root, List.copyOf(remotes));
         }
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
index 5a2ba88..146795f 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
@@ -24,7 +24,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.Context;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
@@ -75,7 +74,7 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
     private final SqlOperatorTable operatorTbl;
 
     /** */
-    private final ImmutableList<Program> programs;
+    private final List<Program> programs;
 
     /** */
     private final FrameworkConfig frameworkCfg;
@@ -85,7 +84,7 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
 
     /** */
     @SuppressWarnings("rawtypes")
-    private final ImmutableList<RelTraitDef> traitDefs;
+    private final List<RelTraitDef> traitDefs;
 
     /** */
     private final SqlParser.Config parserCfg;
@@ -314,7 +313,7 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
 
     /** */
     private List<RelOptLattice> latices() {
-        return ImmutableList.of(); // TODO
+        return List.of(); // TODO
     }
 
     /**
@@ -322,7 +321,7 @@ public class IgnitePlanner implements Planner, RelOptTable.ViewExpander {
      * @return Materializations.
      */
     private List<RelOptMaterialization> materializations() {
-        return ImmutableList.of(); // TODO
+        return List.of(); // TODO
     }
 
     /**
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java
index ef57eda..8118f7f 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerHelper.java
@@ -19,8 +19,8 @@ package org.apache.ignite.internal.processors.query.calcite.prepare;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.RelNode;
@@ -94,7 +94,7 @@ public class PlannerHelper {
                 igniteRel = new IgniteProject(igniteRel.getCluster(), desired, igniteRel, projects, root.validatedRowType);
             }
 
-            if (sqlNode.isA(ImmutableSet.of(SqlKind.INSERT, SqlKind.UPDATE, SqlKind.MERGE)))
+            if (sqlNode.isA(Set.of(SqlKind.INSERT, SqlKind.UPDATE, SqlKind.MERGE)))
                 igniteRel = new FixDependentModifyNodeShuttle().visit(igniteRel);
 
             return igniteRel;
@@ -208,7 +208,7 @@ public class PlannerHelper {
             if (scan instanceof IgniteTableScan)
                 return (IgniteRel)scan;
 
-            ImmutableSet<Integer> indexedCols = ImmutableSet.copyOf(
+            Set<Integer> indexedCols = Set.copyOf(
                 tbl.getIndex(((AbstractIndexScan)scan).indexName()).collation().getKeys());
 
             spoolNeeded = modifyNode.getUpdateColumnList().stream()
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryTemplate.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryTemplate.java
index 5e2a7c2..2075062 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryTemplate.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryTemplate.java
@@ -24,7 +24,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicReference;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.ignite.internal.processors.query.calcite.metadata.FragmentMappingException;
 import org.apache.ignite.internal.processors.query.calcite.metadata.MappingService;
@@ -43,7 +42,7 @@ public class QueryTemplate {
     private final MappingService mappingService;
 
     /** */
-    private final ImmutableList<Fragment> fragments;
+    private final List<Fragment> fragments;
 
     /** */
     private final AtomicReference<ExecutionPlan> executionPlan = new AtomicReference<>();
@@ -52,11 +51,11 @@ public class QueryTemplate {
     public QueryTemplate(MappingService mappingService, List<Fragment> fragments) {
         this.mappingService = mappingService;
 
-        ImmutableList.Builder<Fragment> b = ImmutableList.builder();
+        List<Fragment> frgs = new ArrayList<>(fragments.size());
         for (Fragment fragment : fragments)
-            b.add(fragment.detach());
+            frgs.add(fragment.detach());
 
-        this.fragments = b.build();
+        this.fragments = List.copyOf(frgs);
     }
 
     /** */
@@ -93,11 +92,12 @@ public class QueryTemplate {
 
     /** */
     @NotNull private List<Fragment> map(List<Fragment> fragments, PlanningContext ctx, RelMetadataQuery mq) {
-        ImmutableList.Builder<Fragment> b = ImmutableList.builder();
+        List<Fragment> frgs = new ArrayList<>();
+
         for (Fragment fragment : fragments)
-            b.add(fragment.map(mappingService, ctx, mq).detach());
+            frgs.add(fragment.map(mappingService, ctx, mq).detach());
 
-        return b.build();
+        return List.copyOf(frgs);
     }
 
     /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Splitter.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Splitter.java
index ec0dd76..b623c3f 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Splitter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Splitter.java
@@ -22,7 +22,6 @@ import java.util.Deque;
 import java.util.LinkedList;
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteIndexScan;
@@ -109,7 +108,7 @@ public class Splitter extends IgniteRelShuttle {
         private IgniteRel root;
 
         /** */
-        private final ImmutableList.Builder<IgniteReceiver> remotes = ImmutableList.builder();
+        private final List<IgniteReceiver> remotes = new ArrayList<>();
 
         /** */
         private FragmentProto(long id, IgniteRel root) {
@@ -119,7 +118,7 @@ public class Splitter extends IgniteRelShuttle {
 
         /** */
         Fragment build() {
-            return new Fragment(id, root, remotes.build());
+            return new Fragment(id, root, List.copyOf(remotes));
         }
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/AbstractIgniteJoin.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/AbstractIgniteJoin.java
index 59d2ad6..c7fb0ec 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/AbstractIgniteJoin.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/AbstractIgniteJoin.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollation;
@@ -99,7 +98,7 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
         RelTraitSet leftTraits = left.replace(collation);
         RelTraitSet rightTraits = right.replace(RelCollations.EMPTY);
 
-        return ImmutableList.of(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
+        return List.of(Pair.of(outTraits, List.of(leftTraits, rightTraits)));
     }
 
     /** {@inheritDoc} */
@@ -114,13 +113,13 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
         List<Pair<RelTraitSet, List<RelTraitSet>>> pairs = new ArrayList<>();
 
         pairs.add(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
-            ImmutableList.of(left.replace(RewindabilityTrait.ONE_WAY), right.replace(RewindabilityTrait.ONE_WAY))));
+            List.of(left.replace(RewindabilityTrait.ONE_WAY), right.replace(RewindabilityTrait.ONE_WAY))));
 
         if (leftRewindability.rewindable() && rightRewindability.rewindable())
             pairs.add(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE),
-                ImmutableList.of(left.replace(RewindabilityTrait.REWINDABLE), right.replace(RewindabilityTrait.REWINDABLE))));
+                List.of(left.replace(RewindabilityTrait.REWINDABLE), right.replace(RewindabilityTrait.REWINDABLE))));
 
-        return ImmutableList.copyOf(pairs);
+        return List.copyOf(pairs);
     }
 
     /** {@inheritDoc} */
@@ -159,17 +158,17 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
             rightTraits = right.replace(single());
         }
 
-        res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
+        res.add(Pair.of(outTraits, List.of(leftTraits, rightTraits)));
 
         if (nullOrEmpty(joinInfo.pairs()))
-            return ImmutableList.copyOf(res);
+            return List.copyOf(res);
 
         if (leftDistr.getType() == HASH_DISTRIBUTED && left2rightProjectedDistr != random()) {
             outTraits = nodeTraits.replace(leftDistr);
             leftTraits = left.replace(leftDistr);
             rightTraits = right.replace(left2rightProjectedDistr);
 
-            res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
+            res.add(Pair.of(outTraits, List.of(leftTraits, rightTraits)));
         }
 
         if (rightDistr.getType() == HASH_DISTRIBUTED && right2leftProjectedDistr != random()) {
@@ -177,19 +176,19 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
             leftTraits = left.replace(right2leftProjectedDistr);
             rightTraits = right.replace(rightDistr);
 
-            res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
+            res.add(Pair.of(outTraits, List.of(leftTraits, rightTraits)));
         }
 
         leftTraits = left.replace(hash(joinInfo.leftKeys, DistributionFunction.hash()));
         rightTraits = right.replace(hash(joinInfo.rightKeys, DistributionFunction.hash()));
 
         outTraits = nodeTraits.replace(hash(joinInfo.leftKeys, DistributionFunction.hash()));
-        res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
+        res.add(Pair.of(outTraits, List.of(leftTraits, rightTraits)));
 
         outTraits = nodeTraits.replace(hash(joinInfo.rightKeys, DistributionFunction.hash()));
-        res.add(Pair.of(outTraits, ImmutableList.of(leftTraits, rightTraits)));
+        res.add(Pair.of(outTraits, List.of(leftTraits, rightTraits)));
 
-        return ImmutableList.copyOf(res);
+        return List.copyOf(res);
     }
 
     /** {@inheritDoc} */
@@ -200,7 +199,7 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
         // right correlations
         corrIds.addAll(TraitUtils.correlation(inTraits.get(1)).correlationIds());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
+        return List.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
     }
 
     /** {@inheritDoc} */
@@ -215,7 +214,7 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
 
         if (collation.equals(RelCollations.EMPTY))
             return Pair.of(nodeTraits,
-                ImmutableList.of(left.replace(RelCollations.EMPTY), right.replace(RelCollations.EMPTY)));
+                List.of(left.replace(RelCollations.EMPTY), right.replace(RelCollations.EMPTY)));
 
         if (!projectsLeft(collation))
             collation = RelCollations.EMPTY;
@@ -229,7 +228,7 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
         }
 
         return Pair.of(nodeTraits.replace(collation),
-            ImmutableList.of(left.replace(collation), right.replace(RelCollations.EMPTY)));
+            List.of(left.replace(collation), right.replace(RelCollations.EMPTY)));
     }
 
     /** {@inheritDoc} */
@@ -273,7 +272,7 @@ public abstract class AbstractIgniteJoin extends Join implements TraitsAwareIgni
 
                 if (distrType != HASH_DISTRIBUTED || outDistr.satisfies(distribution)) {
                     return Pair.of(nodeTraits.replace(outDistr),
-                        ImmutableList.of(left.replace(outDistr), right.replace(hash(joinInfo.rightKeys, function))));
+                        List.of(left.replace(outDistr), right.replace(hash(joinInfo.rightKeys, function))));
                 }
 
                 break;
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteAggregate.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteAggregate.java
index 3b85c31..d090286 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteAggregate.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteAggregate.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -48,7 +47,7 @@ public abstract class IgniteAggregate extends Aggregate implements IgniteRel {
         List<ImmutableBitSet> groupSets,
         List<AggregateCall> aggCalls
     ) {
-        super(cluster, traitSet, ImmutableList.of(), input, groupSet, groupSets, aggCalls);
+        super(cluster, traitSet, List.of(), input, groupSet, groupSets, aggCalls);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCorrelatedNestedLoopJoin.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCorrelatedNestedLoopJoin.java
index 76c576c..abcf3d5 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCorrelatedNestedLoopJoin.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCorrelatedNestedLoopJoin.java
@@ -21,8 +21,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -81,7 +79,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
             input.getInputs().get(0),
             input.getInputs().get(1),
             input.getExpression("condition"),
-            ImmutableSet.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
+            Set.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
             input.getEnum("joinType", JoinRelType.class));
     }
 
@@ -107,7 +105,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
         List<Integer> newRightCollationFields = maxPrefix(rightCollation.getKeys(), joinInfo.leftKeys);
 
         if (nullOrEmpty(newRightCollationFields))
-            return ImmutableList.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY), inputTraits));
+            return List.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY), inputTraits));
 
         // We preserve left edge collation only if batch size == 1
         if (variablesSet.size() == 1)
@@ -115,7 +113,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
         else
             nodeTraits = nodeTraits.replace(RelCollations.EMPTY);
 
-        return ImmutableList.of(Pair.of(nodeTraits, inputTraits));
+        return List.of(Pair.of(nodeTraits, inputTraits));
     }
 
     /** {@inheritDoc} */
@@ -128,8 +126,8 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
 
         RewindabilityTrait rewindability = TraitUtils.rewindability(left);
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(rewindability),
-            ImmutableList.of(left, right.replace(RewindabilityTrait.REWINDABLE))));
+        return List.of(Pair.of(nodeTraits.replace(rewindability),
+            List.of(left, right.replace(RewindabilityTrait.REWINDABLE))));
     }
 
     /** {@inheritDoc} */
@@ -145,7 +143,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
 
             return Pair.of(
                 baseTraits.getKey(),
-                ImmutableList.of(
+                List.of(
                     baseTraits.getValue().get(0),
                     baseTraits.getValue().get(1)
                 )
@@ -153,7 +151,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
         }
 
         return Pair.of(nodeTraits.replace(RelCollations.EMPTY),
-            ImmutableList.of(left.replace(RelCollations.EMPTY), right));
+            List.of(left.replace(RelCollations.EMPTY), right));
     }
 
     /** {@inheritDoc} */
@@ -164,7 +162,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
         RewindabilityTrait rewindability = TraitUtils.rewindability(nodeTraits);
 
         return Pair.of(nodeTraits.replace(rewindability),
-            ImmutableList.of(left.replace(rewindability), right.replace(RewindabilityTrait.REWINDABLE)));
+            List.of(left.replace(rewindability), right.replace(RewindabilityTrait.REWINDABLE)));
     }
 
     /** {@inheritDoc} */
@@ -196,7 +194,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
         selfCorrIds.addAll(nodeCorr.correlationIds());
 
         return Pair.of(nodeTraits,
-            ImmutableList.of(
+            List.of(
                 inTraits.get(0).replace(nodeCorr),
                 inTraits.get(1).replace(CorrelationTrait.correlations(selfCorrIds))
             )
@@ -209,7 +207,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
         Set<CorrelationId> rightCorrIds = TraitUtils.correlation(inTraits.get(1)).correlationIds();
 
         if (!rightCorrIds.containsAll(variablesSet))
-            return ImmutableList.of();
+            return List.of();
 
         Set<CorrelationId> corrIds = new HashSet<>(rightCorrIds);
 
@@ -218,7 +216,7 @@ public class IgniteCorrelatedNestedLoopJoin extends AbstractIgniteJoin {
 
         corrIds.removeAll(variablesSet);
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
+        return List.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteFilter.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteFilter.java
index d848f9c..1800ef5 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteFilter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteFilter.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel;
 import java.util.List;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -80,23 +79,23 @@ public class IgniteFilter extends Filter implements TraitsAwareIgniteRel {
     @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveRewindability(RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits) {
         if (!TraitUtils.rewindability(inTraits.get(0)).rewindable() && RexUtils.hasCorrelation(getCondition()))
-            return ImmutableList.of();
+            return List.of();
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.rewindability(inTraits.get(0))),
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.rewindability(inTraits.get(0))),
             inTraits));
     }
 
     /** {@inheritDoc} */
     @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveDistribution(RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.distribution(inTraits.get(0))),
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.distribution(inTraits.get(0))),
             inTraits));
     }
 
     /** {@inheritDoc} */
     @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.collation(inTraits.get(0))),
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.collation(inTraits.get(0))),
             inTraits));
     }
 
@@ -108,7 +107,7 @@ public class IgniteFilter extends Filter implements TraitsAwareIgniteRel {
         CorrelationTrait correlation = TraitUtils.correlation(nodeTraits);
 
         if (corrSet.isEmpty() || correlation.correlationIds().containsAll(corrSet))
-            return Pair.of(nodeTraits, ImmutableList.of(inTraits.get(0).replace(correlation)));
+            return Pair.of(nodeTraits, List.of(inTraits.get(0).replace(correlation)));
 
         return null;
     }
@@ -120,7 +119,7 @@ public class IgniteFilter extends Filter implements TraitsAwareIgniteRel {
 
         corrIds.addAll(TraitUtils.correlation(inTraits.get(0)).correlationIds());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
+        return List.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteIndexScan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteIndexScan.java
index d2dbe0c..484c2ef 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteIndexScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteIndexScan.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
@@ -113,7 +112,7 @@ public class IgniteIndexScan extends AbstractIndexScan implements SourceAwareIgn
         @Nullable IndexConditions idxCond,
         @Nullable ImmutableBitSet requiredCols
     ) {
-        super(cluster, traits, ImmutableList.of(), tbl, idxName, proj, cond, idxCond, requiredCols);
+        super(cluster, traits, List.of(), tbl, idxName, proj, cond, idxCond, requiredCols);
 
         this.sourceId = sourceId;
     }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteLimit.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteLimit.java
index bef81a9..cb9e095 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteLimit.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteLimit.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -105,7 +104,7 @@ public class IgniteLimit extends SingleRel implements IgniteRel {
         if (required.getConvention() != IgniteConvention.INSTANCE)
             return null;
 
-        return Pair.of(required, ImmutableList.of(required));
+        return Pair.of(required, List.of(required));
     }
 
     /** {@inheritDoc} */
@@ -115,7 +114,7 @@ public class IgniteLimit extends SingleRel implements IgniteRel {
         if (childTraits.getConvention() != IgniteConvention.INSTANCE)
             return null;
 
-        return Pair.of(childTraits, ImmutableList.of(childTraits));
+        return Pair.of(childTraits, List.of(childTraits));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteMergeJoin.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteMergeJoin.java
index c5432b6..fbcde09 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteMergeJoin.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteMergeJoin.java
@@ -24,8 +24,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -85,7 +83,7 @@ public class IgniteMergeJoin extends AbstractIgniteJoin {
             input.getInputs().get(0),
             input.getInputs().get(1),
             input.getExpression("condition"),
-            ImmutableSet.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
+            Set.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
             input.getEnum("joinType", JoinRelType.class),
             ((RelInputEx)input).getCollation("leftCollation"),
             ((RelInputEx)input).getCollation("rightCollation")
@@ -147,10 +145,10 @@ public class IgniteMergeJoin extends AbstractIgniteJoin {
             rightCollation = RelCollations.of(joinInfo.rightKeys);
         }
 
-        return ImmutableList.of(
+        return List.of(
             Pair.of(
                 nodeTraits.replace(leftCollation),
-                ImmutableList.of(
+                List.of(
                     left.replace(leftCollation),
                     right.replace(rightCollation)
                 )
@@ -228,7 +226,7 @@ public class IgniteMergeJoin extends AbstractIgniteJoin {
 
         return Pair.of(
             nodeTraits.replace(preserveNodeCollation ? collation : leftCollation),
-            ImmutableList.of(
+            List.of(
                 left.replace(leftCollation),
                 right.replace(rightCollation)
             )
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteNestedLoopJoin.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteNestedLoopJoin.java
index 17c3024..8c53506 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteNestedLoopJoin.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteNestedLoopJoin.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel;
 import java.util.List;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -69,7 +68,7 @@ public class IgniteNestedLoopJoin extends AbstractIgniteJoin {
             input.getInputs().get(0),
             input.getInputs().get(1),
             input.getExpression("condition"),
-            ImmutableSet.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
+            Set.copyOf(Commons.transform(input.getIntegerList("variablesSet"), CorrelationId::new)),
             input.getEnum("joinType", JoinRelType.class));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteProject.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteProject.java
index 0bc33bc..a7f54de 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteProject.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteProject.java
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.linq4j.Ord;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
@@ -101,7 +100,7 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         IgniteDistribution distribution = TraitUtils.distribution(nodeTraits);
 
         if (distribution.getType() != HASH_DISTRIBUTED)
-            return Pair.of(nodeTraits, ImmutableList.of(in.replace(distribution)));
+            return Pair.of(nodeTraits, List.of(in.replace(distribution)));
 
         Mappings.TargetMapping mapping = getPartialMapping(
             input.getRowType().getFieldCount(), getProjects());
@@ -119,9 +118,9 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         }
 
         if (srcKeys.size() == keys.size())
-            return Pair.of(nodeTraits, ImmutableList.of(in.replace(hash(srcKeys, distribution.function()))));
+            return Pair.of(nodeTraits, List.of(in.replace(hash(srcKeys, distribution.function()))));
 
-        return Pair.of(nodeTraits.replace(single()), ImmutableList.of(in.replace(single())));
+        return Pair.of(nodeTraits.replace(single()), List.of(in.replace(single())));
     }
 
     /** {@inheritDoc} */
@@ -134,7 +133,7 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         List<RelFieldCollation> fieldCollations = TraitUtils.collation(nodeTraits).getFieldCollations();
 
         if (fieldCollations.isEmpty())
-            return Pair.of(nodeTraits, ImmutableList.of(in.replace(RelCollations.EMPTY)));
+            return Pair.of(nodeTraits, List.of(in.replace(RelCollations.EMPTY)));
 
         Map<Integer, Integer> targets = new HashMap<>();
         for (Ord<RexNode> project : Ord.zip(getProjects())) {
@@ -152,9 +151,9 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         }
 
         if (inFieldCollations.size() == fieldCollations.size())
-            return Pair.of(nodeTraits, ImmutableList.of(in.replace(RelCollations.of(inFieldCollations))));
+            return Pair.of(nodeTraits, List.of(in.replace(RelCollations.of(inFieldCollations))));
 
-        return Pair.of(nodeTraits.replace(RelCollations.EMPTY), ImmutableList.of(in.replace(RelCollations.EMPTY)));
+        return Pair.of(nodeTraits.replace(RelCollations.EMPTY), List.of(in.replace(RelCollations.EMPTY)));
     }
 
     /** {@inheritDoc} */
@@ -164,7 +163,7 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         RelTraitSet in = inputTraits.get(0);
         RewindabilityTrait rewindability = TraitUtils.rewindability(in);
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(rewindability), ImmutableList.of(in)));
+        return List.of(Pair.of(nodeTraits.replace(rewindability), List.of(in)));
     }
 
     /** {@inheritDoc} */
@@ -174,7 +173,7 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         IgniteDistribution distribution = TraitUtils.projectDistribution(
             TraitUtils.distribution(in), getProjects(), getInput().getRowType());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(distribution), ImmutableList.of(in)));
+        return List.of(Pair.of(nodeTraits.replace(distribution), List.of(in)));
     }
 
     /** {@inheritDoc} */
@@ -184,7 +183,7 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         RelCollation collation = TraitUtils.projectCollation(
             TraitUtils.collation(in), getProjects(), getInput().getRowType());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(collation), ImmutableList.of(in)));
+        return List.of(Pair.of(nodeTraits.replace(collation), List.of(in)));
     }
 
     /** */
@@ -196,7 +195,7 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
         if (!traitCorrIds.containsAll(corrIds))
             return null;
 
-        return Pair.of(nodeTraits, ImmutableList.of(inTraits.get(0).replace(TraitUtils.correlation(nodeTraits))));
+        return Pair.of(nodeTraits, List.of(inTraits.get(0).replace(TraitUtils.correlation(nodeTraits))));
     }
 
     /** */
@@ -206,7 +205,7 @@ public class IgniteProject extends Project implements TraitsAwareIgniteRel {
 
         corrIds.addAll(TraitUtils.correlation(inTraits.get(0)).correlationIds());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
+        return List.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(corrIds)), inTraits));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteSort.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteSort.java
index b0cf10e..e79f2f5 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteSort.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteSort.java
@@ -18,7 +18,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -93,7 +92,7 @@ public class IgniteSort extends Sort implements IgniteRel {
 
         RelCollation collation = TraitUtils.collation(required);
 
-        return Pair.of(required.replace(collation), ImmutableList.of(required.replace(RelCollations.EMPTY)));
+        return Pair.of(required.replace(collation), List.of(required.replace(RelCollations.EMPTY)));
     }
 
     /** {@inheritDoc} */
@@ -103,7 +102,7 @@ public class IgniteSort extends Sort implements IgniteRel {
         if (isEnforcer() || childTraits.getConvention() != IgniteConvention.INSTANCE)
             return null;
 
-        return Pair.of(childTraits.replace(collation()), ImmutableList.of(childTraits));
+        return Pair.of(childTraits.replace(collation()), List.of(childTraits));
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableFunctionScan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableFunctionScan.java
index 031fdeb..f6cf444 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableFunctionScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableFunctionScan.java
@@ -21,7 +21,6 @@ import java.lang.reflect.Type;
 import java.util.List;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelInput;
@@ -51,7 +50,7 @@ public class IgniteTableFunctionScan extends TableFunctionScan implements Ignite
         RexNode call,
         RelDataType rowType
     ) {
-        super(cluster, traits, ImmutableList.of(), call, null, rowType, null);
+        super(cluster, traits, List.of(), call, null, rowType, null);
     }
 
     /**
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableScan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableScan.java
index 0668173..0a1cca4 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteTableScan.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.query.calcite.rel;
 
 import java.util.List;
-import com.google.common.collect.ImmutableList;
+
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
@@ -104,7 +104,7 @@ public class IgniteTableScan extends ProjectableFilterableTableScan implements S
         @Nullable RexNode cond,
         @Nullable ImmutableBitSet requiredColunms
     ) {
-        super(cluster, traits, ImmutableList.of(), tbl, proj, cond, requiredColunms);
+        super(cluster, traits, List.of(), tbl, proj, cond, requiredColunms);
         this.sourceId = sourceId;
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteUnionAll.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteUnionAll.java
index 36e5b2d..d5b5446 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteUnionAll.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteUnionAll.java
@@ -17,11 +17,11 @@
 
 package org.apache.ignite.internal.processors.query.calcite.rel;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -88,9 +88,9 @@ public class IgniteUnionAll extends Union implements TraitsAwareIgniteRel {
             .allMatch(RewindabilityTrait::rewindable);
 
         if (rewindable)
-            return ImmutableList.of(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE), inputTraits));
+            return List.of(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE), inputTraits));
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
+        return List.of(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
             Commons.transform(inputTraits, t -> t.replace(RewindabilityTrait.ONE_WAY))));
     }
 
@@ -102,20 +102,20 @@ public class IgniteUnionAll extends Union implements TraitsAwareIgniteRel {
             .map(TraitUtils::distribution)
             .collect(Collectors.toSet());
 
-        ImmutableList.Builder<Pair<RelTraitSet, List<RelTraitSet>>> b = ImmutableList.builder();
+        List<Pair<RelTraitSet, List<RelTraitSet>>> deriveTraits = new ArrayList<>();
 
         for (IgniteDistribution distribution : distributions)
-            b.add(Pair.of(nodeTraits.replace(distribution),
+            deriveTraits.add(Pair.of(nodeTraits.replace(distribution),
                 Commons.transform(inputTraits, t -> t.replace(distribution))));
 
-        return b.build();
+        return List.copyOf(deriveTraits);
     }
 
     /** {@inheritDoc} */
     @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
         // Union node erases collation. TODO union all using merge sort algorythm
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
+        return List.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
             Commons.transform(inputTraits, t -> t.replace(RelCollations.EMPTY))));
     }
 
@@ -128,7 +128,7 @@ public class IgniteUnionAll extends Union implements TraitsAwareIgniteRel {
             .flatMap(corrTr -> corrTr.correlationIds().stream())
             .collect(Collectors.toSet());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(correlationIds)),
+        return List.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(correlationIds)),
             inTraits));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteHashAggregateBase.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteHashAggregateBase.java
index d4b1f44..a827141 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteHashAggregateBase.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteHashAggregateBase.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.agg;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.util.Pair;
@@ -33,14 +32,14 @@ interface IgniteHashAggregateBase extends TraitsAwareIgniteRel {
     @Override default Pair<RelTraitSet, List<RelTraitSet>> passThroughCollation(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
         // Since it's a hash aggregate it erases collation.
         return Pair.of(nodeTraits.replace(RelCollations.EMPTY),
-            ImmutableList.of(inputTraits.get(0).replace(RelCollations.EMPTY)));
+            List.of(inputTraits.get(0).replace(RelCollations.EMPTY)));
     }
 
     /** {@inheritDoc} */
     @Override default List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
         // Since it's a hash aggregate it erases collation.
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
-            ImmutableList.of(inputTraits.get(0).replace(RelCollations.EMPTY))));
+        return List.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
+            List.of(inputTraits.get(0).replace(RelCollations.EMPTY))));
     }
 
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteMapAggregateBase.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteMapAggregateBase.java
index fdc0971..cfc227d 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteMapAggregateBase.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteMapAggregateBase.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.query.calcite.rel.agg;
 
 import java.util.List;
-import com.google.common.collect.ImmutableList;
+
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelInput;
@@ -67,7 +67,7 @@ public abstract class IgniteMapAggregateBase extends IgniteAggregate implements
         RelTraitSet nodeTraits,
         List<RelTraitSet> inputTraits
     ) {
-        return ImmutableList.of(Pair.of(nodeTraits, ImmutableList.of(inputTraits.get(0))));
+        return List.of(Pair.of(nodeTraits, List.of(inputTraits.get(0))));
     }
 
     /** {@inheritDoc} */
@@ -78,9 +78,9 @@ public abstract class IgniteMapAggregateBase extends IgniteAggregate implements
         RelTraitSet in = inputTraits.get(0);
 
         if (TraitUtils.distribution(in).satisfies(IgniteDistributions.single()))
-            return ImmutableList.of();
+            return List.of();
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.distribution(in)), ImmutableList.of(in)));
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.distribution(in)), List.of(in)));
     }
 
     /** {@inheritDoc} */
@@ -88,7 +88,7 @@ public abstract class IgniteMapAggregateBase extends IgniteAggregate implements
         RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits
     ) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
             inTraits));
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceAggregateBase.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceAggregateBase.java
index 17310cc..9bf927e 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceAggregateBase.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceAggregateBase.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.query.calcite.rel.agg;
 
 import java.util.List;
-import com.google.common.collect.ImmutableList;
+
 import org.apache.calcite.linq4j.Ord;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
@@ -69,7 +69,7 @@ public abstract class IgniteReduceAggregateBase extends SingleRel implements Tra
         assert rowType != null;
         this.groupSet = groupSet;
         if (groupSets == null)
-            groupSets = ImmutableList.of(groupSet);
+            groupSets = List.of(groupSet);
         this.groupSets = groupSets;
         this.aggCalls = aggCalls;
         this.rowType = rowType;
@@ -137,8 +137,8 @@ public abstract class IgniteReduceAggregateBase extends SingleRel implements Tra
         RelTraitSet nodeTraits,
         List<RelTraitSet> inputTraits
     ) {
-        return ImmutableList.of(
-            Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY), ImmutableList.of(inputTraits.get(0))));
+        return List.of(
+            Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY), List.of(inputTraits.get(0))));
     }
 
     /** {@inheritDoc} */
@@ -148,10 +148,10 @@ public abstract class IgniteReduceAggregateBase extends SingleRel implements Tra
     ) {
         RelTraitSet in = inputTraits.get(0);
 
-        return ImmutableList.of(
+        return List.of(
             Pair.of(
                 nodeTraits.replace(IgniteDistributions.single()),
-                ImmutableList.of(in.replace(IgniteDistributions.single()))
+                List.of(in.replace(IgniteDistributions.single()))
             )
         );
     }
@@ -161,7 +161,7 @@ public abstract class IgniteReduceAggregateBase extends SingleRel implements Tra
         RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits
     ) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
             inTraits));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceHashAggregate.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceHashAggregate.java
index 39623cf..479c02c 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceHashAggregate.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteReduceHashAggregate.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.agg;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -110,7 +109,7 @@ public class IgniteReduceHashAggregate extends IgniteReduceAggregateBase impleme
     /** {@inheritDoc} */
     @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
-            ImmutableList.of(inTraits.get(0).replace(RelCollations.EMPTY))));
+        return List.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
+            List.of(inTraits.get(0).replace(RelCollations.EMPTY))));
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSingleAggregateBase.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSingleAggregateBase.java
index aa2cb95..372a9e0 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSingleAggregateBase.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSingleAggregateBase.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.query.calcite.rel.agg;
 
 import java.util.List;
-import com.google.common.collect.ImmutableList;
+
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelInput;
@@ -68,7 +68,7 @@ public abstract class IgniteSingleAggregateBase extends IgniteAggregate implemen
         RelTraitSet nodeTraits,
         List<RelTraitSet> inputTraits
     ) {
-        return ImmutableList.of(Pair.of(nodeTraits, ImmutableList.of(inputTraits.get(0))));
+        return List.of(Pair.of(nodeTraits, List.of(inputTraits.get(0))));
     }
 
     /** {@inheritDoc} */
@@ -79,9 +79,9 @@ public abstract class IgniteSingleAggregateBase extends IgniteAggregate implemen
         RelTraitSet in = inputTraits.get(0);
 
         if (!TraitUtils.distribution(in).satisfies(IgniteDistributions.single()))
-            return ImmutableList.of();
+            return List.of();
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(IgniteDistributions.single()), ImmutableList.of(in)));
+        return List.of(Pair.of(nodeTraits.replace(IgniteDistributions.single()), List.of(in)));
     }
 
     /** {@inheritDoc} */
@@ -89,7 +89,7 @@ public abstract class IgniteSingleAggregateBase extends IgniteAggregate implemen
         RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits
     ) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
             inTraits));
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSortAggregateBase.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSortAggregateBase.java
index 8f50c4d..16c3c86 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSortAggregateBase.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/agg/IgniteSortAggregateBase.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.agg;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelCollations;
@@ -49,7 +48,7 @@ interface IgniteSortAggregateBase extends TraitsAwareIgniteRel {
         RelCollation collation = RelCollations.of(ImmutableIntList.copyOf(getGroupSet().asList()));
 
         return Pair.of(nodeTraits.replace(collation),
-            ImmutableList.of(inputTraits.get(0).replace(collation)));
+            List.of(inputTraits.get(0).replace(collation)));
     }
 
     /** {@inheritDoc} */
@@ -61,9 +60,9 @@ interface IgniteSortAggregateBase extends TraitsAwareIgniteRel {
         List<Integer> newCollation = maxPrefix(inputCollation.getKeys(), getGroupSet().asSet());
 
         if (newCollation.size() < getGroupSet().cardinality())
-            return ImmutableList.of();
+            return List.of();
 
-        return ImmutableList.of(Pair.of(
+        return List.of(Pair.of(
             nodeTraits.replace(RelCollations.of(ImmutableIntList.copyOf(newCollation))),
             inputTraits
         ));
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalIndexScan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalIndexScan.java
index a28c59b..99804f1 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalIndexScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalIndexScan.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.logical;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
@@ -105,6 +104,6 @@ public class IgniteLogicalIndexScan extends AbstractIndexScan {
         @Nullable IndexConditions idxCond,
         @Nullable ImmutableBitSet requiredCols
     ) {
-        super(cluster, traits, ImmutableList.of(), tbl, idxName, proj, cond, idxCond, requiredCols);
+        super(cluster, traits, List.of(), tbl, idxName, proj, cond, idxCond, requiredCols);
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalTableScan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalTableScan.java
index 3414a8c..adb0c4a 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalTableScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/logical/IgniteLogicalTableScan.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.logical;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
@@ -59,6 +58,6 @@ public class IgniteLogicalTableScan extends ProjectableFilterableTableScan {
         @Nullable RexNode cond,
         @Nullable ImmutableBitSet requiredColunms
     ) {
-        super(cluster, traits, ImmutableList.of(), tbl, proj, cond, requiredColunms);
+        super(cluster, traits, List.of(), tbl, proj, cond, requiredColunms);
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMapSetOp.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMapSetOp.java
index 22502ad..0e1769c 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMapSetOp.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMapSetOp.java
@@ -21,7 +21,6 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.core.CorrelationId;
 import org.apache.calcite.rel.type.RelDataType;
@@ -50,9 +49,9 @@ public interface IgniteMapSetOp extends IgniteSetOp {
             .allMatch(RewindabilityTrait::rewindable);
 
         if (rewindable)
-            return ImmutableList.of(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE), inputTraits));
+            return List.of(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE), inputTraits));
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
+        return List.of(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
             Commons.transform(inputTraits, t -> t.replace(RewindabilityTrait.ONE_WAY))));
     }
 
@@ -62,13 +61,13 @@ public interface IgniteMapSetOp extends IgniteSetOp {
         List<RelTraitSet> inputTraits
     ) {
         if (inputTraits.stream().allMatch(t -> TraitUtils.distribution(t).satisfies(IgniteDistributions.single())))
-            return ImmutableList.of(); // If all distributions are single or broadcast IgniteSingleMinus should be used.
+            return List.of(); // If all distributions are single or broadcast IgniteSingleMinus should be used.
 
-        return ImmutableList.of(
+        return List.of(
             Pair.of(nodeTraits.replace(IgniteDistributions.random()), Commons.transform(inputTraits,
                 t -> TraitUtils.distribution(t) == IgniteDistributions.broadcast() ?
                     // Allow broadcast with trim-exchange to be used in map-reduce set-op.
-                    t.replace(IgniteDistributions.hash(ImmutableList.of(0))) :
+                    t.replace(IgniteDistributions.hash(List.of(0))) :
                     t.replace(IgniteDistributions.random())))
         );
     }
@@ -83,7 +82,7 @@ public interface IgniteMapSetOp extends IgniteSetOp {
             .flatMap(corrTr -> corrTr.correlationIds().stream())
             .collect(Collectors.toSet());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(correlationIds)),
+        return List.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(correlationIds)),
             inTraits));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMinusBase.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMinusBase.java
index b2cf77b..29df78f 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMinusBase.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteMinusBase.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.query.calcite.rel.set;
 
 import java.util.List;
-import com.google.common.collect.ImmutableList;
+
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -63,7 +63,7 @@ public abstract class IgniteMinusBase extends Minus implements TraitsAwareIgnite
     /** {@inheritDoc} */
     @Override public List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(RelTraitSet nodeTraits, List<RelTraitSet> inputTraits) {
         // Operation erases collation.
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
+        return List.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
             Commons.transform(inputTraits, t -> t.replace(RelCollations.EMPTY))));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceIntersect.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceIntersect.java
index 18c4e49..6c55c5d 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceIntersect.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceIntersect.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.set;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelInput;
@@ -44,7 +43,7 @@ public class IgniteReduceIntersect extends IgniteIntersect implements IgniteRedu
         boolean all,
         RelDataType rowType
     ) {
-        super(cluster, traitSet, ImmutableList.of(input), all);
+        super(cluster, traitSet, List.of(input), all);
 
         this.rowType = rowType;
     }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceMinus.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceMinus.java
index f86646f..d2c6bc3 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceMinus.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceMinus.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.set;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.RelInput;
@@ -44,7 +43,7 @@ public class IgniteReduceMinus extends IgniteMinus implements IgniteReduceSetOp
         boolean all,
         RelDataType rowType
     ) {
-        super(cluster, traitSet, ImmutableList.of(input), all);
+        super(cluster, traitSet, List.of(input), all);
 
         this.rowType = rowType;
     }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceSetOp.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceSetOp.java
index 06669c2..4dfcb9f 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceSetOp.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteReduceSetOp.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.set;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.util.Pair;
 import org.apache.ignite.internal.processors.query.calcite.exec.exp.agg.AggregateType;
@@ -37,8 +36,8 @@ public interface IgniteReduceSetOp extends IgniteSetOp {
         RelTraitSet nodeTraits,
         List<RelTraitSet> inputTraits
     ) {
-        return ImmutableList.of(
-            Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY), ImmutableList.of(inputTraits.get(0))));
+        return List.of(
+            Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY), List.of(inputTraits.get(0))));
     }
 
     /** {@inheritDoc} */
@@ -55,8 +54,8 @@ public interface IgniteReduceSetOp extends IgniteSetOp {
         RelTraitSet nodeTraits,
         List<RelTraitSet> inputTraits
     ) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(IgniteDistributions.single()),
-            ImmutableList.of(inputTraits.get(0).replace(IgniteDistributions.single()))));
+        return List.of(Pair.of(nodeTraits.replace(IgniteDistributions.single()),
+            List.of(inputTraits.get(0).replace(IgniteDistributions.single()))));
     }
 
     /** {@inheritDoc} */
@@ -64,7 +63,7 @@ public interface IgniteReduceSetOp extends IgniteSetOp {
         RelTraitSet nodeTraits,
         List<RelTraitSet> inTraits
     ) {
-        return ImmutableList.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
+        return List.of(Pair.of(nodeTraits.replace(TraitUtils.correlation(inTraits.get(0))),
             inTraits));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSetOp.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSetOp.java
index 127aa09..0ec78c5 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSetOp.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSetOp.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.processors.query.calcite.rel.set;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelTraitSet;
@@ -52,7 +51,7 @@ public interface IgniteSetOp extends TraitsAwareIgniteRel {
     @Override public default List<Pair<RelTraitSet, List<RelTraitSet>>> deriveCollation(RelTraitSet nodeTraits,
         List<RelTraitSet> inputTraits) {
         // Operation erases collation.
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
+        return List.of(Pair.of(nodeTraits.replace(RelCollations.EMPTY),
             Commons.transform(inputTraits, t -> t.replace(RelCollations.EMPTY))));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSingleSetOp.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSingleSetOp.java
index 3dd5249..ed3021d 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSingleSetOp.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/set/IgniteSingleSetOp.java
@@ -21,7 +21,6 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.rel.core.CorrelationId;
 import org.apache.calcite.util.Pair;
@@ -46,9 +45,9 @@ public interface IgniteSingleSetOp extends IgniteSetOp {
             .allMatch(RewindabilityTrait::rewindable);
 
         if (rewindable)
-            return ImmutableList.of(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE), inputTraits));
+            return List.of(Pair.of(nodeTraits.replace(RewindabilityTrait.REWINDABLE), inputTraits));
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
+        return List.of(Pair.of(nodeTraits.replace(RewindabilityTrait.ONE_WAY),
             Commons.transform(inputTraits, t -> t.replace(RewindabilityTrait.ONE_WAY))));
     }
 
@@ -71,9 +70,9 @@ public interface IgniteSingleSetOp extends IgniteSetOp {
             .allMatch(d -> d.satisfies(IgniteDistributions.single()));
 
         if (!single)
-            return ImmutableList.of();
+            return List.of();
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(IgniteDistributions.single()), inputTraits));
+        return List.of(Pair.of(nodeTraits.replace(IgniteDistributions.single()), inputTraits));
     }
 
     /** {@inheritDoc} */
@@ -86,7 +85,7 @@ public interface IgniteSingleSetOp extends IgniteSetOp {
             .flatMap(corrTr -> corrTr.correlationIds().stream())
             .collect(Collectors.toSet());
 
-        return ImmutableList.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(correlationIds)),
+        return List.of(Pair.of(nodeTraits.replace(CorrelationTrait.correlations(correlationIds)),
             inTraits));
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToSortedIndexSpoolRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToSortedIndexSpoolRule.java
index 5b34ca8..8b29da8 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToSortedIndexSpoolRule.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/FilterSpoolMergeToSortedIndexSpoolRule.java
@@ -16,7 +16,8 @@
  */
 package org.apache.ignite.internal.processors.query.calcite.rule;
 
-import com.google.common.collect.ImmutableList;
+import java.util.List;
+
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
@@ -75,7 +76,7 @@ public class FilterSpoolMergeToSortedIndexSpoolRule extends RelRule<FilterSpoolM
         if (nullOrEmpty(idxCond.lowerCondition()) && nullOrEmpty(idxCond.upperCondition()))
             return;
 
-        RelCollation collation = TraitUtils.createCollation(ImmutableList.copyOf(idxCond.keys()));
+        RelCollation collation = TraitUtils.createCollation(List.copyOf(idxCond.keys()));
         
         RelNode res = new IgniteSortedIndexSpool(
             cluster,
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java
index e91d148..df4a90d 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/logical/LogicalOrToUnionRule.java
@@ -18,7 +18,8 @@
 package org.apache.ignite.internal.processors.query.calcite.rule.logical;
 
 import java.util.List;
-import com.google.common.collect.ImmutableMap;
+import java.util.Map;
+
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.plan.RelOptRuleCall;
@@ -68,7 +69,7 @@ public class LogicalOrToUnionRule extends RelRule<LogicalOrToUnionRule.Config> {
 
         RelNode rel0 = createUnionAll(cluster, input, operands.get(0), operands.get(1));
 
-        call.transformTo(rel0, ImmutableMap.of(
+        call.transformTo(rel0, Map.of(
             createUnionAll(cluster, input, operands.get(1), operands.get(0)), rel0
         ));
     }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTableImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTableImpl.java
index 93e2582..04edd7e 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTableImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/IgniteTableImpl.java
@@ -22,7 +22,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.Convention;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptTable;
@@ -154,12 +153,12 @@ public class IgniteTableImpl extends AbstractTable implements IgniteTable {
 
         /** {@inheritDoc} */
         @Override public List<RelReferentialConstraint> getReferentialConstraints() {
-            return ImmutableList.of();
+            return List.of();
         }
 
         /** {@inheritDoc} */
         @Override public List<RelCollation> getCollations() {
-            return ImmutableList.of(); // The method isn't used
+            return List.of(); // The method isn't used
         }
 
         /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
index f4015ec..d260d94 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
@@ -18,7 +18,6 @@ package org.apache.ignite.internal.processors.query.calcite.sql;
 
 import java.util.List;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlLiteral;
@@ -60,7 +59,7 @@ public class IgniteSqlCreateTableOption extends SqlCall {
 
     /** {@inheritDoc} */
     @NotNull @Override public List<SqlNode> getOperandList() {
-        return ImmutableList.of(key, value);
+        return List.of(key, value);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/CorrelationTrait.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/CorrelationTrait.java
index d93b833..b14bae5 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/CorrelationTrait.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/CorrelationTrait.java
@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelTrait;
 import org.apache.calcite.plan.RelTraitDef;
@@ -49,11 +48,11 @@ public class CorrelationTrait implements RelTrait {
     public static final CorrelationTrait UNCORRELATED = canonize(new CorrelationTrait(Collections.emptyList()));
 
     /** */
-    private final ImmutableSet<CorrelationId> correlations;
+    private final Set<CorrelationId> correlations;
 
     /** */
     public CorrelationTrait(Collection<CorrelationId> correlationIds) {
-        correlations = ImmutableSet.copyOf(correlationIds);
+        correlations = Set.copyOf(correlationIds);
     }
 
     /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/DistributionTrait.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/DistributionTrait.java
index 6ef5cbf..7b314b3 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/DistributionTrait.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/DistributionTrait.java
@@ -17,10 +17,11 @@
 
 package org.apache.ignite.internal.processors.query.calcite.trait;
 
+import java.util.Comparator;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 
-import com.google.common.collect.Ordering;
 import org.apache.calcite.plan.RelMultipleTrait;
 import org.apache.calcite.plan.RelOptPlanner;
 import org.apache.calcite.plan.RelTrait;
@@ -42,8 +43,28 @@ import static org.apache.calcite.rel.RelDistribution.Type.SINGLETON;
  */
 public final class DistributionTrait implements IgniteDistribution {
     /** */
-    private static final Ordering<Iterable<Integer>> ORDERING =
-        Ordering.<Integer>natural().lexicographical();
+    private static final Comparator<Iterable<Integer>> ORDERING = (iterable0, iterable1) -> {
+        Iterator<Integer> it0 = iterable0.iterator();
+        Iterator<Integer> it1 = iterable1.iterator();
+
+        while (it0.hasNext()) {
+            if (!it1.hasNext()) {
+                return 1;
+            }
+
+            int result = Integer.compare(it0.next(), it1.next());
+
+            if (result != 0) {
+                return result;
+            }
+        }
+
+        if (it1.hasNext()) {
+            return -1;
+        }
+
+        return 0;
+    };
 
     /** */
     private final DistributionFunction function;
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/TraitUtils.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/TraitUtils.java
index 667d3a9..f1158c5 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/TraitUtils.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/trait/TraitUtils.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.query.calcite.trait;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -26,7 +27,6 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.linq4j.Ord;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptPlanner;
@@ -387,7 +387,7 @@ public class TraitUtils {
         List<RelTraitSet> inTraits = Collections.nCopies(rel.getInputs().size(),
             rel.getCluster().traitSetOf(IgniteConvention.INSTANCE));
 
-        List<Pair<RelTraitSet, List<RelTraitSet>>> traits = new PropagationContext(ImmutableSet.of(Pair.of(requiredTraits, inTraits)))
+        List<Pair<RelTraitSet, List<RelTraitSet>>> traits = new PropagationContext(Set.of(Pair.of(requiredTraits, inTraits)))
             .propagate((in, outs) -> singletonListFromNullable(rel.passThroughCollation(in, outs)))
             .propagate((in, outs) -> singletonListFromNullable(rel.passThroughDistribution(in, outs)))
             .propagate((in, outs) -> singletonListFromNullable(rel.passThroughRewindability(in, outs)))
@@ -407,7 +407,7 @@ public class TraitUtils {
         Set<Pair<RelTraitSet, List<RelTraitSet>>> combinations = combinations(outTraits, inTraits);
 
         if (combinations.isEmpty())
-            return ImmutableList.of();
+            return List.of();
 
         return new PropagationContext(combinations)
             .propagate(rel::deriveCollation)
@@ -443,7 +443,7 @@ public class TraitUtils {
             combination[idx] = t;
 
             if (last)
-                result.add(Pair.of(outTraits, ImmutableList.copyOf(combination)));
+                result.add(Pair.of(outTraits, List.of(combination)));
             else if (!fillRecursive(outTraits, inTraits, result, combination, idx + 1))
                 return false;
         }
@@ -497,10 +497,12 @@ public class TraitUtils {
             if (combinations.isEmpty())
                 return this;
 
-            ImmutableSet.Builder<Pair<RelTraitSet, List<RelTraitSet>>> b = ImmutableSet.builder();
+            Set<Pair<RelTraitSet, List<RelTraitSet>>> b = new HashSet<>();
+
             for (Pair<RelTraitSet, List<RelTraitSet>> variant : combinations)
                 b.addAll(processor.propagate(variant.left, variant.right));
-            return new PropagationContext(b.build());
+
+            return new PropagationContext(Set.copyOf(b));
         }
 
         /**
@@ -508,17 +510,19 @@ public class TraitUtils {
          */
         public List<RelNode> nodes(RelFactory nodesCreator) {
             if (combinations.isEmpty())
-                return ImmutableList.of();
+                return List.of();
+
+            List<RelNode> nodes = new ArrayList<>();
 
-            ImmutableList.Builder<RelNode> b = ImmutableList.builder();
             for (Pair<RelTraitSet, List<RelTraitSet>> variant : combinations)
-                b.add(nodesCreator.create(variant.left, variant.right));
-            return b.build();
+                nodes.add(nodesCreator.create(variant.left, variant.right));
+
+            return List.copyOf(nodes);
         }
 
         /** */
         public List<Pair<RelTraitSet, List<RelTraitSet>>> combinations() {
-            return ImmutableList.copyOf(combinations);
+            return List.copyOf(combinations);
         }
     }
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/Commons.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/Commons.java
index d27319f..559c505 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/Commons.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/Commons.java
@@ -24,6 +24,7 @@ import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -548,4 +549,19 @@ public final class Commons {
                 throw new IllegalArgumentException("Unsupported type " + type.spec());
         }
     }
+
+    /** */
+    public static <T> Comparator<T> compoundComparator(Iterable<Comparator<T>> cmps) {
+        return (r1, r2) -> {
+            for (Comparator<T> cmp : cmps) {
+                int result = cmp.compare(r1, r2);
+
+                if (result != 0) {
+                    return result;
+                }
+            }
+
+            return 0;
+        };
+    }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/HintUtils.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/HintUtils.java
index 7947760..e718c23 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/HintUtils.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/HintUtils.java
@@ -18,10 +18,10 @@
 package org.apache.ignite.internal.processors.query.calcite.util;
 
 import java.util.Collections;
+import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.core.AggregateCall;
 import org.apache.calcite.rel.hint.RelHint;
 import org.apache.calcite.rel.logical.LogicalAggregate;
@@ -36,13 +36,13 @@ public class HintUtils {
     }
 
     /** */
-    public static boolean containsDisabledRules(ImmutableList<RelHint> hints) {
+    public static boolean containsDisabledRules(List<RelHint> hints) {
         return hints.stream()
             .anyMatch(h -> "DISABLE_RULE".equals(h.hintName) && !h.listOptions.isEmpty());
     }
 
     /** */
-    public static Set<String> disabledRules(ImmutableList<RelHint> hints) {
+    public static Set<String> disabledRules(List<RelHint> hints) {
         if (nullOrEmpty(hints))
             return Collections.emptySet();
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ExecutionPlan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/LocalCache.java
similarity index 53%
copy from modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ExecutionPlan.java
copy to modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/LocalCache.java
index 53dc4fa..5071ad7 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ExecutionPlan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/LocalCache.java
@@ -15,35 +15,45 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.query.calcite.prepare;
+package org.apache.ignite.internal.processors.query.calcite.util;
 
-import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.function.Function;
 
-import com.google.common.collect.ImmutableList;
+/** */
+public class LocalCache<K, V> {
+    /** */
+    private final ConcurrentMap<K, V> map = new ConcurrentHashMap<>();
 
-/**
- *
- */
-class ExecutionPlan {
     /** */
-    private final long ver;
+    private final Function<K, V> builder;
 
     /** */
-    private final ImmutableList<Fragment> fragments;
+    public LocalCache() {
+        this(null);
+    }
+
+    /** */
+    public LocalCache(Function<K, V> builder) {
+        this.builder = builder;
+    }
 
     /** */
-    ExecutionPlan(long ver, List<Fragment> fragments) {
-        this.ver = ver;
-        this.fragments = ImmutableList.copyOf(fragments);
+    public V get(K key) {
+        if (builder != null)
+            return map.computeIfAbsent(key, builder);
+        else
+            return map.get(key);
     }
 
     /** */
-    public long topologyVersion() {
-        return ver;
+    public void put(K key, V val) {
+        map.put(key, val);
     }
 
     /** */
-    public List<Fragment> fragments() {
-        return fragments;
+    public void clear() {
+        map.clear();
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/Primitives.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/Primitives.java
new file mode 100644
index 0000000..afa1f8d
--- /dev/null
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/Primitives.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.query.calcite.util;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+
+public final class Primitives {
+  private Primitives() {}
+
+  /** A map from primitive types to their corresponding wrapper types. */
+  private static final Map<Class<?>, Class<?>> PRIMITIVE_TO_WRAPPER_TYPE;
+
+  /** A map from wrapper types to their corresponding primitive types. */
+  private static final Map<Class<?>, Class<?>> WRAPPER_TO_PRIMITIVE_TYPE;
+
+  static {
+    Map<Class<?>, Class<?>> primToWrap = new LinkedHashMap<>(16);
+    Map<Class<?>, Class<?>> wrapToPrim = new LinkedHashMap<>(16);
+
+    add(primToWrap, wrapToPrim, boolean.class, Boolean.class);
+    add(primToWrap, wrapToPrim, byte.class, Byte.class);
+    add(primToWrap, wrapToPrim, char.class, Character.class);
+    add(primToWrap, wrapToPrim, double.class, Double.class);
+    add(primToWrap, wrapToPrim, float.class, Float.class);
+    add(primToWrap, wrapToPrim, int.class, Integer.class);
+    add(primToWrap, wrapToPrim, long.class, Long.class);
+    add(primToWrap, wrapToPrim, short.class, Short.class);
+    add(primToWrap, wrapToPrim, void.class, Void.class);
+
+    PRIMITIVE_TO_WRAPPER_TYPE = Collections.unmodifiableMap(primToWrap);
+    WRAPPER_TO_PRIMITIVE_TYPE = Collections.unmodifiableMap(wrapToPrim);
+  }
+
+  private static void add(
+      Map<Class<?>, Class<?>> forward,
+      Map<Class<?>, Class<?>> backward,
+      Class<?> key,
+      Class<?> value) {
+    forward.put(key, value);
+    backward.put(value, key);
+  }
+
+  /**
+   * Returns {@code true} if {@code type} is one of the nine primitive-wrapper types,
+   * such as {@link Integer}.
+   *
+   * @see Class#isPrimitive
+   */
+  public static boolean isWrapperType(Class<?> type) {
+    return WRAPPER_TO_PRIMITIVE_TYPE.containsKey(Objects.requireNonNull(type));
+  }
+
+  /**
+   * Returns the corresponding wrapper type of {@code type} if it is a primitive type;
+   * otherwise returns {@code type} itself.
+   *
+   * <pre>
+   *     wrap(int.class) == Integer.class
+   *     wrap(Integer.class) == Integer.class
+   *     wrap(String.class) == String.class
+   * </pre>
+   */
+  public static <T> Class<T> wrap(Class<T> type) {
+    Objects.requireNonNull(type);
+
+    Class<T> wrapped = (Class<T>) PRIMITIVE_TO_WRAPPER_TYPE.get(type);
+    return (wrapped == null) ? type : wrapped;
+  }
+
+  /**
+   * Returns the corresponding primitive type of {@code type} if it is a wrapper type;
+   * otherwise  returns {@code type} itself.
+   *
+   * <pre>
+   *     unwrap(Integer.class) == int.class
+   *     unwrap(int.class) == int.class
+   *     unwrap(String.class) == String.class
+   * </pre>
+   */
+  public static <T> Class<T> unwrap(Class<T> type) {
+    Objects.requireNonNull(type);
+
+    Class<T> unwrapped = (Class<T>) WRAPPER_TO_PRIMITIVE_TYPE.get(type);
+
+    return (unwrapped == null) ? type : unwrapped;
+  }
+}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/TypeUtils.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/TypeUtils.java
index a997605..8d693d9 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/TypeUtils.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/util/TypeUtils.java
@@ -29,7 +29,6 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.DataContext;
 import org.apache.calcite.avatica.util.DateTimeUtils;
 import org.apache.calcite.plan.RelOptSchema;
@@ -65,7 +64,7 @@ public class TypeUtils {
     );
 
     /** */
-    private static final Set<Type> CONVERTABLE_TYPES = ImmutableSet.of(
+    private static final Set<Type> CONVERTABLE_TYPES = Set.of(
         java.util.Date.class,
         java.sql.Date.class,
         java.sql.Time.class,
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java
index 986e944..54b431a 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java
@@ -18,11 +18,11 @@
 package org.apache.ignite.internal.processors.query.calcite.exec.rel;
 
 import java.util.Iterator;
+import java.util.Map;
 import java.util.UUID;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableMap;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.ignite.internal.processors.query.calcite.exec.ArrayRowHandler;
@@ -74,7 +74,7 @@ public class AbstractExecutionTest extends IgniteAbstractTest {
             UUID.randomUUID(),
             fragmentDesc,
             ArrayRowHandler.INSTANCE,
-            ImmutableMap.of()
+            Map.of()
         );
     }
 
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/BaseAggregateTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/BaseAggregateTest.java
index 59fef55..cc53e83 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/BaseAggregateTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/BaseAggregateTest.java
@@ -24,7 +24,6 @@ import java.util.function.Supplier;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.core.AggregateCall;
 import org.apache.calcite.rel.type.RelDataType;
@@ -78,7 +77,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of(0));
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
         RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
 
@@ -129,7 +128,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of(0));
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
         RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
 
@@ -180,7 +179,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of(0));
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
         RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
 
@@ -231,7 +230,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of(0));
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
         RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
 
@@ -323,7 +322,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
             tf.createJavaType(Integer.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of(0));
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
         RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
 
@@ -386,7 +385,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of(0));
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
         RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
 
@@ -451,7 +450,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
                     tf.createJavaType(int.class),
                     null);
 
-                ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of(0));
+                List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of(0));
 
                 RelDataType aggRowType = TypeUtils.createRowType(tf, int.class);
 
@@ -488,7 +487,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
     private SingleNode<Object[]> createAggregateNodesChain(
         TestAggregateType testAgg,
         ExecutionContext<Object[]> ctx,
-        ImmutableList<ImmutableBitSet> grpSets,
+        List<ImmutableBitSet> grpSets,
         AggregateCall aggCall,
         RelDataType inRowType,
         RelDataType aggRowType,
@@ -512,7 +511,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
     /** */
     protected abstract SingleNode<Object[]> createSingleAggregateNodesChain(
         ExecutionContext<Object[]> ctx,
-        ImmutableList<ImmutableBitSet> grpSets,
+        List<ImmutableBitSet> grpSets,
         AggregateCall aggCall,
         RelDataType inRowType,
         RelDataType aggRowType,
@@ -523,7 +522,7 @@ public abstract class BaseAggregateTest extends AbstractExecutionTest {
     /** */
     protected abstract SingleNode<Object[]> createMapReduceAggregateNodesChain(
         ExecutionContext<Object[]> ctx,
-        ImmutableList<ImmutableBitSet> grpSets,
+        List<ImmutableBitSet> grpSets,
         AggregateCall call,
         RelDataType inRowType,
         RelDataType aggRowType,
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/ExecutionTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/ExecutionTest.java
index 2f6cbe5..c3f5fd3 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/ExecutionTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/ExecutionTest.java
@@ -20,9 +20,9 @@ package org.apache.ignite.internal.processors.query.calcite.exec.rel;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Stream;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.rel.core.CorrelationId;
 import org.apache.calcite.rel.core.JoinRelType;
 import org.apache.calcite.rel.type.RelDataType;
@@ -462,7 +462,7 @@ public class ExecutionTest extends AbstractExecutionTest {
             ctx,
             joinRowType,
             r -> r[0].equals(r[3]),
-            ImmutableSet.of(new CorrelationId(0)),
+            Set.of(new CorrelationId(0)),
             joinType
         );
 
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateExecutionTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateExecutionTest.java
index fb169d7..4504583 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateExecutionTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateExecutionTest.java
@@ -18,10 +18,10 @@
 package org.apache.ignite.internal.processors.query.calcite.exec.rel;
 
 import java.util.Comparator;
+import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.core.AggregateCall;
@@ -43,7 +43,7 @@ public class HashAggregateExecutionTest extends BaseAggregateTest {
     /** {@inheritDoc} */
     @Override protected SingleNode<Object[]> createSingleAggregateNodesChain(
         ExecutionContext<Object[]> ctx,
-        ImmutableList<ImmutableBitSet> grpSets,
+        List<ImmutableBitSet> grpSets,
         AggregateCall call,
         RelDataType inRowType,
         RelDataType aggRowType,
@@ -84,7 +84,7 @@ public class HashAggregateExecutionTest extends BaseAggregateTest {
     /** {@inheritDoc} */
     @Override protected SingleNode<Object[]> createMapReduceAggregateNodesChain(
         ExecutionContext<Object[]> ctx,
-        ImmutableList<ImmutableBitSet> grpSets,
+        List<ImmutableBitSet> grpSets,
         AggregateCall call,
         RelDataType inRowType,
         RelDataType aggRowType,
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateSingleGroupExecutionTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateSingleGroupExecutionTest.java
index edb2c1f..4a3b2ba 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateSingleGroupExecutionTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/HashAggregateSingleGroupExecutionTest.java
@@ -21,7 +21,6 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.function.Supplier;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.core.AggregateCall;
 import org.apache.calcite.rel.type.RelDataType;
@@ -72,7 +71,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(double.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType mapType = IgniteMapHashAggregate.rowType(tf, true);
         HashAggregateNode<Object[]> map = new HashAggregateNode<>(
@@ -130,7 +129,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType mapType = IgniteMapHashAggregate.rowType(tf, true);
         HashAggregateNode<Object[]> map = new HashAggregateNode<>(ctx, mapType, MAP, grpSets,
@@ -174,7 +173,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType mapType = IgniteMapHashAggregate.rowType(tf, true);
         HashAggregateNode<Object[]> map = new HashAggregateNode<>(ctx, mapType, MAP, grpSets,
@@ -218,7 +217,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType mapType = IgniteMapHashAggregate.rowType(tf, true);
         HashAggregateNode<Object[]> map = new HashAggregateNode<>(ctx, mapType, MAP, grpSets,
@@ -262,7 +261,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType mapType = IgniteMapHashAggregate.rowType(tf, true);
         HashAggregateNode<Object[]> map = new HashAggregateNode<>(ctx, mapType, MAP, grpSets,
@@ -306,7 +305,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(double.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType aggType = TypeUtils.createRowType(tf, int.class);
         HashAggregateNode<Object[]> agg = new HashAggregateNode<>(ctx, aggType, SINGLE, grpSets,
@@ -345,7 +344,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType aggType = TypeUtils.createRowType(tf, int.class);
         HashAggregateNode<Object[]> agg = new HashAggregateNode<>(ctx, aggType, SINGLE, grpSets,
@@ -384,7 +383,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType aggType = TypeUtils.createRowType(tf, int.class);
         HashAggregateNode<Object[]> agg = new HashAggregateNode<>(ctx, aggType, SINGLE, grpSets,
@@ -423,7 +422,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType aggType = TypeUtils.createRowType(tf, int.class);
         HashAggregateNode<Object[]> agg = new HashAggregateNode<>(ctx, aggType, SINGLE, grpSets,
@@ -463,7 +462,7 @@ public class HashAggregateSingleGroupExecutionTest extends AbstractExecutionTest
             tf.createJavaType(int.class),
             null);
 
-        ImmutableList<ImmutableBitSet> grpSets = ImmutableList.of(ImmutableBitSet.of());
+        List<ImmutableBitSet> grpSets = List.of(ImmutableBitSet.of());
 
         RelDataType aggType = TypeUtils.createRowType(tf, int.class);
         HashAggregateNode<Object[]> agg = new HashAggregateNode<>(
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/SortAggregateExecutionTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/SortAggregateExecutionTest.java
index 92c19e3..6593224 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/SortAggregateExecutionTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/SortAggregateExecutionTest.java
@@ -18,10 +18,10 @@
 package org.apache.ignite.internal.processors.query.calcite.exec.rel;
 
 import java.util.Comparator;
+import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelCollations;
 import org.apache.calcite.rel.core.AggregateCall;
@@ -41,7 +41,7 @@ public class SortAggregateExecutionTest extends BaseAggregateTest {
     /** {@inheritDoc} */
     @Override protected SingleNode<Object[]> createSingleAggregateNodesChain(
         ExecutionContext<Object[]> ctx,
-        ImmutableList<ImmutableBitSet> grpSets,
+        List<ImmutableBitSet> grpSets,
         AggregateCall call,
         RelDataType inRowType,
         RelDataType aggRowType,
@@ -80,7 +80,7 @@ public class SortAggregateExecutionTest extends BaseAggregateTest {
     /** {@inheritDoc} */
     @Override protected SingleNode<Object[]> createMapReduceAggregateNodesChain(
         ExecutionContext<Object[]> ctx,
-        ImmutableList<ImmutableBitSet> grpSets,
+        List<ImmutableBitSet> grpSets,
         AggregateCall call,
         RelDataType inRowType,
         RelDataType aggRowType,
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/AbstractPlannerTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/AbstractPlannerTest.java
index 4bb1716..009bc2a 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/AbstractPlannerTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/AbstractPlannerTest.java
@@ -18,8 +18,10 @@
 package org.apache.ignite.internal.processors.query.calcite.planner;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -28,7 +30,6 @@ import java.util.function.Predicate;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.config.CalciteConnectionConfig;
 import org.apache.calcite.plan.Contexts;
 import org.apache.calcite.plan.Convention;
@@ -210,7 +211,7 @@ public abstract class AbstractPlannerTest extends IgniteAbstractTest {
         try (IgnitePlanner planner = ctx.planner()) {
             assertNotNull(planner);
 
-            planner.setDisabledRules(ImmutableSet.copyOf(disabledRules));
+            planner.setDisabledRules(new HashSet<>(Arrays.asList(disabledRules)));
 
             String qry = ctx.query();
 
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
index 1001446..12c984e 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/planner/PlannerTest.java
@@ -20,12 +20,12 @@ package org.apache.ignite.internal.processors.query.calcite.planner;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Predicate;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.plan.Contexts;
 import org.apache.calcite.plan.ConventionTraitDef;
 import org.apache.calcite.plan.RelOptUtil;
@@ -1230,7 +1230,7 @@ public class PlannerTest extends AbstractPlannerTest {
         RelRoot relRoot;
 
         try (IgnitePlanner planner = ctx.planner()) {
-            planner.setDisabledRules(ImmutableSet.of("CorrelatedNestedLoopJoin"));
+            planner.setDisabledRules(Set.of("CorrelatedNestedLoopJoin"));
 
             assertNotNull(planner);
 
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/sql/SqlDdlParserTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/sql/SqlDdlParserTest.java
index 32d1f8d..ae1b9fb 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/sql/SqlDdlParserTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/sql/SqlDdlParserTest.java
@@ -20,7 +20,6 @@ import java.util.List;
 import java.util.Objects;
 import java.util.function.Predicate;
 
-import com.google.common.collect.ImmutableList;
 import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlLiteral;
@@ -58,7 +57,7 @@ public class SqlDdlParserTest {
 
         IgniteSqlCreateTable createTable = (IgniteSqlCreateTable)node;
 
-        assertThat(createTable.name().names, is(ImmutableList.of("MY_TABLE")));
+        assertThat(createTable.name().names, is(List.of("MY_TABLE")));
         assertThat(createTable.ifNotExists, is(false));
         assertThat(createTable.columnList(), hasItem(columnWithName("ID")));
         assertThat(createTable.columnList(), hasItem(columnWithName("VAL")));
@@ -77,7 +76,7 @@ public class SqlDdlParserTest {
 
         IgniteSqlCreateTable createTable = (IgniteSqlCreateTable)node;
 
-        assertThat(createTable.name().names, is(ImmutableList.of("My_Table")));
+        assertThat(createTable.name().names, is(List.of("My_Table")));
         assertThat(createTable.ifNotExists, is(false));
         assertThat(createTable.columnList(), hasItem(columnWithName("Id")));
         assertThat(createTable.columnList(), hasItem(columnWithName("Val")));
@@ -96,7 +95,7 @@ public class SqlDdlParserTest {
 
         IgniteSqlCreateTable createTable = (IgniteSqlCreateTable)node;
 
-        assertThat(createTable.name().names, is(ImmutableList.of("MY_TABLE")));
+        assertThat(createTable.name().names, is(List.of("MY_TABLE")));
         assertThat(createTable.ifNotExists, is(true));
         assertThat(createTable.columnList(), hasItem(columnWithName("ID")));
         assertThat(createTable.columnList(), hasItem(columnWithName("VAL")));
@@ -116,7 +115,7 @@ public class SqlDdlParserTest {
 
         IgniteSqlCreateTable createTable = (IgniteSqlCreateTable)node;
 
-        assertThat(createTable.name().names, is(ImmutableList.of("MY_TABLE")));
+        assertThat(createTable.name().names, is(List.of("MY_TABLE")));
         assertThat(createTable.ifNotExists, is(false));
         assertThat(createTable.columnList(), hasItem(ofTypeMatching(
             "PK constraint with name \"ID\"", SqlKeyConstraint.class,
@@ -140,7 +139,7 @@ public class SqlDdlParserTest {
 
         IgniteSqlCreateTable createTable = (IgniteSqlCreateTable)node;
 
-        assertThat(createTable.name().names, is(ImmutableList.of("MY_TABLE")));
+        assertThat(createTable.name().names, is(List.of("MY_TABLE")));
         assertThat(createTable.ifNotExists, is(false));
         assertThat(createTable.columnList(), hasItem(ofTypeMatching(
             "PK constraint without name containing column \"ID\"", SqlKeyConstraint.class,
@@ -164,7 +163,7 @@ public class SqlDdlParserTest {
 
         IgniteSqlCreateTable createTable = (IgniteSqlCreateTable)node;
 
-        assertThat(createTable.name().names, is(ImmutableList.of("MY_TABLE")));
+        assertThat(createTable.name().names, is(List.of("MY_TABLE")));
         assertThat(createTable.ifNotExists, is(false));
         assertThat(createTable.columnList(), hasItem(ofTypeMatching(
             "PK constraint with name \"PK_KEY\" containing column \"ID\"", SqlKeyConstraint.class,
@@ -188,7 +187,7 @@ public class SqlDdlParserTest {
 
         IgniteSqlCreateTable createTable = (IgniteSqlCreateTable)node;
 
-        assertThat(createTable.name().names, is(ImmutableList.of("MY_TABLE")));
+        assertThat(createTable.name().names, is(List.of("MY_TABLE")));
         assertThat(createTable.ifNotExists, is(false));
         assertThat(createTable.columnList(), hasItem(ofTypeMatching(
             "PK constraint with two columns", SqlKeyConstraint.class,
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/Commons.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/ITUtils.java
similarity index 65%
copy from modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/Commons.java
copy to modules/runner/src/integrationTest/java/org/apache/ignite/internal/ITUtils.java
index 3ecbc8c..98b057c 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/Commons.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/ITUtils.java
@@ -14,16 +14,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.internal.calcite.util;
 
+package org.apache.ignite.internal;
+
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
 
-import com.google.common.collect.Streams;
-import org.apache.ignite.internal.util.Cursor;
+/**
+ * Utilities methods for integration tests.
+ */
+public class ITUtils {
+    private ITUtils() {
+        // No-op;
+    }
+
+    /**
+     * Returns a reversed list of the specified list.
+     */
+    public static <T> List<T> reverse(List<T> lst) {
+        List<T> res = new ArrayList<>(lst);
+
+        Collections.reverse(res);
 
-public class Commons {
-    public static List<List<?>> getAllFromCursor(Cursor<List<?>> cur) {
-        return Streams.stream((Iterable<List<?>>)cur).collect(Collectors.toList());
+        return res;
     }
 }
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java
index 4f188fb..d8957d3 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/AbstractBasicIntegrationTest.java
@@ -23,9 +23,10 @@ import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import com.google.common.collect.Lists;
+
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
+import org.apache.ignite.internal.ITUtils;
 import org.apache.ignite.internal.app.IgniteImpl;
 import org.apache.ignite.internal.calcite.util.QueryChecker;
 import org.apache.ignite.internal.processors.query.calcite.QueryProcessor;
@@ -123,7 +124,7 @@ public class AbstractBasicIntegrationTest {
         if (LOG.isInfoEnabled())
             LOG.info("Start tearDown()");
 
-        IgniteUtils.closeAll(Lists.reverse(CLUSTER_NODES));
+        IgniteUtils.closeAll(ITUtils.reverse(CLUSTER_NODES));
 
         CLUSTER_NODES.clear();
 
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITDataTypesTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITDataTypesTest.java
index f4ed660..f4181b1 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITDataTypesTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITDataTypesTest.java
@@ -18,9 +18,9 @@
 package org.apache.ignite.internal.calcite;
 
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.google.common.collect.ImmutableSet;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
@@ -47,7 +47,7 @@ public class ITDataTypesTest extends AbstractBasicIntegrationTest {
 
         List<List<?>> rows = sql("SELECT val FROM string_table");
 
-        assertEquals(ImmutableSet.copyOf(values), rows.stream().map(r -> r.get(0)).collect(Collectors.toSet()));
+        assertEquals(Set.of(values), rows.stream().map(r -> r.get(0)).collect(Collectors.toSet()));
 
         sql("DELETE FROM string_table");
 
@@ -57,11 +57,11 @@ public class ITDataTypesTest extends AbstractBasicIntegrationTest {
 
         rows = sql("SELECT val FROM string_table");
 
-        assertEquals(ImmutableSet.copyOf(values), rows.stream().map(r -> r.get(0)).collect(Collectors.toSet()));
+        assertEquals(Set.of(values), rows.stream().map(r -> r.get(0)).collect(Collectors.toSet()));
 
         rows = sql("SELECT substring(val, 1, 2) FROM string_table");
 
-        assertEquals(ImmutableSet.of("Ки", "Mü", "我是", "AS"),
+        assertEquals(Set.of("Ки", "Mü", "我是", "AS"),
             rows.stream().map(r -> r.get(0)).collect(Collectors.toSet()));
 
         for (String val : values) {
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITSetOpTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITSetOpTest.java
index 69f2d85..45d27f0 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITSetOpTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/ITSetOpTest.java
@@ -19,8 +19,8 @@ package org.apache.ignite.internal.calcite;
 
 import java.util.List;
 import java.util.function.Predicate;
+import java.util.stream.StreamSupport;
 
-import com.google.common.collect.Streams;
 import org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter;
 import org.apache.ignite.schema.SchemaBuilders;
 import org.apache.ignite.schema.definition.ColumnType;
@@ -277,6 +277,6 @@ public class ITSetOpTest extends AbstractBasicIntegrationTest {
     }
 
     private <T> long countIf(Iterable<T> it, Predicate<T> pred) {
-        return Streams.stream(it).filter(pred).count();
+        return StreamSupport.stream(it.spliterator(), false).filter(pred).count();
     }
 }
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/Commons.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/Commons.java
index 3ecbc8c..9f256d2 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/Commons.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/calcite/util/Commons.java
@@ -18,12 +18,12 @@ package org.apache.ignite.internal.calcite.util;
 
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
 
-import com.google.common.collect.Streams;
 import org.apache.ignite.internal.util.Cursor;
 
 public class Commons {
     public static List<List<?>> getAllFromCursor(Cursor<List<?>> cur) {
-        return Streams.stream((Iterable<List<?>>)cur).collect(Collectors.toList());
+        return StreamSupport.stream(cur.spliterator(), false).collect(Collectors.toList());
     }
 }
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/AbstractSchemaChangeTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/AbstractSchemaChangeTest.java
index e7ad7b9..f719aeb 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/AbstractSchemaChangeTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/AbstractSchemaChangeTest.java
@@ -23,9 +23,10 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Supplier;
-import com.google.common.collect.Lists;
+
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
+import org.apache.ignite.internal.ITUtils;
 import org.apache.ignite.internal.schema.InvalidTypeException;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -117,7 +118,7 @@ abstract class AbstractSchemaChangeTest {
     /** */
     @AfterEach
     void afterEach() throws Exception {
-        IgniteUtils.closeAll(Lists.reverse(clusterNodes));
+        IgniteUtils.closeAll(ITUtils.reverse(clusterNodes));
     }
 
     /**
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITBaselineChangesTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITBaselineChangesTest.java
index 444aee5..8724150 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITBaselineChangesTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITBaselineChangesTest.java
@@ -23,9 +23,10 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import com.google.common.collect.Lists;
+
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
+import org.apache.ignite.internal.ITUtils;
 import org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -89,7 +90,7 @@ public class ITBaselineChangesTest {
     /** */
     @AfterEach
     void tearDown() throws Exception {
-        IgniteUtils.closeAll(Lists.reverse(clusterNodes));
+        IgniteUtils.closeAll(ITUtils.reverse(clusterNodes));
     }
 
     /**
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITDynamicTableCreationTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITDynamicTableCreationTest.java
index 9b92c18..d4f3d1b 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITDynamicTableCreationTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITDynamicTableCreationTest.java
@@ -23,9 +23,10 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
-import com.google.common.collect.Lists;
+
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
+import org.apache.ignite.internal.ITUtils;
 import org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -116,7 +117,7 @@ class ITDynamicTableCreationTest {
     /** */
     @AfterEach
     void tearDown() throws Exception {
-        IgniteUtils.closeAll(Lists.reverse(clusterNodes));
+        IgniteUtils.closeAll(ITUtils.reverse(clusterNodes));
     }
 
     /**
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITIgnitionTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITIgnitionTest.java
index 3d9f3ef..0ad156f 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITIgnitionTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITIgnitionTest.java
@@ -22,9 +22,10 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import com.google.common.collect.Lists;
+
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
+import org.apache.ignite.internal.ITUtils;
 import org.apache.ignite.internal.testframework.IgniteTestUtils;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -109,7 +110,7 @@ class ITIgnitionTest {
     /** */
     @AfterEach
     void tearDown() throws Exception {
-        IgniteUtils.closeAll(Lists.reverse(startedNodes));
+        IgniteUtils.closeAll(ITUtils.reverse(startedNodes));
     }
 
     /**
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITTablesApiTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITTablesApiTest.java
index dde1546..928d50b 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITTablesApiTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITTablesApiTest.java
@@ -25,9 +25,10 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
-import com.google.common.collect.Lists;
+
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
+import org.apache.ignite.internal.ITUtils;
 import org.apache.ignite.internal.app.IgniteImpl;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
 import org.apache.ignite.internal.metastorage.client.WatchEvent;
@@ -137,7 +138,7 @@ public class ITTablesApiTest extends IgniteAbstractTest {
      */
     @AfterEach
     void afterEach() throws Exception {
-        IgniteUtils.closeAll(Lists.reverse(clusterNodes));
+        IgniteUtils.closeAll(ITUtils.reverse(clusterNodes));
     }
 
     /**
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITThinClientConnectionTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITThinClientConnectionTest.java
index 40aa5b4..d1778eb 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITThinClientConnectionTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITThinClientConnectionTest.java
@@ -22,10 +22,11 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import com.google.common.collect.Lists;
+
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgnitionManager;
 import org.apache.ignite.client.IgniteClient;
+import org.apache.ignite.internal.ITUtils;
 import org.apache.ignite.internal.app.IgniteImpl;
 import org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter;
 import org.apache.ignite.internal.testframework.IgniteAbstractTest;
@@ -100,7 +101,7 @@ public class ITThinClientConnectionTest extends IgniteAbstractTest {
     /** */
     @AfterEach
     void tearDown() throws Exception {
-        IgniteUtils.closeAll(Lists.reverse(startedNodes));
+        IgniteUtils.closeAll(ITUtils.reverse(startedNodes));
     }
 
     /**