Class ClassDeclarationFinder

java.lang.Object
org.apache.calcite.linq4j.tree.Shuttle
org.apache.calcite.linq4j.tree.ClassDeclarationFinder
Direct Known Subclasses:
DeterministicCodeOptimizer

public class ClassDeclarationFinder extends Shuttle
Entry point for optimizers that factor out deterministic expressions to final static fields. Instances of this class should not be reused, so new visitor should be created for optimizing a new expression tree.
  • Field Details

  • Constructor Details

    • ClassDeclarationFinder

      protected ClassDeclarationFinder(ClassDeclarationFinder parent)
      Creates a child optimizer. Typically a child is created for each class declaration, so each optimizer collects fields for exactly one class.
      Parameters:
      parent - parent optimizer
  • Method Details

    • create

      public static ClassDeclarationFinder create()
      Creates visitor that uses default optimizer.
      Returns:
      optimizing visitor
    • create

      public static ClassDeclarationFinder create(Class<? extends ClassDeclarationFinder> optimizingClass)
      Creates visitor that uses given class as optimizer. The implementation should support (ClassDeclarationFinder) constructor.
      Parameters:
      optimizingClass - class that implements optimizations
      Returns:
      optimizing visitor
    • create

      Creates visitor that uses given factory to create optimizers.
      Parameters:
      childFactory - factory that creates optimizers
      Returns:
      optimizing visitor
    • preVisit

      public Shuttle preVisit(NewExpression newExpression)
      Creates optimizer local to the newly generated anonymous class.
      Overrides:
      preVisit in class Shuttle
      Parameters:
      newExpression - expression to optimize
      Returns:
      nested visitor if anonymous class is given
    • preVisit

      public Shuttle preVisit(ClassDeclaration classDeclaration)
      Creates optimizer local to the newly generated class.
      Overrides:
      preVisit in class Shuttle
      Parameters:
      classDeclaration - expression to optimize
      Returns:
      nested visitor
    • visit

      public Expression visit(NewExpression newExpression, List<Expression> arguments, @Nullable List<MemberDeclaration> memberDeclarations)
      Overrides:
      visit in class Shuttle
    • learnFinalStaticDeclarations

      protected void learnFinalStaticDeclarations(List<MemberDeclaration> memberDeclarations)
      Processes the list of declarations when class expression detected. Sub-classes might figure out the existing fields for reuse.
      Parameters:
      memberDeclarations - list of declarations to process.
    • tryOptimizeNewInstance

      protected Expression tryOptimizeNewInstance(NewExpression newExpression)
      Optimizes new Type() constructs.
      Parameters:
      newExpression - expression to optimize
      Returns:
      always returns un-optimized expression
    • visit

      public ClassDeclaration visit(ClassDeclaration classDeclaration, List<MemberDeclaration> memberDeclarations)
      Overrides:
      visit in class Shuttle
    • optimizeDeclarations

      protected List<MemberDeclaration> optimizeDeclarations(List<MemberDeclaration> memberDeclarations)
      Adds new declarations (e.g. final static fields) to the list of existing ones.
      Parameters:
      memberDeclarations - existing list of declarations
      Returns:
      new list of declarations or the same if no modifications required
    • isConstant

      protected boolean isConstant(Expression expression)
      Verifies if the expression is effectively constant. This method should be overridden in sub-classes.
      Parameters:
      expression - expression to test
      Returns:
      always returns false
    • isConstant

      protected boolean isConstant(Iterable<? extends Expression> list)
      Verifies if all the expressions in given list are effectively constant.
      Parameters:
      list - list of expressions to test
      Returns:
      true when all the expressions are known to be constant
    • findDeclaredExpression

      protected @Nullable ParameterExpression findDeclaredExpression(Expression expression)
      Finds if there exists ready for reuse declaration for given expression. This method should be overridden in sub-classes.
      Parameters:
      expression - input expression
      Returns:
      always returns null
    • hasField

      protected boolean hasField(String name)
      Verifies if the variable name is already in use. This method should be overridden in sub-classes.
      Parameters:
      name - name of the variable to test
      Returns:
      always returns false
    • goDeeper

      protected ClassDeclarationFinder goDeeper()
      Creates child visitor. It is used to traverse nested class declarations.
      Returns:
      new Visitor that is used to optimize class declarations