Program: 27165
Project: 27165
Buggy source:
@Override public void write(JavaWriter javaWriter) throws IOException {
  TableCreationQueryBuilder tableCreationQuery=new TableCreationQueryBuilder();
  tableCreationQuery.appendCreateTableIfNotExists(tableDefinition.tableName);
  ArrayList<QueryBuilder> mColumnDefinitions=new ArrayList<QueryBuilder>();
  List<String> foreignColumnClasses=Lists.newArrayList();
  for (  ColumnDefinition columnDefinition : tableDefinition.getColumnDefinitions()) {
    TableCreationQueryBuilder queryBuilder=new TableCreationQueryBuilder();
    if (columnDefinition.columnType == Column.FOREIGN_KEY) {
      queryBuilder.appendSpace().appendForeignKeys(columnDefinition.foreignKeyReferences);
    }
 else {
      queryBuilder.append(columnDefinition.columnName).appendSpace();
      if (columnDefinition.hasTypeConverter) {
        TypeConverterDefinition typeConverterDefinition=manager.getTypeConverterDefinition(columnDefinition.modelType);
        queryBuilder.appendType(typeConverterDefinition.getDbElement().asType().toString());
      }
 else       if (SQLiteType.containsClass(columnDefinition.columnFieldType)) {
        queryBuilder.appendType(columnDefinition.columnFieldType);
      }
 else       if (ReflectionUtils.isSubclassOf(columnDefinition.columnFieldType,Enum.class)) {
        queryBuilder.appendSQLiteType(SQLiteType.TEXT);
      }
    }
    mColumnDefinitions.add(queryBuilder.appendColumn(columnDefinition.column));
  }
  boolean isModelView=ProcessorUtils.implementsClass(manager.getProcessingEnvironment(),tableDefinition.packageName + "String_Node_Str" + tableDefinition.getModelClassName(),manager.getElements().getTypeElement(Classes.MODEL_VIEW));
  if (!isModelView) {
    if (tableDefinition.primaryColumnDefinitions.isEmpty()) {
      throw new PrimaryKeyNotFoundException("String_Node_Str" + tableDefinition.tableName + "String_Node_Str");
    }
    QueryBuilder primaryKeyQueryBuilder=new QueryBuilder().append("String_Node_Str");
    int count=0;
    int index=0;
    for (    ColumnDefinition field : tableDefinition.primaryColumnDefinitions) {
      if (field.columnType == Column.PRIMARY_KEY) {
        count++;
        primaryKeyQueryBuilder.append(field.columnName);
        if (index < tableDefinition.primaryColumnDefinitions.size() - 1) {
          primaryKeyQueryBuilder.append("String_Node_Str");
        }
      }
      index++;
    }
    if (count > 0) {
      primaryKeyQueryBuilder.append("String_Node_Str");
      mColumnDefinitions.add(primaryKeyQueryBuilder);
    }
    QueryBuilder foreignKeyQueryBuilder;
    for (    ColumnDefinition foreignKeyField : tableDefinition.foreignKeyDefinitions) {
      foreignKeyQueryBuilder=new QueryBuilder().append("String_Node_Str");
      String[] foreignColumns=new String[foreignKeyField.foreignKeyReferences.length];
      for (int i=0; i < foreignColumns.length; i++) {
        foreignColumns[i]=foreignKeyField.foreignKeyReferences[i].foreignColumnName();
      }
      String[] columns=new String[foreignKeyField.foreignKeyReferences.length];
      for (int i=0; i < columns.length; i++) {
        columns[i]=foreignKeyField.foreignKeyReferences[i].columnName();
      }
      foreignKeyQueryBuilder.appendArray(columns).append("String_Node_Str").appendSpaceSeparated("String_Node_Str");
      foreignColumnClasses.add("String_Node_Str" + ModelUtils.getFieldClass(foreignKeyField.columnFieldType) + "String_Node_Str");
      mColumnDefinitions.add(foreignKeyQueryBuilder);
    }
  }
 else   if (!tableDefinition.primaryColumnDefinitions.isEmpty() || !tableDefinition.foreignKeyDefinitions.isEmpty()) {
    manager.getMessager().printMessage(Diagnostic.Kind.ERROR,"String_Node_Str");
  }
  tableCreationQuery.appendList(mColumnDefinitions).append("String_Node_Str");
  QueryBuilder returnQuery=new QueryBuilder();
  returnQuery.append("String_Node_Str");
  if (!foreignColumnClasses.isEmpty()) {
    returnQuery.append("String_Node_Str");
  }
  returnQuery.append("String_Node_Str");
  if (!foreignColumnClasses.isEmpty()) {
    returnQuery.append("String_Node_Str");
    returnQuery.appendList(foreignColumnClasses).append("String_Node_Str");
  }
  javaWriter.emitStatement(returnQuery.getQuery(),tableCreationQuery.getQuery());
}

