private SortedMap<Integer, ComponentDef> cloneSubComponentDefs( SortedMap<Integer, ComponentDef> existingDefs) { SortedMap<Integer, ComponentDef> clone = new TreeMap<>(); for (Entry<Integer, ComponentDef> defEntry : existingDefs.entrySet()) { Integer index = defEntry.getKey(); ComponentDef def = defEntry.getValue(); if (def instanceof CompositeDef) { CompositeDef compositeDef = (CompositeDef) def; clone.put( index, new CompositeDef( cloneSubComponentDefs(compositeDef.getSubComponentDefs()), compositeDef.getCompositeCodec(), compositeDef.isMandatory(), compositeDef.getLengthCodec())); } else { clone.put(index, new ComponentDef(def.getCodec(), def.isMandatory())); } } return clone; }