Package 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
  Description
  `TreeCloner()`
  Clone the test tree, honouring NoThreadClone markers.
  `TreeCloner(boolean honourNoThreadClone)`
  Clone the test tree.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final 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 Details

  - ### 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 Details

  - ### 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`