,left,false,dest);
,left,false, src != null && useIdAttribute && copyModifiesId, dest);
  private void doEditTrees( MarkableBaseNode src,   MarkableBaseNode dest, boolean after, Node insTree, boolean cloneInsTree,                           boolean left, EditLog log ) {    MatchedNodes m = null;    if( src != null ) {      // We should detach all matches of src      // NOTE! for move with multiple matches, assumes all matches are identical!      // (we only keep track of 1 deleted node, and reattach it to every copy)      m = left ? src.getLeft() : src.getRight();      if( dest == null )        log.delete(src,m.getFullMatch().getParent());      for( Iterator i = m.getMatches().iterator();i.hasNext();) {        BranchNode match = (BranchNode) i.next();        insTree = match; // DONT USE .getBaseMatch(), as there may be changes in the Branch!        match.getParent().removeChild(match.getChildPos());      }      m.getMatches().clear();    }    if( dest != null ) {      m = left ? dest.getLeft() : dest.getRight();      for( Iterator i = m.getMatches().iterator();i.hasNext();) {        BranchNode match = null; //DBG        try { // DBG          /*BranchNode*/ match = (BranchNode) i.next();        } catch (Exception x ) { // DBG          System.err.println("EXCEPT: "+x); //DBG        } //DBG        int ix = match.getChildPos() + (after ? 1: 0);        if (!cloneInsTree) {          if( src != null )            throw new IllegalStateException("Currently unneccessary/unimplemented state");          match.getParent().addChild(ix,insTree);        } else {//DBG          _treeHasNoCopyOf(dest,insTree instanceof BranchNode ? ((BranchNode) insTree).getBaseMatch() ://DBG                         (BaseNode) insTree,left);//DBG          HashSet _destSet = new HashSet();//DBG          _destSet.add(dest);//DBG          _treeHasNoCopyOf(insTree instanceof BranchNode ? (BranchNode) insTree:null,_destSet);          BranchNode insRoot = clonedAndMatchedTree(          insTree instanceof BaseNode ? (left ? ((BaseNode) insTree).getLeft().getFullMatch() :          ((BaseNode) insTree).getRight().getFullMatch() ) : insTree          ,left,false,dest);          match.getParent().addChild(ix,insRoot);          if( src == null ) {            if( insTree instanceof BaseNode )              log.copy(insRoot);            else              log.insert(insRoot);          } else            log.move(insRoot);        }      }    }  }