Fixed version (ground truth):
@Override public void write(JavaWriter javaWriter) throws IOException {
  TableCreationQueryBuilder tableCreationQuery=new TableCreationQueryBuilder();
  tableCreationQuery.appendCreateTableIfNotExists(tableDefinition.tableName);
  ArrayList<QueryBuilder> mColumnDefinitions=new ArrayList<QueryBuilder>();
  List<String> foreignColumnClasses=Lists.newArrayList();
  for (  ColumnDefinition columnDefinition : tableDefinition.getColumnDefinitions()) {
    TableCreationQueryBuilder queryBuilder=new TableCreationQueryBuilder();
    if (columnDefinition.columnType == Column.FOREIGN_KEY) {
      queryBuilder.appendSpace().appendForeignKeys(columnDefinition.foreignKeyReferences);
    }
 else {
      queryBuilder.append(columnDefinition.columnName).appendSpace();
      if (columnDefinition.hasTypeConverter) {
        TypeConverterDefinition typeConverterDefinition=manager.getTypeConverterDefinition(columnDefinition.modelType);
        if (typeConverterDefinition != null) {
          queryBuilder.appendType(typeConverterDefinition.getDbElement().asType().toString());
        }
 else {
          manager.logError("String_Node_Str" + columnDefinition.columnFieldType);
          queryBuilder.append("String_Node_Str");
        }
      }
 else       if (SQLiteType.containsClass(columnDefinition.columnFieldType)) {
        queryBuilder.appendType(columnDefinition.columnFieldType);
      }
 else       if (ReflectionUtils.isSubclassOf(columnDefinition.columnFieldType,Enum.class)) {
        queryBuilder.appendSQLiteType(SQLiteType.TEXT);
      }
    }
    mColumnDefinitions.add(queryBuilder.appendColumn(columnDefinition.column));
  }
  boolean isModelView=ProcessorUtils.implementsClass(manager.getProcessingEnvironment(),tableDefinition.packageName + "String_Node_Str" + tableDefinition.getModelClassName(),manager.getElements().getTypeElement(Classes.MODEL_VIEW));
  if (!isModelView) {
    QueryBuilder primaryKeyQueryBuilder=new QueryBuilder().append("String_Node_Str");
    int count=0;
    int index=0;
    for (    ColumnDefinition field : tableDefinition.primaryColumnDefinitions) {
      if (field.columnType == Column.PRIMARY_KEY) {
        count++;
        primaryKeyQueryBuilder.append(field.columnName);
        if (index < tableDefinition.primaryColumnDefinitions.size() - 1) {
          primaryKeyQueryBuilder.append("String_Node_Str");
        }
      }
      index++;
    }
    if (count > 0) {
      primaryKeyQueryBuilder.append("String_Node_Str");
      mColumnDefinitions.add(primaryKeyQueryBuilder);
    }
    QueryBuilder foreignKeyQueryBuilder;
    for (    ColumnDefinition foreignKeyField : tableDefinition.foreignKeyDefinitions) {
      foreignKeyQueryBuilder=new QueryBuilder().append("String_Node_Str");
      String[] foreignColumns=new String[foreignKeyField.foreignKeyReferences.length];
      for (int i=0; i < foreignColumns.length; i++) {
        foreignColumns[i]=foreignKeyField.foreignKeyReferences[i].foreignColumnName();
      }
      String[] columns=new String[foreignKeyField.foreignKeyReferences.length];
      for (int i=0; i < columns.length; i++) {
        columns[i]=foreignKeyField.foreignKeyReferences[i].columnName();
      }
      foreignKeyQueryBuilder.appendArray(columns).append("String_Node_Str").appendSpaceSeparated("String_Node_Str");
      foreignColumnClasses.add("String_Node_Str" + ModelUtils.getFieldClass(foreignKeyField.columnFieldType) + "String_Node_Str");
      mColumnDefinitions.add(foreignKeyQueryBuilder);
    }
  }
 else   if (!tableDefinition.primaryColumnDefinitions.isEmpty() || !tableDefinition.foreignKeyDefinitions.isEmpty()) {
    manager.getMessager().printMessage(Diagnostic.Kind.ERROR,"String_Node_Str");
  }
  tableCreationQuery.appendList(mColumnDefinitions).append("String_Node_Str");
  QueryBuilder returnQuery=new QueryBuilder();
  returnQuery.append("String_Node_Str");
  if (!foreignColumnClasses.isEmpty()) {
    returnQuery.append("String_Node_Str");
  }
  returnQuery.append("String_Node_Str");
  if (!foreignColumnClasses.isEmpty()) {
    returnQuery.append("String_Node_Str");
    returnQuery.appendList(foreignColumnClasses).append("String_Node_Str");
  }
  javaWriter.emitStatement(returnQuery.getQuery(),tableCreationQuery.getQuery());
}