EntityDescriptor extends Descriptor { @Override public EntityDescriptor addAttributeDescriptor(Field attribute, Descriptor descriptor) { Objects.requireNonNull(attribute, ErrorUtils.getNPXMessageSupplier("attribute")); Objects.requireNonNull(descriptor, ErrorUtils.getNPXMessageSupplier("descriptor")); fieldDescriptors.put(attribute, descriptor); return this; } EntityDescriptor();  EntityDescriptor(boolean assertionsInSubjectContext);  EntityDescriptor(URI context);  EntityDescriptor(URI context, boolean assertionsInSubjectContext); @Override EntityDescriptor addAttributeDescriptor(Field attribute, Descriptor descriptor); @Override EntityDescriptor addAttributeContext(Field attribute, URI context); @Override EntityDescriptor setLanguage(String languageTag); @Override EntityDescriptor setAttributeLanguage(Field attribute, String languageTag); @Override Descriptor getAttributeDescriptor(FieldSpecification<?, ?> attribute); @Override URI getAttributeContext(FieldSpecification<?, ?> attribute); @Override Collection<Descriptor> getAttributeDescriptors(); @Override boolean equals(Object o); @Override int hashCode();  }
@Test void equalsHandlesRecursiveDescriptors() throws Exception { final EntityDescriptor descriptor = new EntityDescriptor(CONTEXT_ONE); descriptor.addAttributeDescriptor(RecursiveClass.class.getDeclaredField("parent"), descriptor); final EntityDescriptor descriptorTwo = new EntityDescriptor(CONTEXT_ONE); descriptorTwo.addAttributeDescriptor(RecursiveClass.class.getDeclaredField("parent"), descriptorTwo); assertEquals(descriptor, descriptorTwo); }
@Test void equalsHandlesOneRecursiveDescriptorAndOtherNormal() throws Exception { final EntityDescriptor descriptor = new EntityDescriptor(CONTEXT_ONE); descriptor.addAttributeDescriptor(RecursiveClass.class.getDeclaredField("parent"), descriptor); final EntityDescriptor descriptorTwo = new EntityDescriptor(CONTEXT_ONE); descriptorTwo.addAttributeDescriptor(RecursiveClass.class.getDeclaredField("parent"), new EntityDescriptor(CONTEXT_ONE)); assertNotEquals(descriptor, descriptorTwo); }