Program: 71400
Project: 71400
Buggy source:
/** 
 * @param iLabelLocation
 * @param g2d
 * @param fm
 * @param sText
 * @param dAngleInDegrees
 * @param dX
 * @param dY
 * @return
 */
public static final RotatedRectangle computePolygon(IDisplayServer xs,int iLabelLocation,Label la,double dX,double dY) throws IllegalArgumentException {
  double dAngleInDegrees=la.getCaption().getFont().getRotation();
  final double dAngleInRadians=((-dAngleInDegrees * Math.PI) / 180.0);
  final double dSineTheta=Math.abs(Math.sin(dAngleInRadians));
  final double dCosTheta=Math.abs(Math.cos(dAngleInRadians));
  final ITextMetrics itm=xs.getTextMetrics(la);
  try {
    double dW=itm.getFullWidth();
    double dH=itm.getFullHeight();
    RotatedRectangle rr=null;
    if ((iLabelLocation & LEFT) == LEFT) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW,dY - dH / 2,dX,dY - dH / 2,dX,dY + dH / 2,dX - dW,dY + dH / 2);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dH * dSineTheta - dW * dCosTheta,dY - dH * dCosTheta + dW * dSineTheta,dX - dH * dSineTheta,dY - dH * dCosTheta,dX,dY,dX - dW * dCosTheta,dY + dW * dSineTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX - dW * dCosTheta,dY - dW * dSineTheta,dX,dY,dX - dH * dSineTheta,dY + dH * dCosTheta,dX - dH * dSineTheta - dW * dCosTheta,dY + dH * dCosTheta - dW * dSineTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH,dY - dW / 2,dX,dY - dW / 2,dX,dY + dW / 2,dX - dH,dY + dW / 2);
      }
    }
 else     if ((iLabelLocation & RIGHT) == RIGHT) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX,dY - dH / 2,dX + dW,dY - dH / 2,dX + dW,dY + dH / 2,dX,dY + dH / 2);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX,dY,dX + dW * dCosTheta,dY - dW * dSineTheta,dX + dW * dCosTheta + dH * dSineTheta,dY - dW * dSineTheta + dH * dCosTheta,dX + dH * dSineTheta,dY + dH * dCosTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX + dH * dSineTheta,dY - dH * dCosTheta,dX + dH * dSineTheta + dW * dCosTheta,dY - dH * dCosTheta + dW * dSineTheta,dX + dW * dCosTheta,dY + dW * dSineTheta,dX,dY);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX,dY - dW / 2,dX + dH,dY - dW / 2,dX + dH,dY + dW / 2,dX,dY + dW / 2);
      }
    }
 else     if ((iLabelLocation & BOTTOM) == BOTTOM) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW / 2,dY,dX + dW / 2,dY,dX + dW / 2,dY + dH,dX - dW / 2,dY + dH);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dW * dCosTheta,dY + dW * dSineTheta,dX,dY,dX + dH * dSineTheta,dY + dH * dCosTheta,dX + dH * dSineTheta - dW * dCosTheta,dY + dH * dCosTheta + dW * dSineTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX,dY,dX + dW * dCosTheta,dY + dW * dSineTheta,dX + dW * dCosTheta - dH * dSineTheta,dY + dW * dSineTheta + dH * dCosTheta,dX - dH * dSineTheta,dY + dH * dCosTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH / 2,dY,dX + dH / 2,dY,dX + dH / 2,dY + dW,dX - dH / 2,dY + dW);
      }
    }
 else     if ((iLabelLocation & TOP) == TOP) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW / 2,dY - dH,dX + dW / 2,dY - dH,dX + dW / 2,dY,dX - dW / 2,dY);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dH * dSineTheta,dY - dH * dCosTheta,dX - dH * dSineTheta + dW * dCosTheta,dY - dH * dCosTheta - dW * dSineTheta,dX + dW * dCosTheta,dY - dW * dSineTheta,dX,dY);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX - dW * dCosTheta + dH * dSineTheta,dY - dW * dSineTheta - dH * dCosTheta,dX + dH * dSineTheta,dY - dH * dCosTheta,dX,dY,dX - dW * dCosTheta,dY - dW * dSineTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH / 2,dY - dW,dX + dH / 2,dY - dW,dX + dH / 2,dY,dX - dH / 2,dY);
      }
    }
 else     if ((iLabelLocation & INSIDE) == INSIDE) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW / 2,dY - dH / 2,dX + dW / 2,dY - dH / 2,dX + dW / 2,dY + dH / 2,dX - dW / 2,dY + dH / 2);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dH / 2 * dSineTheta - dW / 2 * dCosTheta,dY - dH / 2 * dCosTheta + dW / 2 * dSineTheta,dX - dH / 2 * dSineTheta + dW / 2 * dCosTheta,dY - dH / 2 * dCosTheta - dW / 2 * dSineTheta,dX + dH / 2 * dSineTheta + dW / 2 * dCosTheta,dY + dH / 2 * dCosTheta - dW / 2 * dSineTheta,dX + dH / 2 * dSineTheta - dW / 2 * dCosTheta,dY + dH / 2 * dCosTheta + dW / 2 * dSineTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX - dW / 2 * dCosTheta + dH / 2 * dSineTheta,dY - dW / 2 * dSineTheta - dH / 2 * dCosTheta,dX + dH / 2 * dSineTheta + dW / 2 * dCosTheta,dY - dH / 2 * dCosTheta + dW / 2 * dSineTheta,dX + dW / 2 * dCosTheta - dH / 2 * dSineTheta,dY + dH / 2 * dCosTheta + dW / 2 * dSineTheta,dX - dW / 2 * dCosTheta - dH / 2 * dSineTheta,dY - dW / 2 * dSineTheta + dH / 2 * dCosTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH / 2,dY - dW / 2,dX + dH / 2,dY - dW / 2,dX + dH / 2,dY + dW / 2,dX - dH / 2,dY + dW / 2);
      }
    }
    return rr;
  }
  finally {
    itm.dispose();
  }
}

