public final String generateRandomCode() {
    // Find compilation unit node.
    final TreeNode<Integer> rootNode = treeFormat.getKeyForCompilationUnit();

    final TSGNode topTreeNode = new TSGNode(rootNode.getData());
    topTreeNode.isRoot = true;

    final TreeNode<TSGNode> node = TreeNode.create(topTreeNode, rootNode.nProperties());

    final TreeNode<TSGNode> randomTree = this.generateRandom(node);

    final TreeNode<Integer> treeCopy =
        TreeNode.create(randomTree.getData().nodeKey, randomTree.nProperties());
    TSGNode.copyChildren(treeCopy, randomTree);
    return treeFormat.getCodeFromTree(treeCopy);
  }