Program: 52772
Project: 52772
Buggy source:
@NotNull private ColumnInfo[] generateColumnsInfo(@NotNull List<ChangeInfo> changes){
  ItemAndWidth number=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth hash=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth topic=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth subject=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth status=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth author=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth project=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth branch=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth time=new ItemAndWidth("String_Node_Str",0);
  Set<String> availableLabels=Sets.newTreeSet();
  for (  ChangeInfo change : changes) {
    number=getMax(number,getNumber(change));
    hash=getMax(hash,getHash(change));
    topic=getMax(topic,getTopic(change));
    subject=getMax(subject,getShortenedSubject(change));
    status=getMax(status,getStatus(change));
    author=getMax(author,getOwner(change));
    project=getMax(project,getProject(change));
    branch=getMax(branch,getBranch(change));
    time=getMax(time,getTime(change));
    if (change.labels != null) {
      for (      String label : change.labels.keySet()) {
        availableLabels.add(label);
      }
    }
  }
  List<ColumnInfo> columnList=Lists.newArrayList();
  columnList.add(new GerritChangeColumnStarredInfo());
  boolean showChangeNumberColumn=gerritSettings.getShowChangeNumberColumn();
  if (showChangeNumberColumn) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",number.item){
      @Override public String valueOf(      ChangeInfo change){
        return getNumber(change);
      }
    }
);
  }
  boolean showChangeIdColumn=gerritSettings.getShowChangeIdColumn();
  if (showChangeIdColumn) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",hash.item){
      @Override public String valueOf(      ChangeInfo change){
        return getHash(change);
      }
    }
);
  }
  boolean showTopicColumn=gerritSettings.getShowTopicColumn();
  if (showTopicColumn) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",topic.item){
      @Override public String valueOf(      ChangeInfo change){
        return getTopic(change);
      }
    }
);
  }
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",subject.item){
    @Override public String valueOf(    ChangeInfo change){
      return change.subject;
    }
  }
);
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",status.item){
    @Override public String valueOf(    ChangeInfo change){
      return getStatus(change);
    }
  }
);
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",author.item){
    @Override public String valueOf(    ChangeInfo change){
      return getOwner(change);
    }
  }
);
  ShowProjectColumn showProjectColumn=gerritSettings.getShowProjectColumn();
  boolean listAllChanges=gerritSettings.getListAllChanges();
  if (showProjectColumn == ShowProjectColumn.ALWAYS || (showProjectColumn == ShowProjectColumn.AUTO && (listAllChanges || hasProjectMultipleRepos()))) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",project.item){
      @Override public String valueOf(      ChangeInfo change){
        return getProject(change);
      }
    }
);
  }
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",branch.item){
    @Override public String valueOf(    ChangeInfo change){
      return getBranch(change);
    }
  }
);
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",time.item){
    @Override public String valueOf(    ChangeInfo change){
      return getTime(change);
    }
  }
);
  for (  final String label : availableLabels) {
    columnList.add(new GerritChangeColumnIconLabelInfo(getShortLabelDisplay(label),label){
      @Override public LabelInfo getLabelInfo(      ChangeInfo change){
        return getLabel(change,label);
      }
    }
);
  }
  columnList.add(selectRevisionInfoColumn);
  return columnList.toArray(new ColumnInfo[columnList.size()]);
}

Fixed version (ground truth):
@NotNull private ColumnInfo[] generateColumnsInfo(@NotNull List<ChangeInfo> changes){
  ItemAndWidth number=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth hash=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth topic=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth subject=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth status=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth author=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth projectName=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth branch=new ItemAndWidth("String_Node_Str",0);
  ItemAndWidth time=new ItemAndWidth("String_Node_Str",0);
  Set<String> availableLabels=Sets.newTreeSet();
  for (  ChangeInfo change : changes) {
    number=getMax(number,getNumber(change));
    hash=getMax(hash,getHash(change));
    topic=getMax(topic,getTopic(change));
    subject=getMax(subject,getShortenedSubject(change));
    status=getMax(status,getStatus(change));
    author=getMax(author,getOwner(change));
    projectName=getMax(projectName,getProject(change));
    branch=getMax(branch,getBranch(change));
    time=getMax(time,getTime(change));
    if (change.labels != null) {
      for (      String label : change.labels.keySet()) {
        availableLabels.add(label);
      }
    }
  }
  List<ColumnInfo> columnList=Lists.newArrayList();
  columnList.add(new GerritChangeColumnStarredInfo());
  boolean showChangeNumberColumn=gerritSettings.getShowChangeNumberColumn();
  if (showChangeNumberColumn) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",number.item){
      @Override public String valueOf(      ChangeInfo change){
        return getNumber(change);
      }
    }
);
  }
  boolean showChangeIdColumn=gerritSettings.getShowChangeIdColumn();
  if (showChangeIdColumn) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",hash.item){
      @Override public String valueOf(      ChangeInfo change){
        return getHash(change);
      }
    }
);
  }
  boolean showTopicColumn=gerritSettings.getShowTopicColumn();
  if (showTopicColumn) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",topic.item){
      @Override public String valueOf(      ChangeInfo change){
        return getTopic(change);
      }
    }
);
  }
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",subject.item){
    @Override public String valueOf(    ChangeInfo change){
      return change.subject;
    }
  }
);
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",status.item){
    @Override public String valueOf(    ChangeInfo change){
      return getStatus(change);
    }
  }
);
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",author.item){
    @Override public String valueOf(    ChangeInfo change){
      return getOwner(change);
    }
  }
);
  ShowProjectColumn showProjectColumn=gerritSettings.getShowProjectColumn();
  boolean listAllChanges=gerritSettings.getListAllChanges();
  if (showProjectColumn == ShowProjectColumn.ALWAYS || (showProjectColumn == ShowProjectColumn.AUTO && (listAllChanges || hasProjectMultipleRepos()))) {
    columnList.add(new GerritChangeColumnInfo("String_Node_Str",projectName.item){
      @Override public String valueOf(      ChangeInfo change){
        return getProject(change);
      }
    }
);
  }
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",branch.item){
    @Override public String valueOf(    ChangeInfo change){
      return getBranch(change);
    }
  }
);
  columnList.add(new GerritChangeColumnInfo("String_Node_Str",time.item){
    @Override public String valueOf(    ChangeInfo change){
      return getTime(change);
    }
  }
);
  for (  final String label : availableLabels) {
    columnList.add(new GerritChangeColumnIconLabelInfo(getShortLabelDisplay(label),label){
      @Override public LabelInfo getLabelInfo(      ChangeInfo change){
        return getLabel(change,label);
      }
    }
);
  }
  columnList.add(selectRevisionInfoColumn);
  return columnList.toArray(new ColumnInfo[columnList.size()]);
}