Fixed version (ground truth):
/** 
 * @param xs
 * @param iLabelLocation
 * @param la
 * @param dX
 * @param dY
 * @param fontHeight , see also: computeFontHeight
 * @return
 * @throws IllegalArgumentException
 */
public static final RotatedRectangle computePolygon(IDisplayServer xs,int iLabelLocation,Label la,double dX,double dY,Double fontHeight) throws IllegalArgumentException {
  double dAngleInDegrees=la.getCaption().getFont().getRotation();
  final double dAngleInRadians=((-dAngleInDegrees * Math.PI) / 180.0);
  final double dSineTheta=Math.abs(Math.sin(dAngleInRadians));
  final double dCosTheta=Math.abs(Math.cos(dAngleInRadians));
  final ITextMetrics itm=xs.getTextMetrics(la);
  try {
    double dW=itm.getFullWidth();
    double dH=fontHeight == null ? itm.getFullHeight() : itm.getFullHeight(fontHeight);
    RotatedRectangle rr=null;
    if ((iLabelLocation & LEFT) == LEFT) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW,dY - dH / 2,dX,dY - dH / 2,dX,dY + dH / 2,dX - dW,dY + dH / 2);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dH * dSineTheta - dW * dCosTheta,dY - dH * dCosTheta + dW * dSineTheta,dX - dH * dSineTheta,dY - dH * dCosTheta,dX,dY,dX - dW * dCosTheta,dY + dW * dSineTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX - dW * dCosTheta,dY - dW * dSineTheta,dX,dY,dX - dH * dSineTheta,dY + dH * dCosTheta,dX - dH * dSineTheta - dW * dCosTheta,dY + dH * dCosTheta - dW * dSineTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH,dY - dW / 2,dX,dY - dW / 2,dX,dY + dW / 2,dX - dH,dY + dW / 2);
      }
    }
 else     if ((iLabelLocation & RIGHT) == RIGHT) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX,dY - dH / 2,dX + dW,dY - dH / 2,dX + dW,dY + dH / 2,dX,dY + dH / 2);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX,dY,dX + dW * dCosTheta,dY - dW * dSineTheta,dX + dW * dCosTheta + dH * dSineTheta,dY - dW * dSineTheta + dH * dCosTheta,dX + dH * dSineTheta,dY + dH * dCosTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX + dH * dSineTheta,dY - dH * dCosTheta,dX + dH * dSineTheta + dW * dCosTheta,dY - dH * dCosTheta + dW * dSineTheta,dX + dW * dCosTheta,dY + dW * dSineTheta,dX,dY);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX,dY - dW / 2,dX + dH,dY - dW / 2,dX + dH,dY + dW / 2,dX,dY + dW / 2);
      }
    }
 else     if ((iLabelLocation & BOTTOM) == BOTTOM) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW / 2,dY,dX + dW / 2,dY,dX + dW / 2,dY + dH,dX - dW / 2,dY + dH);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dW * dCosTheta,dY + dW * dSineTheta,dX,dY,dX + dH * dSineTheta,dY + dH * dCosTheta,dX + dH * dSineTheta - dW * dCosTheta,dY + dH * dCosTheta + dW * dSineTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX,dY,dX + dW * dCosTheta,dY + dW * dSineTheta,dX + dW * dCosTheta - dH * dSineTheta,dY + dW * dSineTheta + dH * dCosTheta,dX - dH * dSineTheta,dY + dH * dCosTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH / 2,dY,dX + dH / 2,dY,dX + dH / 2,dY + dW,dX - dH / 2,dY + dW);
      }
    }
 else     if ((iLabelLocation & TOP) == TOP) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW / 2,dY - dH,dX + dW / 2,dY - dH,dX + dW / 2,dY,dX - dW / 2,dY);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dH * dSineTheta,dY - dH * dCosTheta,dX - dH * dSineTheta + dW * dCosTheta,dY - dH * dCosTheta - dW * dSineTheta,dX + dW * dCosTheta,dY - dW * dSineTheta,dX,dY);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX - dW * dCosTheta + dH * dSineTheta,dY - dW * dSineTheta - dH * dCosTheta,dX + dH * dSineTheta,dY - dH * dCosTheta,dX,dY,dX - dW * dCosTheta,dY - dW * dSineTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH / 2,dY - dW,dX + dH / 2,dY - dW,dX + dH / 2,dY,dX - dH / 2,dY);
      }
    }
 else     if ((iLabelLocation & INSIDE) == INSIDE) {
      if (dAngleInDegrees == 0) {
        rr=new RotatedRectangle(dX - dW / 2,dY - dH / 2,dX + dW / 2,dY - dH / 2,dX + dW / 2,dY + dH / 2,dX - dW / 2,dY + dH / 2);
      }
 else       if (dAngleInDegrees > 0 && dAngleInDegrees < 90) {
        rr=new RotatedRectangle(dX - dH / 2 * dSineTheta - dW / 2 * dCosTheta,dY - dH / 2 * dCosTheta + dW / 2 * dSineTheta,dX - dH / 2 * dSineTheta + dW / 2 * dCosTheta,dY - dH / 2 * dCosTheta - dW / 2 * dSineTheta,dX + dH / 2 * dSineTheta + dW / 2 * dCosTheta,dY + dH / 2 * dCosTheta - dW / 2 * dSineTheta,dX + dH / 2 * dSineTheta - dW / 2 * dCosTheta,dY + dH / 2 * dCosTheta + dW / 2 * dSineTheta);
      }
 else       if (dAngleInDegrees < 0 && dAngleInDegrees > -90) {
        rr=new RotatedRectangle(dX - dW / 2 * dCosTheta + dH / 2 * dSineTheta,dY - dW / 2 * dSineTheta - dH / 2 * dCosTheta,dX + dH / 2 * dSineTheta + dW / 2 * dCosTheta,dY - dH / 2 * dCosTheta + dW / 2 * dSineTheta,dX + dW / 2 * dCosTheta - dH / 2 * dSineTheta,dY + dH / 2 * dCosTheta + dW / 2 * dSineTheta,dX - dW / 2 * dCosTheta - dH / 2 * dSineTheta,dY - dW / 2 * dSineTheta + dH / 2 * dCosTheta);
      }
 else       if (dAngleInDegrees == 90 || dAngleInDegrees == -90) {
        rr=new RotatedRectangle(dX - dH / 2,dY - dW / 2,dX + dH / 2,dY - dW / 2,dX + dH / 2,dY + dW / 2,dX - dH / 2,dY + dW / 2);
      }
    }
    return rr;
  }
  finally {
    itm.dispose();
  }
}