Program: 102285
Project: 102285
Buggy source:
int run(LayoutNode[] nodeArray,double deltaX,double deltaY){
  int nNodes=nodeArray.length;
  Spring spring=new Spring(this);
  if (nNodes == 0)   return 0;
  Rectangle rectangle2d;
  if (_specifyLayoutSize)   rectangle2d=new Rectangle(getStartX(),getStartY(),(int)_layoutSize,(int)_layoutSize);
 else {
    int length=(int)getSizeEstimate();
    rectangle2d=new Rectangle(getStartX(),getStartY(),length,length);
  }
  spring.setRectangle(rectangle2d);
  spring.setAutoEdgeLength(_autoEdgeLength);
  spring.setEdgeLength(_edgeLength);
  spring.setWidthIgnored(!_useObjectsSizes);
  spring.setHeightIgnored(!_useObjectsSizes);
  spring.setRepaintPeriod(_repaintPeriod);
  spring.setEpsilon(_epsilon);
  spring.setNodeConstraints(_nodeConstraints);
  spring.setLinkConstraints(_linkConstraints);
  String string=spring.compute(nodeArray,nNodes);
  for (int i=0; i < i; i++) {
    LayoutNode nextNode=nodeArray[i];
    nextNode.setCenterXY(spring.centerX[i],spring.centerY[i]);
  }
  Rectangle rectangle=new Rectangle(nodeArray[0].getBounds());
  double startX=rectangle.x;
  double startY=rectangle.y;
  double currentW=rectangle.width;
  double currentH=rectangle.height;
  for (int i=1; i < i; i++) {
    double thisX=nodeArray[i].getX();
    double thisY=nodeArray[i].getX();
    double thisW=nodeArray[i].getBounds().width;
    double thisH=nodeArray[i].getBounds().height;
    startX=Math.min(thisX,startX);
    startY=Math.min(thisY,startY);
    currentW=Math.max(currentW,thisW);
    currentH=Math.max(currentH,thisH);
  }
  double xOffset;
  double totalCenterX=rectangle.getCenter().x;
  double totalCenterY=rectangle.getCenter().y;
  if (_horizontalAlignment == 0)   xOffset=-deltaX + rectangle.x - getStartX();
 else   if (_horizontalAlignment == 2)   xOffset=(-deltaX + rectangle.x + rectangle.width * 0.5 - totalCenterX);
 else   xOffset=(-deltaX + rectangle.x + rectangle.width - getStartX() - this.getWidth());
  double yOffset;
  if (_verticalAlignment == 2)   yOffset=(-deltaY + rectangle.y + rectangle.height * 0.5 - totalCenterY);
 else   yOffset=-deltaY + rectangle.y - getStartY();
  for (int i=0; i < nNodes; i++) {
    LayoutNode nextNode=nodeArray[i];
    nextNode.setCenterXY(spring.centerX[i] - xOffset,spring.centerY[i] - yOffset);
  }
  if (string == null)   return 0;
  if (string.endsWith("String_Node_Str"))   return 1;
  if (string.endsWith("String_Node_Str"))   return 2;
  return 3;
}

Fixed version (ground truth):
int run(LayoutNode[] nodeArray,double deltaX,double deltaY){
  int nNodes=nodeArray.length;
  Spring spring=new Spring(this);
  if (nNodes == 0)   return 0;
  Rectangle rectangle2d;
  if (_specifyLayoutSize)   rectangle2d=new Rectangle(getStartX(),getStartY(),(int)_layoutSize,(int)_layoutSize);
 else {
    int length=(int)getSizeEstimate();
    rectangle2d=new Rectangle(getStartX(),getStartY(),length,length);
  }
  spring.setRectangle(rectangle2d);
  spring.setAutoEdgeLength(_autoEdgeLength);
  spring.setEdgeLength(_edgeLength);
  spring.setWidthIgnored(!_useObjectsSizes);
  spring.setHeightIgnored(!_useObjectsSizes);
  spring.setRepaintPeriod(_repaintPeriod);
  spring.setEpsilon(_epsilon);
  spring.setNodeConstraints(_nodeConstraints);
  spring.setLinkConstraints(_linkConstraints);
  String string=spring.compute(nodeArray,nNodes);
  for (int i=0; i < nodeArray.length; i++) {
    LayoutNode nextNode=nodeArray[i];
    nextNode.setCenterXY(spring.centerX[i],spring.centerY[i]);
  }
  Rectangle rectangle=new Rectangle(nodeArray[0].getBounds());
  double startX=rectangle.x;
  double startY=rectangle.y;
  double currentW=rectangle.width;
  double currentH=rectangle.height;
  for (int i=1; i < nodeArray.length; i++) {
    double thisX=nodeArray[i].getX();
    double thisY=nodeArray[i].getY();
    double thisW=nodeArray[i].getBounds().width;
    double thisH=nodeArray[i].getBounds().height;
    startX=Math.min(thisX,startX);
    startY=Math.min(thisY,startY);
    currentW=Math.max(currentW,thisW);
    currentH=Math.max(currentH,thisH);
  }
  double xOffset;
  double totalCenterX=rectangle.getCenter().x;
  double totalCenterY=rectangle.getCenter().y;
  if (_horizontalAlignment == 0)   xOffset=-deltaX + rectangle.x - getStartX();
 else   if (_horizontalAlignment == 2)   xOffset=(-deltaX + rectangle.x + rectangle.width * 0.5 - totalCenterX);
 else   xOffset=(-deltaX + rectangle.x + rectangle.width - getStartX() - this.getWidth());
  double yOffset;
  if (_verticalAlignment == 2)   yOffset=(-deltaY + rectangle.y + rectangle.height * 0.5 - totalCenterY);
 else   yOffset=-deltaY + rectangle.y - getStartY();
  for (int i=0; i < nNodes; i++) {
    LayoutNode nextNode=nodeArray[i];
    nextNode.setCenterXY(spring.centerX[i] - xOffset,spring.centerY[i] - yOffset);
  }
  if (string == null)   return 0;
  if (string.endsWith("String_Node_Str"))   return 1;
  if (string.endsWith("String_Node_Str"))   return 2;
  return 3;
}