### Question:
InformationItem extends NamedElement implements DMNPropertySet,
                                                             IsInformationItem { public InformationItem copy() { final InformationItem clonedInformationItem = new InformationItem(); clonedInformationItem.description = Optional.ofNullable(description).map(Description::copy).orElse(null); clonedInformationItem.name = Optional.ofNullable(name).map(Name::copy).orElse(null); clonedInformationItem.nameHolder = Optional.ofNullable(nameHolder).map(NameHolder::copy).orElse(null); clonedInformationItem.typeRef = Optional.ofNullable(typeRef).map(QName::copy).orElse(null); clonedInformationItem.typeRefHolder = Optional.ofNullable(typeRefHolder).map(QNameHolder::copy).orElse(null); return clonedInformationItem; } InformationItem();  InformationItem(final Id id,
                           final Description description,
                           final Name name,
                           final QName typeRef); String getStunnerCategory(); Set<String> getStunnerLabels(); InformationItem copy(); @Override QName getTypeRef(); @Override void setTypeRef(final QName typeRef); @Override DMNModelInstrumentedBase asDMNModelInstrumentedBase(); @Override List<HasTypeRef> getHasTypeRefs(); QNameHolder getTypeRefHolder(); void setTypeRefHolder(final QNameHolder typeRefHolder); @Override String getDomainObjectUUID(); @Override String getDomainObjectNameTranslationKey(); @Override boolean equals(final Object o); @Override int hashCode();  }### Answer:
@Test public void testCopy() { final InformationItem source = new InformationItem(new Id(ITEM_ID), new Description(DESCRIPTION), new Name(INFORMATION_ITEM_NAME), BuiltInType.BOOLEAN.asQName()); final InformationItem target = source.copy(); assertNotNull(target); assertNotEquals(ITEM_ID, target.getId().getValue()); assertEquals(DESCRIPTION, target.getDescription().getValue()); assertEquals(INFORMATION_ITEM_NAME, target.getName().getValue()); assertEquals(BuiltInType.BOOLEAN.asQName(), target.getTypeRef()); }