You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by mm...@apache.org on 2018/07/20 17:41:32 UTC

[19/53] [abbrv] calcite git commit: [CALCITE-2259] Allow Java 8 syntax

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptMaterialization.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptMaterialization.java b/core/src/main/java/org/apache/calcite/plan/RelOptMaterialization.java
index 6e1af24..e89c3f0 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptMaterialization.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptMaterialization.java
@@ -43,11 +43,11 @@ import org.apache.calcite.tools.Programs;
 import org.apache.calcite.util.Util;
 import org.apache.calcite.util.mapping.Mappings;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Records that a particular query is materialized by a particular table.
@@ -158,7 +158,7 @@ public class RelOptMaterialization {
               final RelNode project = RelOptUtil.createProject(
                   LogicalTableScan.create(cluster, leftRelOptTable),
                   Mappings.asList(mapping.inverse()));
-              final List<RexNode> conditions = Lists.newArrayList();
+              final List<RexNode> conditions = new ArrayList<>();
               if (left.condition != null) {
                 conditions.add(left.condition);
               }
@@ -182,7 +182,7 @@ public class RelOptMaterialization {
               final RelNode project = RelOptUtil.createProject(
                   LogicalTableScan.create(cluster, rightRelOptTable),
                   Mappings.asList(mapping.inverse()));
-              final List<RexNode> conditions = Lists.newArrayList();
+              final List<RexNode> conditions = new ArrayList<>();
               if (left.condition != null) {
                 conditions.add(
                     RexUtil.apply(mapping,
@@ -208,8 +208,8 @@ public class RelOptMaterialization {
         false,
         DefaultRelMetadataProvider.INSTANCE);
     return program.run(null, rel2, null,
-        ImmutableList.<RelOptMaterialization>of(),
-        ImmutableList.<RelOptLattice>of());
+        ImmutableList.of(),
+        ImmutableList.of());
   }
 
   /** A table scan and optional project mapping and filter condition. */
@@ -222,7 +222,7 @@ public class RelOptMaterialization {
         Mappings.TargetMapping mapping, TableScan scan) {
       this.condition = condition;
       this.mapping = mapping;
-      this.scan = Preconditions.checkNotNull(scan);
+      this.scan = Objects.requireNonNull(scan);
     }
 
     static ProjectFilterTable of(RelNode node) {
@@ -285,8 +285,8 @@ public class RelOptMaterialization {
               SqlExplainLevel.DIGEST_ATTRIBUTES));
     }
     final RelNode rel2 = program.run(null, rel, null,
-        ImmutableList.<RelOptMaterialization>of(),
-        ImmutableList.<RelOptLattice>of());
+        ImmutableList.of(),
+        ImmutableList.of());
     if (CalcitePrepareImpl.DEBUG) {
       System.out.println(
           RelOptUtil.dumpPlan("after", rel2, SqlExplainFormat.TEXT,

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java b/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
index 3c0362c..c4553fb 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptMaterializations.java
@@ -31,12 +31,9 @@ import org.apache.calcite.util.graph.DirectedGraph;
 import org.apache.calcite.util.graph.Graphs;
 import org.apache.calcite.util.graph.TopologicalOrderIterator;
 
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import java.util.ArrayList;
@@ -44,6 +41,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Supplier;
 
 /**
  * Utility methods for using
@@ -66,9 +64,7 @@ public abstract class RelOptMaterializations {
         getApplicableMaterializations(rel, materializations);
     final List<Pair<RelNode, List<RelOptMaterialization>>> applied =
         new ArrayList<>();
-    applied.add(
-        Pair.<RelNode, List<RelOptMaterialization>>of(
-            rel, ImmutableList.<RelOptMaterialization>of()));
+    applied.add(Pair.of(rel, ImmutableList.of()));
     for (RelOptMaterialization m : applicableMaterializations) {
       int count = applied.size();
       for (int i = 0; i < count; i++) {
@@ -102,16 +98,13 @@ public abstract class RelOptMaterializations {
     final Set<RelOptTable> queryTables = RelOptUtil.findTables(rel);
     // Use a lattice if the query uses at least the central (fact) table of the
     // lattice.
-    final List<Pair<RelNode, RelOptLattice>> latticeUses = Lists.newArrayList();
+    final List<Pair<RelNode, RelOptLattice>> latticeUses = new ArrayList<>();
     final Set<List<String>> queryTableNames =
-        Sets.newHashSet(Iterables.transform(queryTables, GET_QUALIFIED_NAME));
+        Sets.newHashSet(
+            Iterables.transform(queryTables, RelOptTable::getQualifiedName));
     // Remember leaf-join form of root so we convert at most once.
-    final Supplier<RelNode> leafJoinRoot = Suppliers.memoize(
-        new Supplier<RelNode>() {
-          public RelNode get() {
-            return RelOptMaterialization.toLeafJoinForm(rel);
-          }
-        });
+    final Supplier<RelNode> leafJoinRoot =
+        Suppliers.memoize(() -> RelOptMaterialization.toLeafJoinForm(rel))::get;
     for (RelOptLattice lattice : lattices) {
       if (queryTableNames.contains(lattice.rootTable().getQualifiedName())) {
         RelNode rel2 = lattice.rewrite(leafJoinRoot.get());
@@ -163,7 +156,8 @@ public abstract class RelOptMaterializations {
     final Graphs.FrozenGraph<List<String>, DefaultEdge> frozenGraph =
         Graphs.makeImmutable(usesGraph);
     final Set<RelOptTable> queryTablesUsed = RelOptUtil.findTables(rel);
-    final List<RelOptMaterialization> applicableMaterializations = Lists.newArrayList();
+    final List<RelOptMaterialization> applicableMaterializations =
+        new ArrayList<>();
     for (List<String> qname : TopologicalOrderIterator.of(usesGraph)) {
       RelOptMaterialization materialization = qnameMap.get(qname);
       if (materialization != null
@@ -174,13 +168,6 @@ public abstract class RelOptMaterializations {
     return applicableMaterializations;
   }
 
-  private static final Function<RelOptTable, List<String>> GET_QUALIFIED_NAME =
-      new Function<RelOptTable, List<String>>() {
-        public List<String> apply(RelOptTable relOptTable) {
-          return relOptTable.getQualifiedName();
-        }
-      };
-
   private static List<RelNode> substitute(
       RelNode root, RelOptMaterialization materialization) {
     // First, if the materialization is in terms of a star table, rewrite

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptPredicateList.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptPredicateList.java b/core/src/main/java/org/apache/calcite/plan/RelOptPredicateList.java
index d163905..5523cfc 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptPredicateList.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptPredicateList.java
@@ -20,10 +20,11 @@ import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexUtil;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
+import java.util.Objects;
+
 /**
  * Predicates that are known to hold in the output of a particular relational
  * expression.
@@ -67,7 +68,7 @@ public class RelOptPredicateList {
   private static final ImmutableList<RexNode> EMPTY_LIST = ImmutableList.of();
   public static final RelOptPredicateList EMPTY =
       new RelOptPredicateList(EMPTY_LIST, EMPTY_LIST, EMPTY_LIST,
-          ImmutableMap.<RexNode, RexNode>of());
+          ImmutableMap.of());
 
   /** Predicates that can be pulled up from the relational expression and its
    * inputs. */
@@ -89,12 +90,12 @@ public class RelOptPredicateList {
       ImmutableList<RexNode> leftInferredPredicates,
       ImmutableList<RexNode> rightInferredPredicates,
       ImmutableMap<RexNode, RexNode> constantMap) {
-    this.pulledUpPredicates = Preconditions.checkNotNull(pulledUpPredicates);
+    this.pulledUpPredicates = Objects.requireNonNull(pulledUpPredicates);
     this.leftInferredPredicates =
-        Preconditions.checkNotNull(leftInferredPredicates);
+        Objects.requireNonNull(leftInferredPredicates);
     this.rightInferredPredicates =
-        Preconditions.checkNotNull(rightInferredPredicates);
-    this.constantMap = Preconditions.checkNotNull(constantMap);
+        Objects.requireNonNull(rightInferredPredicates);
+    this.constantMap = Objects.requireNonNull(constantMap);
   }
 
   /** Creates a RelOptPredicateList with only pulled-up predicates, no inferred

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptRule.java b/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
index c5af926..1f23bc2 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptRule.java
@@ -22,15 +22,13 @@ import org.apache.calcite.rel.convert.ConverterRule;
 import org.apache.calcite.rel.core.RelFactories;
 import org.apache.calcite.tools.RelBuilderFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
+import java.util.function.Predicate;
 
 /**
  * A <code>RelOptRule</code> transforms an expression into another. It has a
@@ -97,8 +95,8 @@ public abstract class RelOptRule {
    */
   public RelOptRule(RelOptRuleOperand operand,
       RelBuilderFactory relBuilderFactory, String description) {
-    this.operand = Preconditions.checkNotNull(operand);
-    this.relBuilderFactory = Preconditions.checkNotNull(relBuilderFactory);
+    this.operand = Objects.requireNonNull(operand);
+    this.relBuilderFactory = Objects.requireNonNull(relBuilderFactory);
     if (description == null) {
       description = guessDescription(getClass().getName());
     }
@@ -126,7 +124,7 @@ public abstract class RelOptRule {
   public static <R extends RelNode> RelOptRuleOperand operand(
       Class<R> clazz,
       RelOptRuleOperandChildren operandList) {
-    return new RelOptRuleOperand(clazz, null, Predicates.<R>alwaysTrue(),
+    return new RelOptRuleOperand(clazz, null, r -> true,
         operandList.policy, operandList.operands);
   }
 
@@ -145,7 +143,7 @@ public abstract class RelOptRule {
       Class<R> clazz,
       RelTrait trait,
       RelOptRuleOperandChildren operandList) {
-    return new RelOptRuleOperand(clazz, trait, Predicates.<R>alwaysTrue(),
+    return new RelOptRuleOperand(clazz, trait, r -> true,
         operandList.policy, operandList.operands);
   }
 
@@ -161,7 +159,7 @@ public abstract class RelOptRule {
    * @return Operand that matches a relational expression that has a
    *   particular trait and predicate
    */
-  public static <R extends RelNode> RelOptRuleOperand operand(
+  public static <R extends RelNode> RelOptRuleOperand operandJ(
       Class<R> clazz,
       RelTrait trait,
       Predicate<? super R> predicate,
@@ -170,6 +168,18 @@ public abstract class RelOptRule {
         operandList.operands);
   }
 
+  /** @deprecated Use {@link #operandJ} */
+  @SuppressWarnings("Guava")
+  @Deprecated // to be removed before 2.0
+  public static <R extends RelNode> RelOptRuleOperand operand(
+      Class<R> clazz,
+      RelTrait trait,
+      com.google.common.base.Predicate<? super R> predicate,
+      RelOptRuleOperandChildren operandList) {
+    return operandJ(clazz, trait, (Predicate<? super R>) predicate::apply,
+        operandList);
+  }
+
   /**
    * Creates an operand that matches a relational expression that has no
    * children.
@@ -182,13 +192,25 @@ public abstract class RelOptRule {
    * @param <R> Class of relational expression to match
    * @return Operand
    */
-  public static <R extends RelNode> RelOptRuleOperand operand(
+  public static <R extends RelNode> RelOptRuleOperand operandJ(
       Class<R> clazz,
       RelTrait trait,
       Predicate<? super R> predicate,
       RelOptRuleOperand first,
       RelOptRuleOperand... rest) {
-    return operand(clazz, trait, predicate, some(first, rest));
+    return operandJ(clazz, trait, predicate, some(first, rest));
+  }
+
+  @SuppressWarnings("Guava")
+  @Deprecated // to be removed before 2.0
+  public static <R extends RelNode> RelOptRuleOperand operand(
+      Class<R> clazz,
+      RelTrait trait,
+      com.google.common.base.Predicate<? super R> predicate,
+      RelOptRuleOperand first,
+      RelOptRuleOperand... rest) {
+    return operandJ(clazz, trait, (Predicate<? super R>) predicate::apply,
+        first, rest);
   }
 
   /**
@@ -230,6 +252,16 @@ public abstract class RelOptRule {
     return new ConverterRelOptRuleOperand(clazz, trait, predicate);
   }
 
+  /** @deprecated Use {@link #convertOperand(Class, Predicate, RelTrait)}. */
+  @SuppressWarnings("Guava")
+  @Deprecated // to be removed before 2.0
+  protected static <R extends RelNode> ConverterRelOptRuleOperand
+      convertOperand(Class<R> clazz,
+      com.google.common.base.Predicate<? super R> predicate,
+      RelTrait trait) {
+    return new ConverterRelOptRuleOperand(clazz, trait, predicate::apply);
+  }
+
   //~ Methods for creating lists of child operands ---------------------------
 
   /**
@@ -572,11 +604,7 @@ public abstract class RelOptRule {
   protected static List<RelNode> convertList(List<RelNode> rels,
       final RelTrait trait) {
     return Lists.transform(rels,
-        new Function<RelNode, RelNode>() {
-          public RelNode apply(RelNode rel) {
-            return convert(rel, rel.getTraitSet().replace(trait));
-          }
-        });
+        rel -> convert(rel, rel.getTraitSet().replace(trait)));
   }
 
   /**
@@ -619,7 +647,7 @@ public abstract class RelOptRule {
     <R extends RelNode> ConverterRelOptRuleOperand(Class<R> clazz, RelTrait in,
         Predicate<? super R> predicate) {
       super(clazz, in, predicate, RelOptRuleOperandChildPolicy.ANY,
-          ImmutableList.<RelOptRuleOperand>of());
+          ImmutableList.of());
     }
 
     public boolean matches(RelNode rel) {

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptRuleCall.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptRuleCall.java b/core/src/main/java/org/apache/calcite/plan/RelOptRuleCall.java
index d753b66..2654b54 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptRuleCall.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptRuleCall.java
@@ -231,7 +231,7 @@ public abstract class RelOptRuleCall {
    *            expression of the rule call, {@code call.rels(0)}
    */
   public final void transformTo(RelNode rel) {
-    transformTo(rel, ImmutableMap.<RelNode, RelNode>of());
+    transformTo(rel, ImmutableMap.of());
   }
 
   /** Creates a {@link org.apache.calcite.tools.RelBuilder} to be used by

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperand.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperand.java b/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperand.java
index d3c5f2f..7506010 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperand.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperand.java
@@ -18,12 +18,11 @@ package org.apache.calcite.plan;
 
 import org.apache.calcite.rel.RelNode;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Predicate;
 
 /**
  * Operand that determines whether a {@link RelOptRule}
@@ -118,10 +117,10 @@ public class RelOptRuleOperand {
       assert children.size() > 0;
     }
     this.childPolicy = childPolicy;
-    this.clazz = Preconditions.checkNotNull(clazz);
+    this.clazz = Objects.requireNonNull(clazz);
     this.trait = trait;
     //noinspection unchecked
-    this.predicate = Preconditions.checkNotNull((Predicate) predicate);
+    this.predicate = Objects.requireNonNull((Predicate) predicate);
     this.children = children;
     for (RelOptRuleOperand child : this.children) {
       assert child.parent == null : "cannot re-use operands";
@@ -212,7 +211,7 @@ public class RelOptRuleOperand {
     if ((trait != null) && !rel.getTraitSet().contains(trait)) {
       return false;
     }
-    return predicate.apply(rel);
+    return predicate.test(rel);
   }
 }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperandChildren.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperandChildren.java b/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperandChildren.java
index 9d7dc18..3dfab3e 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperandChildren.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptRuleOperandChildren.java
@@ -34,12 +34,12 @@ public class RelOptRuleOperandChildren {
   static final RelOptRuleOperandChildren ANY_CHILDREN =
       new RelOptRuleOperandChildren(
           RelOptRuleOperandChildPolicy.ANY,
-          ImmutableList.<RelOptRuleOperand>of());
+          ImmutableList.of());
 
   static final RelOptRuleOperandChildren LEAF_CHILDREN =
       new RelOptRuleOperandChildren(
           RelOptRuleOperandChildPolicy.LEAF,
-          ImmutableList.<RelOptRuleOperand>of());
+          ImmutableList.of());
 
   final RelOptRuleOperandChildPolicy policy;
   final ImmutableList<RelOptRuleOperand> operands;

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
index b4d666b..38912ca 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelOptUtil.java
@@ -80,7 +80,6 @@ import org.apache.calcite.rex.RexToSqlNodeConverterImpl;
 import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.rex.RexVisitorImpl;
 import org.apache.calcite.runtime.CalciteContextException;
-import org.apache.calcite.runtime.PredicateImpl;
 import org.apache.calcite.schema.ModifiableView;
 import org.apache.calcite.sql.SqlExplainFormat;
 import org.apache.calcite.sql.SqlExplainLevel;
@@ -102,14 +101,10 @@ import org.apache.calcite.util.mapping.Mapping;
 import org.apache.calcite.util.mapping.MappingType;
 import org.apache.calcite.util.mapping.Mappings;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 
 import java.io.PrintWriter;
@@ -118,6 +113,7 @@ import java.util.AbstractList;
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -126,6 +122,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.function.Supplier;
 
 /**
  * <code>RelOptUtil</code> defines static utility methods for use in optimizing
@@ -134,49 +131,26 @@ import java.util.TreeSet;
 public abstract class RelOptUtil {
   //~ Static fields/initializers ---------------------------------------------
 
-  public static final double EPSILON = 1.0e-5;
-
-  /** Predicate for whether a filter contains multisets or windowed
-   * aggregates. */
-  public static final Predicate<Filter> FILTER_PREDICATE =
-      new PredicateImpl<Filter>() {
-        public boolean test(Filter filter) {
-          return !(B
-              && RexMultisetUtil.containsMultiset(filter.getCondition(), true)
-              || RexOver.containsOver(filter.getCondition()));
-        }
-      };
+  static final boolean B = false;
 
-  /** Predicate for whether a project contains multisets or windowed
-   * aggregates. */
-  public static final Predicate<Project> PROJECT_PREDICATE =
-      new PredicateImpl<Project>() {
-        public boolean test(Project project) {
-          return !(B
-              && RexMultisetUtil.containsMultiset(project.getProjects(), true)
-              || RexOver.containsOver(project.getProjects(), null));
-        }
-      };
+  public static final double EPSILON = 1.0e-5;
 
-  /** Predicate for whether a calc contains multisets or windowed
-   * aggregates. */
-  public static final Predicate<Calc> CALC_PREDICATE =
-      new PredicateImpl<Calc>() {
-        public boolean test(Calc calc) {
-          return !(B
-              && RexMultisetUtil.containsMultiset(calc.getProgram())
-              || calc.getProgram().containsAggs());
-        }
-      };
+  @SuppressWarnings("Guava")
+  @Deprecated // to be removed before 2.0
+  public static final com.google.common.base.Predicate<Filter>
+      FILTER_PREDICATE =
+      RelOptUtil::containsMultisetOrWindowedAgg;
 
-  static final boolean B = false;
+  @SuppressWarnings("Guava")
+  @Deprecated // to be removed before 2.0
+  public static final com.google.common.base.Predicate<Project>
+      PROJECT_PREDICATE =
+      RelOptUtil::containsMultisetOrWindowedAgg;
 
-  private static final Function<RelDataTypeField, RelDataType> GET_TYPE =
-      new Function<RelDataTypeField, RelDataType>() {
-        public RelDataType apply(RelDataTypeField field) {
-          return field.getType();
-        }
-      };
+  @SuppressWarnings("Guava")
+  @Deprecated // to be removed before 2.0
+  public static final com.google.common.base.Predicate<Calc> CALC_PREDICATE =
+      RelOptUtil::containsMultisetOrWindowedAgg;
 
   //~ Methods ----------------------------------------------------------------
 
@@ -244,11 +218,7 @@ public abstract class RelOptUtil {
    */
   public static List<String> findAllTableQualifiedNames(RelNode rel) {
     return Lists.transform(findAllTables(rel),
-        new Function<RelOptTable, String>() {
-          @Override public String apply(RelOptTable arg0) {
-            return arg0.getQualifiedName().toString();
-          }
-        });
+        table -> table.getQualifiedName().toString());
   }
 
   /**
@@ -347,7 +317,7 @@ public abstract class RelOptUtil {
    * @see org.apache.calcite.rel.type.RelDataType#getFieldNames()
    */
   public static List<RelDataType> getFieldTypeList(final RelDataType type) {
-    return Lists.transform(type.getFieldList(), GET_TYPE);
+    return Lists.transform(type.getFieldList(), RelDataTypeField::getType);
   }
 
   public static boolean areRowTypesEqual(
@@ -574,7 +544,7 @@ public abstract class RelOptUtil {
     if (!outerJoin) {
       final LogicalAggregate aggregate =
           LogicalAggregate.create(ret, ImmutableBitSet.range(keyCount), null,
-              ImmutableList.<AggregateCall>of());
+              ImmutableList.of());
       return new Exists(aggregate, false, false);
     }
 
@@ -635,7 +605,7 @@ public abstract class RelOptUtil {
       assert inputField.getType().equals(outputField.getType());
       final RexBuilder rexBuilder = rel.getCluster().getRexBuilder();
       renames.add(
-          Pair.<RexNode, String>of(
+          Pair.of(
               rexBuilder.makeInputRef(inputField.getType(),
                   inputField.getIndex()),
               outputField.getName()));
@@ -814,7 +784,7 @@ public abstract class RelOptUtil {
   public static RelNode createDistinctRel(RelNode rel) {
     return LogicalAggregate.create(rel,
         ImmutableBitSet.range(rel.getRowType().getFieldCount()), null,
-        ImmutableList.<AggregateCall>of());
+        ImmutableList.of());
   }
 
   @Deprecated // to be removed before 2.0
@@ -1720,7 +1690,7 @@ public abstract class RelOptUtil {
       for (int fieldIndex : outputProj) {
         final RelDataTypeField field = joinOutputFields.get(fieldIndex);
         newProjects.add(
-            Pair.<RexNode, String>of(
+            Pair.of(
                 rexBuilder.makeInputRef(field.getType(), fieldIndex),
                 field.getName()));
       }
@@ -2287,7 +2257,7 @@ public abstract class RelOptUtil {
     final RexBuilder rexBuilder = new RexBuilder(typeFactory);
     final RexNode constraint =
         modifiableViewTable.getConstraint(rexBuilder, targetRowType);
-    final Map<Integer, RexNode> projectMap = Maps.newHashMap();
+    final Map<Integer, RexNode> projectMap = new HashMap<>();
     final List<RexNode> filters = new ArrayList<>();
     RelOptUtil.inferViewPredicates(projectMap, filters, constraint);
     assert filters.isEmpty();
@@ -2430,7 +2400,7 @@ public abstract class RelOptUtil {
     ImmutableBitSet rightBitmap =
         ImmutableBitSet.range(nSysFields + nFieldsLeft, nTotalFields);
 
-    final List<RexNode> filtersToRemove = Lists.newArrayList();
+    final List<RexNode> filtersToRemove = new ArrayList<>();
     for (RexNode filter : filters) {
       final InputFinder inputFinder = InputFinder.analyze(filter);
       final ImmutableBitSet inputBits = inputFinder.inputBitSet.build();
@@ -2691,7 +2661,7 @@ public abstract class RelOptUtil {
 
     // create new copies of the bitmaps
     List<RelNode> multiJoinInputs = multiJoin.getInputs();
-    List<BitSet> newProjFields = Lists.newArrayList();
+    List<BitSet> newProjFields = new ArrayList<>();
     for (RelNode multiJoinInput : multiJoinInputs) {
       newProjFields.add(
           new BitSet(multiJoinInput.getRowType().getFieldCount()));
@@ -2722,7 +2692,7 @@ public abstract class RelOptUtil {
         multiJoin.isFullOuterJoin(),
         multiJoin.getOuterJoinConditions(),
         multiJoin.getJoinTypes(),
-        Lists.transform(newProjFields, ImmutableBitSet.FROM_BIT_SET),
+        Lists.transform(newProjFields, ImmutableBitSet::fromBitSet),
         multiJoin.getJoinFieldRefCountsMap(),
         multiJoin.getPostJoinFilter());
   }
@@ -3093,8 +3063,8 @@ public abstract class RelOptUtil {
     if (mapping.isIdentity()) {
       return rel;
     }
-    final List<String> outputNameList = Lists.newArrayList();
-    final List<RexNode> exprList = Lists.newArrayList();
+    final List<String> outputNameList = new ArrayList<>();
+    final List<RexNode> exprList = new ArrayList<>();
     final List<RelDataTypeField> fields = rel.getRowType().getFieldList();
     final RexBuilder rexBuilder = rel.getCluster().getRexBuilder();
     for (int i = 0; i < mapping.getTargetCount(); i++) {
@@ -3110,6 +3080,30 @@ public abstract class RelOptUtil {
     return projectFactory.createProject(rel, exprList, outputNameList);
   }
 
+  /** Predicate for whether a {@link Calc} contains multisets or windowed
+   * aggregates. */
+  public static boolean containsMultisetOrWindowedAgg(Calc calc) {
+    return !(B
+        && RexMultisetUtil.containsMultiset(calc.getProgram())
+        || calc.getProgram().containsAggs());
+  }
+
+  /** Predicate for whether a {@link Filter} contains multisets or windowed
+   * aggregates. */
+  public static boolean containsMultisetOrWindowedAgg(Filter filter) {
+    return !(B
+        && RexMultisetUtil.containsMultiset(filter.getCondition(), true)
+        || RexOver.containsOver(filter.getCondition()));
+  }
+
+  /** Predicate for whether a {@link Project} contains multisets or windowed
+   * aggregates. */
+  public static boolean containsMultisetOrWindowedAgg(Project project) {
+    return !(B
+        && RexMultisetUtil.containsMultiset(project.getProjects(), true)
+        || RexOver.containsOver(project.getProjects(), null));
+  }
+
   /** Policies for handling two- and three-valued boolean logic. */
   public enum Logic {
     /** Three-valued boolean logic. */
@@ -3221,7 +3215,7 @@ public abstract class RelOptUtil {
             public Pair<RexNode, String> get(int index) {
               if (index < leftCount) {
                 RelDataTypeField field = fields.get(index);
-                return Pair.<RexNode, String>of(
+                return Pair.of(
                     new RexInputRef(index, field.getType()), field.getName());
               } else {
                 return Pair.of(extraLeftExprs.get(index - leftCount), null);
@@ -3245,7 +3239,7 @@ public abstract class RelOptUtil {
             public Pair<RexNode, String> get(int index) {
               if (index < rightCount) {
                 RelDataTypeField field = fields.get(index);
-                return Pair.<RexNode, String>of(
+                return Pair.of(
                     new RexInputRef(index, field.getType()),
                     field.getName());
               } else {

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelTraitDef.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelTraitDef.java b/core/src/main/java/org/apache/calcite/plan/RelTraitDef.java
index 809dd21..1f0bdf8 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelTraitDef.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelTraitDef.java
@@ -59,12 +59,7 @@ public abstract class RelTraitDef<T extends RelTrait> {
   private final LoadingCache<T, T> canonicalMap =
       CacheBuilder.newBuilder()
           .softValues()
-          .build(
-              new CacheLoader<T, T>() {
-                @Override public T load(@Nonnull T key) throws Exception {
-                  return key;
-                }
-              });
+          .build(CacheLoader.from(key -> key));
 
   /** Cache of composite traits.
    *

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RelTraitSet.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RelTraitSet.java b/core/src/main/java/org/apache/calcite/plan/RelTraitSet.java
index 5499bdb..717ef07 100644
--- a/core/src/main/java/org/apache/calcite/plan/RelTraitSet.java
+++ b/core/src/main/java/org/apache/calcite/plan/RelTraitSet.java
@@ -19,7 +19,6 @@ package org.apache.calcite.plan;
 import org.apache.calcite.runtime.FlatLists;
 import org.apache.calcite.util.Pair;
 
-import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableList;
 
 import java.util.AbstractList;
@@ -27,6 +26,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Supplier;
 
 /**
  * RelTraitSet represents an ordered set of {@link RelTrait}s.
@@ -551,7 +551,7 @@ public final class RelTraitSet extends AbstractList<RelTrait> {
         return traitSet1;
       }
       final RelTraitSet traitSet =
-          new RelTraitSet(this, traits.toArray(new RelTrait[traits.size()]));
+          new RelTraitSet(this, traits.toArray(new RelTrait[0]));
       map.put(traits, traitSet);
       return traitSet;
     }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java b/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java
index f7cd9e1..f2b32f2 100644
--- a/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java
+++ b/core/src/main/java/org/apache/calcite/plan/RexImplicationChecker.java
@@ -32,7 +32,6 @@ import org.apache.calcite.sql.fun.SqlCastFunction;
 import org.apache.calcite.util.Pair;
 import org.apache.calcite.util.trace.CalciteLogger;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
@@ -43,6 +42,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -70,9 +70,9 @@ public class RexImplicationChecker {
       RexBuilder builder,
       RexExecutorImpl executor,
       RelDataType rowType) {
-    this.builder = Preconditions.checkNotNull(builder);
-    this.executor = Preconditions.checkNotNull(executor);
-    this.rowType = Preconditions.checkNotNull(rowType);
+    this.builder = Objects.requireNonNull(builder);
+    this.executor = Objects.requireNonNull(executor);
+    this.rowType = Objects.requireNonNull(rowType);
   }
 
   /**
@@ -196,8 +196,8 @@ public class RexImplicationChecker {
     final InputUsageFinder firstUsageFinder = new InputUsageFinder();
     final InputUsageFinder secondUsageFinder = new InputUsageFinder();
 
-    RexUtil.apply(firstUsageFinder, ImmutableList.<RexNode>of(), first);
-    RexUtil.apply(secondUsageFinder, ImmutableList.<RexNode>of(), second);
+    RexUtil.apply(firstUsageFinder, ImmutableList.of(), first);
+    RexUtil.apply(secondUsageFinder, ImmutableList.of(), second);
 
     // Check Support
     if (!checkSupport(firstUsageFinder, secondUsageFinder)) {

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/Strong.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/Strong.java b/core/src/main/java/org/apache/calcite/plan/Strong.java
index e631d90..39a4515 100644
--- a/core/src/main/java/org/apache/calcite/plan/Strong.java
+++ b/core/src/main/java/org/apache/calcite/plan/Strong.java
@@ -24,7 +24,6 @@ import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.util.ImmutableBitSet;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 
@@ -32,6 +31,7 @@ import java.util.ArrayList;
 import java.util.EnumMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /** Utilities for strong predicates.
  *
@@ -87,7 +87,7 @@ public class Strong {
   /** Returns how to deduce whether a particular kind of expression is null,
    * given whether its arguments are null. */
   public static Policy policy(SqlKind kind) {
-    return Preconditions.checkNotNull(MAP.get(kind), kind);
+    return Objects.requireNonNull(MAP.get(kind), kind.toString());
   }
 
   /** Returns whether an expression is definitely not true. */

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
index 0625bff..c8f92c7 100644
--- a/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
+++ b/core/src/main/java/org/apache/calcite/plan/SubstitutionVisitor.java
@@ -44,7 +44,6 @@ import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexShuttle;
 import org.apache.calcite.rex.RexSimplify;
 import org.apache.calcite.rex.RexUtil;
-import org.apache.calcite.runtime.PredicateImpl;
 import org.apache.calcite.sql.SqlAggFunction;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.tools.RelBuilder;
@@ -60,13 +59,9 @@ import org.apache.calcite.util.mapping.Mappings;
 import org.apache.calcite.util.trace.CalciteTrace;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Sets;
 
@@ -78,6 +73,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
@@ -122,7 +118,7 @@ public class SubstitutionVisitor {
   private static final Logger LOGGER = CalciteTrace.getPlannerTracer();
 
   protected static final ImmutableList<UnifyRule> DEFAULT_RULES =
-      ImmutableList.<UnifyRule>of(
+      ImmutableList.of(
           TrivialRule.INSTANCE,
           ScanToProjectUnifyRule.INSTANCE,
           ProjectToProjectUnifyRule.INSTANCE,
@@ -472,7 +468,7 @@ public class SubstitutionVisitor {
     if (matches.isEmpty()) {
       return ImmutableList.of();
     }
-    List<RelNode> sub = Lists.newArrayList();
+    List<RelNode> sub = new ArrayList<>();
     sub.add(MutableRels.fromMutable(query.getInput(), relBuilder));
     reverseSubstitute(relBuilder, query, matches, sub, 0, matches.size());
     return sub;
@@ -493,7 +489,7 @@ public class SubstitutionVisitor {
 
     // Populate "equivalents" with (q, t) for each query descendant q and
     // target descendant t that are equal.
-    final Map<MutableRel, MutableRel> map = Maps.newHashMap();
+    final Map<MutableRel, MutableRel> map = new HashMap<>();
     for (MutableRel queryDescendant : queryDescendants) {
       map.put(queryDescendant, queryDescendant);
     }
@@ -506,8 +502,8 @@ public class SubstitutionVisitor {
     }
     map.clear();
 
-    final List<Replacement> attempted = Lists.newArrayList();
-    List<List<Replacement>> substitutions = Lists.newArrayList();
+    final List<Replacement> attempted = new ArrayList<>();
+    List<List<Replacement>> substitutions = new ArrayList<>();
 
     for (;;) {
       int count = 0;
@@ -863,10 +859,10 @@ public class SubstitutionVisitor {
 
     public UnifyRuleCall(UnifyRule rule, MutableRel query, MutableRel target,
         ImmutableList<MutableRel> slots) {
-      this.rule = Preconditions.checkNotNull(rule);
-      this.query = Preconditions.checkNotNull(query);
-      this.target = Preconditions.checkNotNull(target);
-      this.slots = Preconditions.checkNotNull(slots);
+      this.rule = Objects.requireNonNull(rule);
+      this.query = Objects.requireNonNull(query);
+      this.target = Objects.requireNonNull(target);
+      this.slots = Objects.requireNonNull(slots);
     }
 
     public UnifyResult result(MutableRel result) {
@@ -1257,12 +1253,8 @@ public class SubstitutionVisitor {
   private static List<AggregateCall> apply(final Mapping mapping,
       List<AggregateCall> aggCallList) {
     return Lists.transform(aggCallList,
-        new Function<AggregateCall, AggregateCall>() {
-          public AggregateCall apply(AggregateCall call) {
-            return call.copy(Mappings.apply2(mapping, call.getArgList()),
-                Mappings.apply(mapping, call.filterArg));
-          }
-        });
+        call -> call.copy(Mappings.apply2(mapping, call.getArgList()),
+            Mappings.apply(mapping, call.filterArg)));
   }
 
   public static MutableRel unifyAggregates(MutableAggregate query,
@@ -1274,7 +1266,7 @@ public class SubstitutionVisitor {
     MutableRel result;
     if (query.groupSet.equals(target.groupSet)) {
       // Same level of aggregation. Generate a project.
-      final List<Integer> projects = Lists.newArrayList();
+      final List<Integer> projects = new ArrayList<>();
       final int groupCount = query.groupSet.cardinality();
       for (int i = 0; i < groupCount; i++) {
         projects.add(i);
@@ -1298,7 +1290,7 @@ public class SubstitutionVisitor {
         }
         groupSet.set(c2);
       }
-      final List<AggregateCall> aggregateCalls = Lists.newArrayList();
+      final List<AggregateCall> aggregateCalls = new ArrayList<>();
       for (AggregateCall aggregateCall : query.aggCalls) {
         if (aggregateCall.isDistinct()) {
           return null;
@@ -1582,13 +1574,6 @@ public class SubstitutionVisitor {
    * trivial filter (on a boolean column).
    */
   public static class FilterOnProjectRule extends RelOptRule {
-    private static final Predicate<LogicalFilter> PREDICATE =
-        new PredicateImpl<LogicalFilter>() {
-          public boolean test(LogicalFilter input) {
-            return input.getCondition() instanceof RexInputRef;
-          }
-        };
-
     public static final FilterOnProjectRule INSTANCE =
         new FilterOnProjectRule(RelFactories.LOGICAL_BUILDER);
 
@@ -1599,7 +1584,8 @@ public class SubstitutionVisitor {
      */
     public FilterOnProjectRule(RelBuilderFactory relBuilderFactory) {
       super(
-          operand(LogicalFilter.class, null, PREDICATE,
+          operandJ(LogicalFilter.class, null,
+              filter -> filter.getCondition() instanceof RexInputRef,
               some(operand(LogicalProject.class, any()))),
           relBuilderFactory, null);
     }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
index c022d8b..3f7f73e 100644
--- a/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java
@@ -133,7 +133,7 @@ public class HepPlanner extends AbstractRelOptPlanner {
     super(costFactory, context);
     this.mainProgram = program;
     this.onCopyHook =
-        Util.first(onCopyHook, Functions.<RelNode, RelNode, Void>ignore2());
+        Util.first(onCopyHook, Functions.ignore2());
     mapDigestToVertex = new HashMap<>();
     graph = DefaultDirectedGraph.create();
 
@@ -544,7 +544,7 @@ public class HepPlanner extends AbstractRelOptPlanner {
         new HepRuleCall(
             this,
             rule.getOperand(),
-            bindings.toArray(new RelNode[bindings.size()]),
+            bindings.toArray(new RelNode[0]),
             nodeChildren,
             parents);
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/hep/HepRelMetadataProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/hep/HepRelMetadataProvider.java b/core/src/main/java/org/apache/calcite/plan/hep/HepRelMetadataProvider.java
index 48681eb..103018b 100644
--- a/core/src/main/java/org/apache/calcite/plan/hep/HepRelMetadataProvider.java
+++ b/core/src/main/java/org/apache/calcite/plan/hep/HepRelMetadataProvider.java
@@ -21,7 +21,6 @@ import org.apache.calcite.rel.metadata.Metadata;
 import org.apache.calcite.rel.metadata.MetadataDef;
 import org.apache.calcite.rel.metadata.MetadataHandler;
 import org.apache.calcite.rel.metadata.RelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.calcite.rel.metadata.UnboundMetadata;
 
 import com.google.common.collect.ImmutableMultimap;
@@ -47,18 +46,16 @@ class HepRelMetadataProvider implements RelMetadataProvider {
   public <M extends Metadata> UnboundMetadata<M> apply(
       Class<? extends RelNode> relClass,
       final Class<? extends M> metadataClass) {
-    return new UnboundMetadata<M>() {
-      public M bind(RelNode rel, RelMetadataQuery mq) {
-        if (!(rel instanceof HepRelVertex)) {
-          return null;
-        }
-        HepRelVertex vertex = (HepRelVertex) rel;
-        final RelNode rel2 = vertex.getCurrentRel();
-        UnboundMetadata<M> function =
-            rel.getCluster().getMetadataProvider().apply(rel2.getClass(),
-                metadataClass);
-        return function.bind(rel2, mq);
+    return (rel, mq) -> {
+      if (!(rel instanceof HepRelVertex)) {
+        return null;
       }
+      HepRelVertex vertex = (HepRelVertex) rel;
+      final RelNode rel2 = vertex.getCurrentRel();
+      UnboundMetadata<M> function =
+          rel.getCluster().getMetadataProvider().apply(rel2.getClass(),
+              metadataClass);
+      return function.bind(rel2, mq);
     };
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
index 60f4a07..8352ffe 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/RelSubset.java
@@ -17,7 +17,6 @@
 package org.apache.calcite.plan.volcano;
 
 import org.apache.calcite.linq4j.Linq4j;
-import org.apache.calcite.linq4j.function.Predicate1;
 import org.apache.calcite.plan.RelOptCluster;
 import org.apache.calcite.plan.RelOptCost;
 import org.apache.calcite.plan.RelOptListener;
@@ -41,7 +40,6 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -387,18 +385,9 @@ public class RelSubset extends AbstractRelNode {
    * @return all the rels in the subset
    */
   public Iterable<RelNode> getRels() {
-    return new Iterable<RelNode>() {
-      public Iterator<RelNode> iterator() {
-        return Linq4j.asEnumerable(set.rels)
-            .where(
-                new Predicate1<RelNode>() {
-                  public boolean apply(RelNode v1) {
-                    return v1.getTraitSet().satisfies(traitSet);
-                  }
-                })
-            .iterator();
-      }
-    };
+    return () -> Linq4j.asEnumerable(set.rels)
+        .where(v1 -> v1.getTraitSet().satisfies(traitSet))
+        .iterator();
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java b/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java
index 1e2713f..10b9553 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java
@@ -37,7 +37,6 @@ import java.io.StringWriter;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.Deque;
 import java.util.EnumMap;
@@ -235,32 +234,30 @@ class RuleQueue {
       }
     }
 
-    Collections.sort(
-        boostRemovals,
-        new Comparator<RelSubset>() {
-          public int compare(RelSubset o1, RelSubset o2) {
-            int o1children = countChildren(o1);
-            int o2children = countChildren(o2);
-            int c = compare(o1children, o2children);
-            if (c == 0) {
-              // for determinism
-              c = compare(o1.getId(), o2.getId());
-            }
-            return c;
-          }
+    boostRemovals.sort(new Comparator<RelSubset>() {
+      public int compare(RelSubset o1, RelSubset o2) {
+        int o1children = countChildren(o1);
+        int o2children = countChildren(o2);
+        int c = compare(o1children, o2children);
+        if (c == 0) {
+          // for determinism
+          c = compare(o1.getId(), o2.getId());
+        }
+        return c;
+      }
 
-          private int compare(int i1, int i2) {
-            return (i1 < i2) ? -1 : ((i1 == i2) ? 0 : 1);
-          }
+      private int compare(int i1, int i2) {
+        return (i1 < i2) ? -1 : ((i1 == i2) ? 0 : 1);
+      }
 
-          private int countChildren(RelSubset subset) {
-            int count = 0;
-            for (RelNode rel : subset.getRels()) {
-              count += rel.getInputs().size();
-            }
-            return count;
-          }
-        });
+      private int countChildren(RelSubset subset) {
+        int count = 0;
+        for (RelNode rel : subset.getRels()) {
+          count += rel.getInputs().size();
+        }
+        return count;
+      }
+    });
 
     for (RelSubset subset : boostRemovals) {
       subset.propagateBoostRemoval(planner);
@@ -452,7 +449,7 @@ class RuleQueue {
         return null;
       }
       if (LOGGER.isTraceEnabled()) {
-        Collections.sort(matchList, MATCH_COMPARATOR);
+        matchList.sort(MATCH_COMPARATOR);
         match = matchList.remove(0);
 
         StringBuilder b = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
index 281e472..231de4d 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoPlanner.java
@@ -69,12 +69,9 @@ import org.apache.calcite.util.Util;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.LinkedListMultimap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Ordering;
 import com.google.common.collect.SetMultimap;
-import com.google.common.collect.Sets;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -82,12 +79,12 @@ import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Deque;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -230,11 +227,13 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
   private boolean locked;
 
   private final List<RelOptMaterialization> materializations =
-      Lists.newArrayList();
+      new ArrayList<>();
 
-  /** Map of lattices by the qualified name of their star table. */
+  /**
+   * Map of lattices by the qualified name of their star table.
+   */
   private final Map<List<String>, RelOptLattice> latticeByName =
-      Maps.newLinkedHashMap();
+      new LinkedHashMap<>();
 
   final Map<RelNode, Provenance> provenanceMap = new HashMap<>();
 
@@ -283,14 +282,11 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
 
   protected VolcanoPlannerPhaseRuleMappingInitializer
       getPhaseRuleMappingInitializer() {
-    return new VolcanoPlannerPhaseRuleMappingInitializer() {
-      public void initialize(
-          Map<VolcanoPlannerPhase, Set<String>> phaseRuleMap) {
-        // Disable all phases except OPTIMIZE by adding one useless rule name.
-        phaseRuleMap.get(VolcanoPlannerPhase.PRE_PROCESS_MDR).add("xxx");
-        phaseRuleMap.get(VolcanoPlannerPhase.PRE_PROCESS).add("xxx");
-        phaseRuleMap.get(VolcanoPlannerPhase.CLEANUP).add("xxx");
-      }
+    return phaseRuleMap -> {
+      // Disable all phases except OPTIMIZE by adding one useless rule name.
+      phaseRuleMap.get(VolcanoPlannerPhase.PRE_PROCESS_MDR).add("xxx");
+      phaseRuleMap.get(VolcanoPlannerPhase.PRE_PROCESS).add("xxx");
+      phaseRuleMap.get(VolcanoPlannerPhase.CLEANUP).add("xxx");
     };
   }
 
@@ -689,7 +685,7 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
    * will be asking for the result in a particular convention, but the root has
    * no consumers. */
   void ensureRootConverters() {
-    final Set<RelSubset> subsets = Sets.newHashSet();
+    final Set<RelSubset> subsets = new HashSet<>();
     for (RelNode rel : root.getRels()) {
       if (rel instanceof AbstractConverter) {
         subsets.add((RelSubset) ((AbstractConverter) rel).getInput());
@@ -1172,14 +1168,7 @@ public class VolcanoPlanner extends AbstractRelOptPlanner {
     pw.println("Original rel:");
     pw.println(originalRootString);
     pw.println("Sets:");
-    Ordering<RelSet> ordering = Ordering.from(
-        new Comparator<RelSet>() {
-          public int compare(
-              RelSet o1,
-              RelSet o2) {
-            return o1.id - o2.id;
-          }
-        });
+    Ordering<RelSet> ordering = Ordering.from((o1, o2) -> o1.id - o2.id);
     for (RelSet set : ordering.immutableSortedCopy(allSets)) {
       pw.println("Set#" + set.id
           + ", type: " + set.subsets.get(0).getRowType());

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRelMetadataProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRelMetadataProvider.java b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRelMetadataProvider.java
index 17f28f7..9d96fef 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRelMetadataProvider.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRelMetadataProvider.java
@@ -21,7 +21,6 @@ import org.apache.calcite.rel.metadata.Metadata;
 import org.apache.calcite.rel.metadata.MetadataDef;
 import org.apache.calcite.rel.metadata.MetadataHandler;
 import org.apache.calcite.rel.metadata.RelMetadataProvider;
-import org.apache.calcite.rel.metadata.RelMetadataQuery;
 import org.apache.calcite.rel.metadata.UnboundMetadata;
 
 import com.google.common.collect.ImmutableMultimap;
@@ -52,66 +51,64 @@ public class VolcanoRelMetadataProvider implements RelMetadataProvider {
       return null;
     }
 
-    return new UnboundMetadata<M>() {
-      public M bind(RelNode rel, RelMetadataQuery mq) {
-        final RelSubset subset = (RelSubset) rel;
-        final RelMetadataProvider provider =
-            rel.getCluster().getMetadataProvider();
-
-        // REVIEW jvs 29-Mar-2006: I'm not sure what the correct precedence
-        // should be here.  Letting the current best plan take the first shot is
-        // probably the right thing to do for physical estimates such as row
-        // count.  Dunno about others, and whether we need a way to
-        // discriminate.
-
-        // First, try current best implementation.  If it knows how to answer
-        // this query, treat it as the most reliable.
-        if (subset.best != null) {
-          final UnboundMetadata<M> function =
-              provider.apply(subset.best.getClass(), metadataClass);
-          if (function != null) {
-            final M metadata = function.bind(subset.best, mq);
-            if (metadata != null) {
-              return metadata;
-            }
+    return (rel, mq) -> {
+      final RelSubset subset = (RelSubset) rel;
+      final RelMetadataProvider provider =
+          rel.getCluster().getMetadataProvider();
+
+      // REVIEW jvs 29-Mar-2006: I'm not sure what the correct precedence
+      // should be here.  Letting the current best plan take the first shot is
+      // probably the right thing to do for physical estimates such as row
+      // count.  Dunno about others, and whether we need a way to
+      // discriminate.
+
+      // First, try current best implementation.  If it knows how to answer
+      // this query, treat it as the most reliable.
+      if (subset.best != null) {
+        final UnboundMetadata<M> function =
+            provider.apply(subset.best.getClass(), metadataClass);
+        if (function != null) {
+          final M metadata = function.bind(subset.best, mq);
+          if (metadata != null) {
+            return metadata;
           }
         }
+      }
 
-        // Otherwise, try rels in same logical equivalence class to see if any
-        // of them have a good answer.  We use the full logical equivalence
-        // class rather than just the subset because many metadata providers
-        // only know about logical metadata.
-
-        // Equivalence classes can get tangled up in interesting ways, so avoid
-        // an infinite loop.  REVIEW: There's a chance this will cause us to
-        // fail on metadata queries which invoke other queries, e.g.
-        // PercentageOriginalRows -> Selectivity.  If we implement caching at
-        // this level, we could probably kill two birds with one stone (use
-        // presence of pending cache entry to detect re-entrancy at the correct
-        // granularity).
-        if (subset.set.inMetadataQuery) {
-          return null;
-        }
+      // Otherwise, try rels in same logical equivalence class to see if any
+      // of them have a good answer.  We use the full logical equivalence
+      // class rather than just the subset because many metadata providers
+      // only know about logical metadata.
+
+      // Equivalence classes can get tangled up in interesting ways, so avoid
+      // an infinite loop.  REVIEW: There's a chance this will cause us to
+      // fail on metadata queries which invoke other queries, e.g.
+      // PercentageOriginalRows -> Selectivity.  If we implement caching at
+      // this level, we could probably kill two birds with one stone (use
+      // presence of pending cache entry to detect re-entrancy at the correct
+      // granularity).
+      if (subset.set.inMetadataQuery) {
+        return null;
+      }
 
-        subset.set.inMetadataQuery = true;
-        try {
-          for (RelNode relCandidate : subset.set.rels) {
-            final UnboundMetadata<M> function =
-                provider.apply(relCandidate.getClass(), metadataClass);
-            if (function != null) {
-              final M result = function.bind(relCandidate, mq);
-              if (result != null) {
-                return result;
-              }
+      subset.set.inMetadataQuery = true;
+      try {
+        for (RelNode relCandidate : subset.set.rels) {
+          final UnboundMetadata<M> function =
+              provider.apply(relCandidate.getClass(), metadataClass);
+          if (function != null) {
+            final M result = function.bind(relCandidate, mq);
+            if (result != null) {
+              return result;
             }
           }
-        } finally {
-          subset.set.inMetadataQuery = false;
         }
-
-        // Give up.
-        return null;
+      } finally {
+        subset.set.inMetadataQuery = false;
       }
+
+      // Give up.
+      return null;
     };
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java
index 392581d..ac883f0 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/VolcanoRuleCall.java
@@ -80,7 +80,7 @@ public class VolcanoRuleCall extends RelOptRuleCall {
         planner,
         operand,
         new RelNode[operand.getRule().operands.size()],
-        ImmutableMap.<RelNode, List<RelNode>>of());
+        ImmutableMap.of());
   }
 
   //~ Methods ----------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java b/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
index c49a9cb..cbfd145 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalciteCatalogReader.java
@@ -26,7 +26,6 @@ import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.rel.type.RelDataTypeFactoryImpl;
 import org.apache.calcite.rel.type.RelDataTypeField;
 import org.apache.calcite.rel.type.RelDataTypeSystem;
-import org.apache.calcite.runtime.PredicateImpl;
 import org.apache.calcite.schema.AggregateFunction;
 import org.apache.calcite.schema.Function;
 import org.apache.calcite.schema.FunctionParameter;
@@ -39,7 +38,6 @@ import org.apache.calcite.schema.impl.ScalarFunctionImpl;
 import org.apache.calcite.sql.SqlFunctionCategory;
 import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlOperator;
-import org.apache.calcite.sql.SqlOperatorBinding;
 import org.apache.calcite.sql.SqlOperatorTable;
 import org.apache.calcite.sql.SqlSyntax;
 import org.apache.calcite.sql.parser.SqlParserPos;
@@ -64,10 +62,6 @@ import org.apache.calcite.sql.validate.SqlUserDefinedTableMacro;
 import org.apache.calcite.sql.validate.SqlValidatorUtil;
 import org.apache.calcite.util.Util;
 
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
@@ -78,6 +72,8 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableSet;
+import java.util.Objects;
+import java.util.function.Predicate;
 
 /**
  * Implementation of {@link org.apache.calcite.prepare.Prepare.CatalogReader}
@@ -94,15 +90,15 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
   public CalciteCatalogReader(CalciteSchema rootSchema,
       List<String> defaultSchema, RelDataTypeFactory typeFactory, CalciteConnectionConfig config) {
     this(rootSchema, SqlNameMatchers.withCaseSensitive(config != null && config.caseSensitive()),
-        ImmutableList.of(Preconditions.checkNotNull(defaultSchema),
-            ImmutableList.<String>of()),
+        ImmutableList.of(Objects.requireNonNull(defaultSchema),
+            ImmutableList.of()),
         typeFactory, config);
   }
 
   protected CalciteCatalogReader(CalciteSchema rootSchema,
       SqlNameMatcher nameMatcher, List<List<String>> schemaPaths,
       RelDataTypeFactory typeFactory, CalciteConnectionConfig config) {
-    this.rootSchema = Preconditions.checkNotNull(rootSchema);
+    this.rootSchema = Objects.requireNonNull(rootSchema);
     this.nameMatcher = nameMatcher;
     this.schemaPaths =
         Util.immutableCopy(Util.isDistinct(schemaPaths)
@@ -114,7 +110,7 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
 
   public CalciteCatalogReader withSchemaPath(List<String> schemaPath) {
     return new CalciteCatalogReader(rootSchema, nameMatcher,
-        ImmutableList.of(schemaPath, ImmutableList.<String>of()), typeFactory, config);
+        ImmutableList.of(schemaPath, ImmutableList.of()), typeFactory, config);
   }
 
   public Prepare.PreparingTable getTable(final List<String> names) {
@@ -141,7 +137,7 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
   }
 
   private Collection<Function> getFunctionsFrom(List<String> names) {
-    final List<Function> functions2 = Lists.newArrayList();
+    final List<Function> functions2 = new ArrayList<>();
     final List<List<String>> schemaNameList = new ArrayList<>();
     if (names.size() > 1) {
       // Name qualified: ignore path. But we do look in "/catalog" and "/",
@@ -256,34 +252,21 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
 
     final Predicate<Function> predicate;
     if (category == null) {
-      predicate = Predicates.alwaysTrue();
+      predicate = function -> true;
     } else if (category.isTableFunction()) {
-      predicate = new PredicateImpl<Function>() {
-        public boolean test(Function function) {
-          return function instanceof TableMacro
+      predicate = function ->
+          function instanceof TableMacro
               || function instanceof TableFunction;
-        }
-      };
     } else {
-      predicate = new PredicateImpl<Function>() {
-        public boolean test(Function function) {
-          return !(function instanceof TableMacro
+      predicate = function ->
+          !(function instanceof TableMacro
               || function instanceof TableFunction);
-        }
-      };
-    }
-    final Collection<Function> functions =
-        Collections2.filter(getFunctionsFrom(opName.names), predicate);
-    if (functions.isEmpty()) {
-      return;
     }
-    operatorList.addAll(
-        Collections2.transform(functions,
-            new com.google.common.base.Function<Function, SqlOperator>() {
-              public SqlOperator apply(Function function) {
-                return toOp(opName, function);
-              }
-            }));
+    getFunctionsFrom(opName.names)
+        .stream()
+        .filter(predicate)
+        .map(function -> toOp(opName, function))
+        .forEachOrdered(operatorList::add);
   }
 
   /** Creates an operator table that contains functions in the given class.
@@ -293,7 +276,7 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
     // Dummy schema to collect the functions
     final CalciteSchema schema =
         CalciteSchema.createRootSchema(false, false);
-    ModelHandler.addFunctions(schema.plus(), null, ImmutableList.<String>of(),
+    ModelHandler.addFunctions(schema.plus(), null, ImmutableList.of(),
         className, "*", true);
 
     // The following is technical debt; see [CALCITE-2082] Remove
@@ -331,14 +314,9 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
       typeFamilies.add(
           Util.first(type.getSqlTypeName().getFamily(), SqlTypeFamily.ANY));
     }
-    final Predicate<Integer> optional =
-        new PredicateImpl<Integer>() {
-          public boolean test(Integer input) {
-            return function.getParameters().get(input).isOptional();
-          }
-        };
     final FamilyOperandTypeChecker typeChecker =
-        OperandTypes.family(typeFamilies, optional);
+        OperandTypes.family(typeFamilies, i ->
+            function.getParameters().get(i).isOptional());
     final List<RelDataType> paramTypes = toSql(typeFactory, argTypes);
     if (function instanceof ScalarFunction) {
       return new SqlUserDefinedFunction(name, infer((ScalarFunction) function),
@@ -361,40 +339,31 @@ public class CalciteCatalogReader implements Prepare.CatalogReader {
   }
 
   private static SqlReturnTypeInference infer(final ScalarFunction function) {
-    return new SqlReturnTypeInference() {
-      public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
-        final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
-        final RelDataType type;
-        if (function instanceof ScalarFunctionImpl) {
-          type = ((ScalarFunctionImpl) function).getReturnType(typeFactory,
-              opBinding);
-        } else {
-          type = function.getReturnType(typeFactory);
-        }
-        return toSql(typeFactory, type);
+    return opBinding -> {
+      final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
+      final RelDataType type;
+      if (function instanceof ScalarFunctionImpl) {
+        type = ((ScalarFunctionImpl) function).getReturnType(typeFactory,
+            opBinding);
+      } else {
+        type = function.getReturnType(typeFactory);
       }
+      return toSql(typeFactory, type);
     };
   }
 
   private static SqlReturnTypeInference infer(
       final AggregateFunction function) {
-    return new SqlReturnTypeInference() {
-      public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
-        final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
-        final RelDataType type = function.getReturnType(typeFactory);
-        return toSql(typeFactory, type);
-      }
+    return opBinding -> {
+      final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
+      final RelDataType type = function.getReturnType(typeFactory);
+      return toSql(typeFactory, type);
     };
   }
 
   private static List<RelDataType> toSql(
       final RelDataTypeFactory typeFactory, List<RelDataType> types) {
-    return Lists.transform(types,
-        new com.google.common.base.Function<RelDataType, RelDataType>() {
-          public RelDataType apply(RelDataType type) {
-            return toSql(typeFactory, type);
-          }
-        });
+    return Lists.transform(types, type -> toSql(typeFactory, type));
   }
 
   private static RelDataType toSql(RelDataTypeFactory typeFactory,

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java b/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
index 92cb104..45c4850 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
@@ -50,8 +50,8 @@ import org.apache.calcite.sql2rel.SqlRexConvertletTable;
 import org.apache.calcite.sql2rel.SqlToRelConverter;
 
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -126,7 +126,7 @@ class CalciteMaterializer extends CalcitePrepareImpl.CalcitePreparingStmt {
       // Don't waste effort converting to leaf-join form.
       return ImmutableList.of();
     }
-    final List<Callback> list = Lists.newArrayList();
+    final List<Callback> list = new ArrayList<>();
     final RelNode rel2 =
         RelOptMaterialization.toLeafJoinForm(queryRel);
     for (CalciteSchema.TableEntry starTable : starTables) {

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
index 9b772be..5a6d521 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
@@ -16,7 +16,6 @@
  */
 package org.apache.calcite.prepare;
 
-import org.apache.calcite.DataContext;
 import org.apache.calcite.adapter.enumerable.EnumerableBindable;
 import org.apache.calcite.adapter.enumerable.EnumerableCalc;
 import org.apache.calcite.adapter.enumerable.EnumerableConvention;
@@ -36,7 +35,6 @@ import org.apache.calcite.interpreter.Interpreters;
 import org.apache.calcite.jdbc.CalcitePrepare;
 import org.apache.calcite.jdbc.CalciteSchema;
 import org.apache.calcite.jdbc.CalciteSchema.LatticeEntry;
-import org.apache.calcite.linq4j.Enumerable;
 import org.apache.calcite.linq4j.Linq4j;
 import org.apache.calcite.linq4j.Ord;
 import org.apache.calcite.linq4j.Queryable;
@@ -142,7 +140,6 @@ import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
 
 import java.lang.reflect.Type;
 import java.math.BigDecimal;
@@ -151,6 +148,7 @@ import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -501,12 +499,8 @@ public class CalcitePrepareImpl implements CalcitePrepare {
    * {@link #createPlanner(org.apache.calcite.jdbc.CalcitePrepare.Context)}.</p>
    */
   protected List<Function1<Context, RelOptPlanner>> createPlannerFactories() {
-    return Collections.<Function1<Context, RelOptPlanner>>singletonList(
-        new Function1<Context, RelOptPlanner>() {
-          public RelOptPlanner apply(Context context) {
-            return createPlanner(context, null, null);
-          }
-        });
+    return Collections.singletonList(
+        context -> createPlanner(context, null, null));
   }
 
   /** Creates a query planner and initializes it with a default set of
@@ -667,19 +661,14 @@ public class CalcitePrepareImpl implements CalcitePrepare {
         Meta.CursorFactory.deduce(columns, null);
     return new CalciteSignature<>(
         sql,
-        ImmutableList.<AvaticaParameter>of(),
-        ImmutableMap.<String, Object>of(),
+        ImmutableList.of(),
+        ImmutableMap.of(),
         x,
         columns,
         cursorFactory,
         context.getRootSchema(),
-        ImmutableList.<RelCollation>of(),
-        -1,
-        new Bindable<T>() {
-          public Enumerable<T> bind(DataContext dataContext) {
-            return Linq4j.asEnumerable(list);
-          }
-        },
+        ImmutableList.of(),
+        -1, dataContext -> Linq4j.asEnumerable(list),
         Meta.StatementType.SELECT);
   }
 
@@ -768,10 +757,10 @@ public class CalcitePrepareImpl implements CalcitePrepare {
         executeDdl(context, sqlNode);
 
         return new CalciteSignature<>(query.sql,
-            ImmutableList.<AvaticaParameter>of(),
-            ImmutableMap.<String, Object>of(), null,
-            ImmutableList.<ColumnMetaData>of(), Meta.CursorFactory.OBJECT,
-            null, ImmutableList.<RelCollation>of(), -1, null,
+            ImmutableList.of(),
+            ImmutableMap.of(), null,
+            ImmutableList.of(), Meta.CursorFactory.OBJECT,
+            null, ImmutableList.of(), -1, null,
             Meta.StatementType.OTHER_DDL);
       }
 
@@ -844,7 +833,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
         context.getRootSchema(),
         preparedResult instanceof Prepare.PreparedResultImpl
             ? ((Prepare.PreparedResultImpl) preparedResult).collations
-            : ImmutableList.<RelCollation>of(),
+            : ImmutableList.of(),
         maxRowCount,
         bindable,
         statementType);
@@ -1066,7 +1055,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
     protected final SqlRexConvertletTable convertletTable;
     private final EnumerableRel.Prefer prefer;
     private final Map<String, Object> internalParameters =
-        Maps.newLinkedHashMap();
+        new LinkedHashMap<>();
     private int expansionDepth;
     private SqlValidator sqlValidator;
 
@@ -1095,24 +1084,16 @@ public class CalcitePrepareImpl implements CalcitePrepare {
     public PreparedResult prepareQueryable(
         final Queryable queryable,
         RelDataType resultType) {
-      return prepare_(
-          new Supplier<RelNode>() {
-            public RelNode get() {
-              final RelOptCluster cluster =
-                  prepare.createCluster(planner, rexBuilder);
-              return new LixToRelTranslator(cluster, CalcitePreparingStmt.this)
-                  .translate(queryable);
-            }
-          }, resultType);
+      return prepare_(() -> {
+        final RelOptCluster cluster =
+            prepare.createCluster(planner, rexBuilder);
+        return new LixToRelTranslator(cluster, CalcitePreparingStmt.this)
+            .translate(queryable);
+      }, resultType);
     }
 
     public PreparedResult prepareRel(final RelNode rel) {
-      return prepare_(
-          new Supplier<RelNode>() {
-            public RelNode get() {
-              return rel;
-            }
-          }, rel.getRowType());
+      return prepare_(() -> rel, rel.getRowType());
     }
 
     private PreparedResult prepare_(Supplier<RelNode> fn,
@@ -1273,7 +1254,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
           parameterRowType,
           fieldOrigins,
           root.collation.getFieldCollations().isEmpty()
-              ? ImmutableList.<RelCollation>of()
+              ? ImmutableList.of()
               : ImmutableList.of(root.collation),
           root.rel,
           mapTableModOp(isDml, root.kind),
@@ -1296,7 +1277,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
       final List<Prepare.Materialization> materializations =
           context.config().materializationsEnabled()
               ? MaterializationService.instance().query(schema)
-              : ImmutableList.<Prepare.Materialization>of();
+              : ImmutableList.of();
       for (Prepare.Materialization materialization : materializations) {
         prepare.populateMaterializations(context, planner, materialization);
       }
@@ -1321,15 +1302,13 @@ public class CalcitePrepareImpl implements CalcitePrepare {
 
     public Bindable getBindable(final Meta.CursorFactory cursorFactory) {
       final String explanation = getCode();
-      return new Bindable() {
-        public Enumerable bind(DataContext dataContext) {
-          switch (cursorFactory.style) {
-          case ARRAY:
-            return Linq4j.singletonEnumerable(new String[] {explanation});
-          case OBJECT:
-          default:
-            return Linq4j.singletonEnumerable(explanation);
-          }
+      return dataContext -> {
+        switch (cursorFactory.style) {
+        case ARRAY:
+          return Linq4j.singletonEnumerable(new String[] {explanation});
+        case OBJECT:
+        default:
+          return Linq4j.singletonEnumerable(explanation);
         }
       };
     }

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/prepare/LixToRelTranslator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/LixToRelTranslator.java b/core/src/main/java/org/apache/calcite/prepare/LixToRelTranslator.java
index 3a52ba5..460e2ca 100644
--- a/core/src/main/java/org/apache/calcite/prepare/LixToRelTranslator.java
+++ b/core/src/main/java/org/apache/calcite/prepare/LixToRelTranslator.java
@@ -102,7 +102,7 @@ class LixToRelTranslator implements RelOptTable.ToRelContext {
                 typeFactory.createJavaType(
                     Types.toClass(
                         Types.getElementType(call.targetExpression.getType()))),
-                ImmutableList.<String>of(),
+                ImmutableList.of(),
                 call.targetExpression));
 
       case SCHEMA_GET_TABLE:
@@ -110,7 +110,7 @@ class LixToRelTranslator implements RelOptTable.ToRelContext {
             RelOptTableImpl.create(null,
                 typeFactory.createJavaType((Class)
                     ((ConstantExpression) call.expressions.get(1)).value),
-                ImmutableList.<String>of(),
+                ImmutableList.of(),
                 call.targetExpression));
 
       default:

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/prepare/PlannerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/PlannerImpl.java b/core/src/main/java/org/apache/calcite/prepare/PlannerImpl.java
index e5f2ae0..cb27ea2 100644
--- a/core/src/main/java/org/apache/calcite/prepare/PlannerImpl.java
+++ b/core/src/main/java/org/apache/calcite/prepare/PlannerImpl.java
@@ -23,10 +23,7 @@ import org.apache.calcite.config.CalciteConnectionProperty;
 import org.apache.calcite.jdbc.CalciteSchema;
 import org.apache.calcite.plan.Context;
 import org.apache.calcite.plan.RelOptCluster;
-import org.apache.calcite.plan.RelOptLattice;
-import org.apache.calcite.plan.RelOptMaterialization;
 import org.apache.calcite.plan.RelOptPlanner;
-import org.apache.calcite.plan.RelOptSchema;
 import org.apache.calcite.plan.RelOptTable.ViewExpander;
 import org.apache.calcite.plan.RelTraitDef;
 import org.apache.calcite.plan.RelTraitSet;
@@ -144,15 +141,12 @@ public class PlannerImpl implements Planner {
     }
     ensure(State.STATE_1_RESET);
     Frameworks.withPlanner(
-        new Frameworks.PlannerAction<Void>() {
-          public Void apply(RelOptCluster cluster, RelOptSchema relOptSchema,
-              SchemaPlus rootSchema) {
-            Util.discard(rootSchema); // use our own defaultSchema
-            typeFactory = (JavaTypeFactory) cluster.getTypeFactory();
-            planner = cluster.getPlanner();
-            planner.setExecutor(executor);
-            return null;
-          }
+        (cluster, relOptSchema, rootSchema) -> {
+          Util.discard(rootSchema); // use our own defaultSchema
+          typeFactory = (JavaTypeFactory) cluster.getTypeFactory();
+          planner = cluster.getPlanner();
+          planner.setExecutor(executor);
+          return null;
         },
         config);
 
@@ -340,9 +334,8 @@ public class PlannerImpl implements Planner {
             rel.getCluster().getMetadataProvider(),
             rel.getCluster().getPlanner()));
     Program program = programs.get(ruleSetIndex);
-    return program.run(planner, rel, requiredOutputTraits,
-        ImmutableList.<RelOptMaterialization>of(),
-        ImmutableList.<RelOptLattice>of());
+    return program.run(planner, rel, requiredOutputTraits, ImmutableList.of(),
+        ImmutableList.of());
   }
 
   /** Stage of a statement in the query-preparation lifecycle. */

http://git-wip-us.apache.org/repos/asf/calcite/blob/d59b639d/core/src/main/java/org/apache/calcite/prepare/Prepare.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/Prepare.java b/core/src/main/java/org/apache/calcite/prepare/Prepare.java
index 95758e5..8d1a55b 100644
--- a/core/src/main/java/org/apache/calcite/prepare/Prepare.java
+++ b/core/src/main/java/org/apache/calcite/prepare/Prepare.java
@@ -69,7 +69,6 @@ import org.apache.calcite.util.TryThreadLocal;
 import org.apache.calcite.util.trace.CalciteTimingTracer;
 import org.apache.calcite.util.trace.CalciteTrace;
 
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 import org.slf4j.Logger;
@@ -78,6 +77,7 @@ import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Abstract base for classes that implement
@@ -532,7 +532,7 @@ public abstract class Prepare {
 
     public List<List<String>> getFieldOrigins() {
       return Collections.singletonList(
-          Collections.<String>nCopies(4, null));
+          Collections.nCopies(4, null));
     }
   }
 
@@ -599,11 +599,11 @@ public abstract class Prepare {
         RelNode rootRel,
         LogicalTableModify.Operation tableModOp,
         boolean isDml) {
-      this.rowType = Preconditions.checkNotNull(rowType);
-      this.parameterRowType = Preconditions.checkNotNull(parameterRowType);
-      this.fieldOrigins = Preconditions.checkNotNull(fieldOrigins);
+      this.rowType = Objects.requireNonNull(rowType);
+      this.parameterRowType = Objects.requireNonNull(parameterRowType);
+      this.fieldOrigins = Objects.requireNonNull(fieldOrigins);
       this.collations = ImmutableList.copyOf(collations);
-      this.rootRel = Preconditions.checkNotNull(rootRel);
+      this.rootRel = Objects.requireNonNull(rootRel);
       this.tableModOp = tableModOp;
       this.isDml = isDml;
     }