int headerCounts[] = new int[columnCount];
int maxHeaderCount = 0;
for (int col = 0; col < columnCount; col++) {
// Get the header property.
ColumnDefinition<RowType, ?> colDef = visibleColumns.get(col);
HeaderProperty prop = colDef.getColumnProperty(HeaderProperty.TYPE);
int headerCount = prop.getHeaderCount();
headerCounts[col] = headerCount;
maxHeaderCount = Math.max(maxHeaderCount, headerCount);
// Add each ColumnHeaderInfo
List<ColumnHeaderInfo> infos = new ArrayList<ColumnHeaderInfo>();
ColumnHeaderInfo prev = null;
for (int row = 0; row < headerCount; row++) {
Object header = prop.getHeader(row, col);
if (prev != null && prev.header.equals(header)) {
prev.incrementRowSpan();
} else {
prev = new ColumnHeaderInfo(header);
infos.add(0, prev);