Buggy code:
public class ClassDefinitionBuilder { private final AbstractTransformer gen ; private final String name ; private long modifiers ; private long constructorModifiers = - 1 ; private JCExpression extending ; private JCStatement superCall ; private final ListBuffer < JCExpression > satisfies = ListBuffer . lb ( ) ; private final ListBuffer < JCTypeParameter > typeParams = ListBuffer . lb ( ) ; private final ListBuffer < JCExpression > typeParamAnnotations = ListBuffer . lb ( ) ; private final ListBuffer < JCAnnotation > annotations = ListBuffer . lb ( ) ; private final ListBuffer < JCVariableDecl > params = ListBuffer . lb ( ) ; private final ListBuffer < JCTree > defs = ListBuffer . lb ( ) ; private final ListBuffer < JCTree > concreteInterfaceMemberDefs = ListBuffer . lb ( ) ; private final ListBuffer < JCTree > body = ListBuffer . lb ( ) ; private final ListBuffer < JCStatement > init = ListBuffer . lb ( ) ; public static ClassDefinitionBuilder klass ( AbstractTransformer gen , String name ) { } public static ClassDefinitionBuilder methodWrapper ( AbstractTransformer gen , String name , boolean shared ) { } private ClassDefinitionBuilder ( AbstractTransformer gen , String name ) { } public List < JCTree > build ( ) { } private void appendDefinitionsTo ( ListBuffer < JCTree > defs ) { } private List < JCTree > appendConcreteInterfaceMembers ( java . util . List < ProducedType > satisfies ) { } private JCExpression getSuperclass ( ProducedType extendedType ) { } private List < JCExpression > transformSatisfiedTypes ( java . util . List < ProducedType > list ) { } private JCMethodDecl createConstructor ( ) { } public ClassDefinitionBuilder modifiers ( long ... modifiers ) { } public ClassDefinitionBuilder constructorModifiers ( long ... constructorModifiers ) { } public ClassDefinitionBuilder typeParameter ( String name , java . util . List < ProducedType > satisfiedTypes , boolean covariant , boolean contravariant ) { ListBuffer < JCExpression > bounds = new ListBuffer < JCExpression > ( ) ; for ( ProducedType t : satisfiedTypes ) { if ( ! ( gen . willEraseToObject ( t ) ) ) { <START_BUG> bounds . append ( gen . makeJavaType ( t ) ) ; <END_BUG> } } typeParams . append ( gen . make ( ) . TypeParameter ( gen . names ( ) . fromString ( name ) , bounds . toList ( ) ) ) ; typeParamAnnotations . append ( gen . makeAtTypeParameter ( name , satisfiedTypes , covariant , contravariant ) ) ; return this ; } public ClassDefinitionBuilder typeParameter ( Tree . TypeParameterDeclaration param ) { } public ClassDefinitionBuilder extending ( ProducedType extendingType ) { } public ClassDefinitionBuilder extending ( Tree . ExtendedType extendedType ) { } public ClassDefinitionBuilder satisfies ( java . util . List < ProducedType > satisfies ) { } public ClassDefinitionBuilder annotations ( List < JCTree . JCAnnotation > annotations ) { } private ClassDefinitionBuilder parameter ( String name , TypedDeclaration decl , boolean isSequenced ) { } public ClassDefinitionBuilder parameter ( Tree . Parameter param ) { } public ClassDefinitionBuilder parameter ( Parameter param ) { } public ClassDefinitionBuilder defs ( JCTree statement ) { } public ClassDefinitionBuilder defs ( List < JCTree > defs ) { } public ClassDefinitionBuilder body ( JCTree statement ) { } public ClassDefinitionBuilder body ( List < JCTree > body ) { } public ClassDefinitionBuilder init ( JCStatement statement ) { } public ClassDefinitionBuilder init ( List < JCStatement > init ) { } public ClassDefinitionBuilder concreteInterfaceMemberDefs ( JCMethodDecl concreteInterfaceMember ) { } public ClassDefinitionBuilder field ( int modifiers , String attrName , JCExpression type , JCExpression initialValue , boolean isLocal ) { } }

Fix:
bounds . append ( gen . makeJavaType ( t , NO_PRIMITIVES ) ) ;