Program: 76560
Project: 76560
Buggy source:
public void resolveDropCells(int dropValue){
  assert(dropValue < 0);
  if (rows.size() == 0 || !hasDropCell) {
    return;
  }
  Row row=(Row)rows.getCurrent();
  assert(row != null);
  int rowHeight=row.getArea().getHeight();
  int height=rowHeight;
  boolean needResolve=false;
  for (int i=0; i < columnNumber; i++) {
    CellArea cell=row.getCell(start + i);
    assert(cell != null);
    if (cell.getRowSpan() == dropValue) {
      height=Math.max(height,cell.getHeight());
      needResolve=true;
    }
  }
  if (needResolve) {
    HashSet dropCells=new HashSet();
    int delta=height - rowHeight;
    for (int i=0; i < columnNumber; i++) {
      CellArea cell=row.getCell(start + i);
      if (cell.getRowSpan() == dropValue) {
        if (cell instanceof DummyCell) {
          CellArea ref=((DummyCell)cell).getCell();
          int cellHeight=cell.getHeight();
          int refHeight=ref.getHeight();
          if (!dropCells.contains(ref)) {
            ref.setHeight(refHeight - cellHeight + delta);
            verticalAlign(ref);
            dropCells.add(ref);
          }
        }
 else {
          cell.setHeight(height);
          verticalAlign(cell);
        }
        cell.setRowSpan(1);
      }
 else       if (cell.getRowSpan() == 1) {
        if (cell instanceof DummyCell) {
          CellArea ref=((DummyCell)cell).getCell();
          if (!dropCells.contains(ref)) {
            ref.setHeight(ref.getHeight() + delta);
            if (delta > 0) {
              verticalAlign(ref);
            }
            dropCells.add(ref);
          }
        }
 else {
          cell.setHeight(height);
          verticalAlign(cell);
        }
      }
    }
  }
}

Fixed version (ground truth):
public void resolveDropCells(int dropValue){
  assert(dropValue < 0);
  if (rows.size() == 0 || !hasDropCell) {
    return;
  }
  Row row=(Row)rows.getCurrent();
  assert(row != null);
  int rowHeight=row.getArea().getHeight();
  int height=rowHeight;
  boolean needResolve=false;
  for (int i=0; i < columnNumber; i++) {
    CellArea cell=row.getCell(start + i);
    if (cell != null && cell.getRowSpan() == dropValue) {
      height=Math.max(height,cell.getHeight());
      needResolve=true;
    }
  }
  if (needResolve) {
    HashSet dropCells=new HashSet();
    int delta=height - rowHeight;
    for (int i=0; i < columnNumber; i++) {
      CellArea cell=row.getCell(start + i);
      if (cell == null) {
        continue;
      }
      if (cell.getRowSpan() == dropValue) {
        if (cell instanceof DummyCell) {
          CellArea ref=((DummyCell)cell).getCell();
          int cellHeight=cell.getHeight();
          int refHeight=ref.getHeight();
          if (!dropCells.contains(ref)) {
            ref.setHeight(refHeight - cellHeight + delta);
            verticalAlign(ref);
            dropCells.add(ref);
          }
        }
 else {
          cell.setHeight(height);
          verticalAlign(cell);
        }
        cell.setRowSpan(1);
      }
 else       if (cell.getRowSpan() == 1) {
        if (cell instanceof DummyCell) {
          CellArea ref=((DummyCell)cell).getCell();
          if (!dropCells.contains(ref)) {
            ref.setHeight(ref.getHeight() + delta);
            if (delta > 0) {
              verticalAlign(ref);
            }
            dropCells.add(ref);
          }
        }
 else {
          cell.setHeight(height);
          verticalAlign(cell);
        }
      }
    }
  }
}