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