org.apache.xalan.templates

## Class RedundentExprEliminator

- java.lang.Object
- - org.apache.xpath.XPathVisitor
  - - org.apache.xalan.templates.XSLTVisitor
    - - org.apache.xalan.templates.RedundentExprEliminator

-     public class RedundentExprEliminator
      extends XSLTVisitor

  This class eleminates redundent XPaths from a given subtree, and also collects all absolute paths within the subtree. First it must be called as a visitor to the subtree, and then eleminateRedundent must be called.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static boolean` | `DEBUG`
    `static boolean` | `DIAGNOSE_MULTISTEPLIST`
    `static boolean` | `DIAGNOSE_NUM_PATHS_REDUCED`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RedundentExprEliminator()` Construct a RedundentExprEliminator.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `eleminateRedundentGlobals(StylesheetRoot stylesheet)` Method to be called after the all global expressions within a stylesheet have been collected.
    `void` | `eleminateRedundentLocals(ElemTemplateElement psuedoVarRecipient)` Method to be called after the all expressions within an node context have been visited.
    `boolean` | `isAbsolute(LocPathIterator path)` Tell if the given LocPathIterator is relative to an absolute path, i.e.
    `boolean` | `visitInstruction(ElemTemplateElement elem)` Visit an XSLT instruction.
    `boolean` | `visitLocationPath(ExpressionOwner owner, LocPathIterator path)` Visit a LocationPath.
    `boolean` | `visitPredicate(ExpressionOwner owner, Expression pred)` Visit a predicate within a location path.
    `boolean` | `visitTopLevelInstruction(ElemTemplateElement elem)` Visit an XSLT top-level instruction.

    - ### Methods inherited from class org.apache.xalan.templates.XSLTVisitor

      `visitAVT, visitExtensionElement, visitLiteralResultElement, visitStylesheet, visitTopLevelVariableOrParamDecl, visitVariableOrParamDecl`

    - ### Methods inherited from class org.apache.xpath.XPathVisitor

      `visitBinaryOperation, visitFunction, visitMatchPattern, visitNumberLiteral, visitStep, visitStringLiteral, visitUnaryOperation, visitUnionPath, visitUnionPattern, visitVariableRef`

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### DEBUG

          public static final boolean DEBUG

      See Also:
        Constant Field Values

    - #### DIAGNOSE_NUM_PATHS_REDUCED

          public static final boolean DIAGNOSE_NUM_PATHS_REDUCED

      See Also:
        Constant Field Values

    - #### DIAGNOSE_MULTISTEPLIST

          public static final boolean DIAGNOSE_MULTISTEPLIST

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### RedundentExprEliminator

          public RedundentExprEliminator()

      Construct a RedundentExprEliminator.

  - ### Method Detail

    - #### eleminateRedundentLocals

          public void eleminateRedundentLocals(ElemTemplateElement psuedoVarRecipient)

      Method to be called after the all expressions within an node context have been visited. It eliminates redundent expressions by creating a variable in the psuedoVarRecipient for each redundent expression, and then rewriting the redundent expression to be a variable reference.
      Parameters:
        `psuedoVarRecipient` - The recipient of the psuedo vars. The variables will be inserted as first children of the element, before any existing variables.

    - #### eleminateRedundentGlobals

          public void eleminateRedundentGlobals(StylesheetRoot stylesheet)

      Method to be called after the all global expressions within a stylesheet have been collected. It eliminates redundent expressions by creating a variable in the psuedoVarRecipient for each redundent expression, and then rewriting the redundent expression to be a variable reference.

    - #### isAbsolute

          public boolean isAbsolute(LocPathIterator path)

      Tell if the given LocPathIterator is relative to an absolute path, i.e. in not dependent on the context.
      Returns:
        true if the LocPathIterator is not dependent on the context node.

    - #### visitLocationPath

          public boolean visitLocationPath(ExpressionOwner owner,
                                           LocPathIterator path)

      Visit a LocationPath.
      Overrides:
        `visitLocationPath` in class `XPathVisitor`
      Parameters:
        `owner` - The owner of the expression, to which the expression can be reset if rewriting takes place.
        `path` - The LocationPath object.
      Returns:
        true if the sub expressions should be traversed.

    - #### visitPredicate

          public boolean visitPredicate(ExpressionOwner owner,
                                        Expression pred)

      Visit a predicate within a location path. Note that there isn't a proper unique component for predicates, and that the expression will be called also for whatever type Expression is.
      Overrides:
        `visitPredicate` in class `XPathVisitor`
      Parameters:
        `owner` - The owner of the expression, to which the expression can be reset if rewriting takes place.
        `pred` - The predicate object.
      Returns:
        true if the sub expressions should be traversed.

    - #### visitTopLevelInstruction

          public boolean visitTopLevelInstruction(ElemTemplateElement elem)

      Visit an XSLT top-level instruction.
      Overrides:
        `visitTopLevelInstruction` in class `XSLTVisitor`
      Parameters:
        `elem` - The xsl instruction element object.
      Returns:
        true if the sub expressions should be traversed.

    - #### visitInstruction

          public boolean visitInstruction(ElemTemplateElement elem)

      Visit an XSLT instruction. Any element that isn't called by one of the other visit methods, will be called by this method.
      Overrides:
        `visitInstruction` in class `XSLTVisitor`
      Parameters:
        `elem` - The xsl instruction element object.
      Returns:
        true if the sub expressions should be traversed.

Copyright © 2023 Apache XML Project. All Rights Reserved.