ToolImpl extends XliffElementImpl implements Tool { public void setChildren(List<? extends Node> children) { Assert.notNull(children, "children"); Assert.areInstances(children, "children", NodeImpl.class); assertNotAttached(children); detach(this.children); this.children = new ArrayList<Node>(children); attach(this.children); } ToolImpl(ToolId toolId, ToolName toolName);  ToolImpl(Element elem); @Override List<? extends Node> getChildren(); Collection<NonXliffAttribute> getNonXliffAttributes(); ToolCompany getToolCompany(); ToolId getToolId(); ToolName getToolName(); ToolVersion getToolVersion(); void setChildren(List<? extends Node> children); void setNonXliffAttributes(
			Collection<NonXliffAttribute> nonXliffAttributes); void setToolCompany(ToolCompany toolCompany); void setToolId(ToolId toolId); void setToolName(ToolName toolName); void setToolVersion(ToolVersion toolVersion);  }
@Test public void testClone() { ToolImpl tool = createDefaultTool(); ArrayList<Attribute> emptyAttrs = new ArrayList<Attribute>(); ArrayList<Node> emptyChildren = new ArrayList<Node>(); ArrayList<Node> children = new ArrayList<Node>(); children.add(new NonXliffElementImpl("ns", null, "name", emptyAttrs, emptyChildren)); children.add(new TextImpl("text")); tool.setChildren(children); ToolImpl clone = (ToolImpl) tool.clone(); assertEquals(tool, clone); assertNotSame(tool, clone); }