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`