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"); } }