public MemberHoldingTypeDetails build() {
   if (existing instanceof ItdTypeDetails) {
     ItdTypeDetailsBuilder builder = new ItdTypeDetailsBuilder((ItdTypeDetails) existing);
     // Push in all members that may have been modified
     builder.setDeclaredFields(this.getDeclaredFields());
     builder.setDeclaredMethods(this.getDeclaredMethods());
     builder.setAnnotations(this.getAnnotations());
     builder.setCustomData(this.getCustomData());
     builder.setDeclaredConstructors(this.getDeclaredConstructors());
     builder.setDeclaredInitializers(this.getDeclaredInitializers());
     builder.setDeclaredInnerTypes(this.getDeclaredInnerTypes());
     builder.setExtendsTypes(this.getExtendsTypes());
     builder.setImplementsTypes(this.getImplementsTypes());
     builder.setModifier(this.getModifier());
     return builder.build();
   } else if (existing instanceof ClassOrInterfaceTypeDetails) {
     ClassOrInterfaceTypeDetailsBuilder builder =
         new ClassOrInterfaceTypeDetailsBuilder((ClassOrInterfaceTypeDetails) existing);
     // Push in all members that may
     builder.setDeclaredFields(this.getDeclaredFields());
     builder.setDeclaredMethods(this.getDeclaredMethods());
     builder.setAnnotations(this.getAnnotations());
     builder.setCustomData(this.getCustomData());
     builder.setDeclaredConstructors(this.getDeclaredConstructors());
     builder.setDeclaredInitializers(this.getDeclaredInitializers());
     builder.setDeclaredInnerTypes(this.getDeclaredInnerTypes());
     builder.setExtendsTypes(this.getExtendsTypes());
     builder.setImplementsTypes(this.getImplementsTypes());
     builder.setModifier(this.getModifier());
     return builder.build();
   } else {
     throw new IllegalStateException("Unknown instance of MemberHoldingTypeDetails");
   }
 }