Buggy code:
public abstract class FieldTagDeclaration < T extends TagRef > extends TagDeclaration { private Optional < ImmutableMap < String , FieldDeclaration > > namedFields = Optional . absent ( ) ; private Optional < ImmutableList < FieldDeclaration > > allFields = Optional . absent ( ) ; private Optional < ImmutableList < TreeElement > > structure = Optional . absent ( ) ; private T astTagRef ; protected FieldTagDeclaration ( FieldTagDeclaration . Builder < T , ? extends FieldTagDeclaration < T > > builder ) { } public final void define ( List < TreeElement > structure ) { } public final void setPredefinitionNode ( T node ) { } public final Optional < ImmutableList < TreeElement > > getStructure ( ) { } public final Optional < ImmutableMap < String , FieldDeclaration > > getNamedFields ( ) { } public final Optional < ImmutableList < FieldDeclaration > > getAllFields ( ) { } public final Optional < FieldDeclaration > findField ( String fieldName ) { } @ Override public abstract FieldTagType < ? > getType ( boolean constQualified , boolean volatileQualified ) { } @ Override public final T getAstNode ( ) { } @ Override public final boolean isDefined ( ) { } @ Override public abstract FieldTagDeclaration < T > deepCopy ( CopyController controller ) { } protected < D extends FieldTagDeclaration < T > > D copyHelp ( FieldTagDeclaration . Builder < T , D > builder , CopyController controller ) { if ( this . structure . isPresent ( ) ) { final List < TreeElement > newStructure = new ArrayList < > ( ) ; for ( TreeElement element : this . structure . get ( ) ) { newStructure . add ( element . deepCopy ( controller ) ) ; } builder . structure ( newStructure ) ; } <START_BUG> final D result = builder . astNode ( this . astTagRef ) . name ( FieldTagDeclaration . getName ( ) . orNull ( ) , controller . mapUniqueName ( FieldTagDeclaration . getUniqueName ( ) ) . orNull ( ) ) . startLocation ( this . location ) . build ( ) ; <END_BUG> if ( FieldTagDeclaration . hasLayout ( ) ) { result . setLayout ( FieldTagDeclaration . getSize ( ) , FieldTagDeclaration . getAlignment ( ) ) ; } if ( FieldTagDeclaration . isCorrect ( ) . isPresent ( ) ) { result . setIsCorrect ( FieldTagDeclaration . isCorrect ( ) . get ( ) ) ; } if ( FieldTagDeclaration . isTransformed ( ) ) { result . transformed ( ) ; } return result ; } @ Override public void ownContents ( ) { } public static abstract class Builder < T extends TagRef , D extends FieldTagDeclaration < T > > extends TagDeclaration . Builder < D > { private final boolean definitionBuilder ; private T astTagRef ; private Optional < List < TreeElement > > structure = Optional . absent ( ) ; protected Builder ( boolean definitionBuilder ) { } public FieldTagDeclaration . Builder < T , D > astNode ( T tagRef ) { } public FieldTagDeclaration . Builder < T , D > structure ( List < TreeElement > structure ) { } @ Override protected void validate ( ) { } } public static abstract class ExtendedBuilder < T extends TagRef , D extends FieldTagDeclaration < T > > extends FieldTagDeclaration . Builder < T , D > { protected boolean isExternal ; protected ExtendedBuilder ( boolean definitionBuilder ) { } public FieldTagDeclaration . ExtendedBuilder < T , D > isExternal ( boolean isExternal ) { } } private static final class DefinitionElementsBuilder { private final List < TreeElement > elements ; private DefinitionElementsBuilder ( List < TreeElement > elements ) { } private ImmutableList < TreeElement > buildStructure ( ) { } private ImmutableList < FieldDeclaration > buildAllFields ( ) { } private ImmutableMap < String , FieldDeclaration > buildNamedFields ( ) { } } }

Fix:
final D result = builder . astNode ( controller . mapNode ( this . astTagRef ) ) . name ( FieldTagDeclaration . getName ( ) . orNull ( ) , controller . mapUniqueName ( FieldTagDeclaration . getUniqueName ( ) ) . orNull ( ) ) . startLocation ( this . location ) . build ( ) ;