org.apache.jmeter.engine

## Class TreeCloner

- java.lang.Object
- - org.apache.jmeter.engine.TreeCloner

- All Implemented Interfaces:
    HashTreeTraverser
  Direct Known Subclasses:
    TreeClonerForValidation, TreeClonerNoTimer

      public class TreeCloner
      extends Object
      implements HashTreeTraverser

  Clones the test tree, skipping test elements that implement `NoThreadClone` by default.

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `TreeCloner()` Clone the test tree, honouring NoThreadClone markers.
    `TreeCloner(boolean honourNoThreadClone)` Clone the test tree.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addNode(Object node, HashTree subTree)` The tree traverses itself depth-first, calling addNode for each object it encounters as it goes.
    `protected Object` | `addNodeToTree(Object node)`
    `ListedHashTree` | `getClonedTree()`
    `void` | `processPath()` Process path is called when a leaf is reached.
    `void` | `subtractNode()` Indicates traversal has moved up a step, and the visitor should remove the top node from its stack structure.

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

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

- - ### Constructor Detail

    - #### TreeCloner

          public TreeCloner()

      Clone the test tree, honouring NoThreadClone markers.

    - #### TreeCloner

          public TreeCloner(boolean honourNoThreadClone)

      Clone the test tree.
      Parameters:
        `honourNoThreadClone` - set false to clone NoThreadClone nodes as well

  - ### Method Detail

    - #### addNode

          public final void addNode(Object node,
                                    HashTree subTree)

      The tree traverses itself depth-first, calling addNode for each object it encounters as it goes. This is a callback method, and should not be called except by a HashTree during traversal.
      Specified by:
        `addNode` in interface `HashTreeTraverser`
      Parameters:
        `node` - the node currently encountered
        `subTree` - the HashTree under the node encountered

    - #### addNodeToTree

          protected Object addNodeToTree(Object node)

      Parameters:
        `node` - Node to add to tree or not
      Returns:
        Object node (clone or not)

    - #### subtractNode

          public void subtractNode()

      Description copied from interface: `HashTreeTraverser`
      Indicates traversal has moved up a step, and the visitor should remove the top node from its stack structure. This is a callback method, and should not be called except by a HashTree during traversal.
      Specified by:
        `subtractNode` in interface `HashTreeTraverser`

    - #### getClonedTree

          public ListedHashTree getClonedTree()

    - #### processPath

          public void processPath()

      Description copied from interface: `HashTreeTraverser`
      Process path is called when a leaf is reached. If a visitor wishes to generate Lists of path elements to each leaf, it should keep a Stack data structure of nodes passed to it with addNode, and removing top items for every `HashTreeTraverser.subtractNode()` call. This is a callback method, and should not be called except by a HashTree during traversal.
      Specified by:
        `processPath` in interface `HashTreeTraverser`

Copyright © 1998-2022 Apache Software Foundation. All Rights Reserved.