Program: 45946
Project: 45946
Buggy source:
/** 
 * Set the transform for this cell. Users should not call this method directly, rather MovableComponent should be used, which will keep the client and server in sync.
 * @param localTransform
 */
void setLocalTransform(CellTransform localTransform,TransformChangeListener.ChangeSource source){
  if (this.localTransform != null && this.localTransform.equals(localTransform)) {
    return;
  }
  if (localTransform == null) {
    this.localTransform=null;
    Cell current=getParent();
    while (current != null) {
      CellTransform parentWorldTransform=current.getWorldTransform();
      if (parentWorldTransform != null) {
        setWorldTransform(parentWorldTransform,source);
        current=null;
      }
 else {
        current=current.getParent();
      }
    }
  }
 else {
    this.localTransform=(CellTransform)localTransform.clone(null);
    if (parent != null) {
      worldTransform=(CellTransform)localTransform.clone(null);
      worldTransform=worldTransform.mul(parent.getWorldTransform());
      cachedVWBounds=localBounds.clone(cachedVWBounds);
      worldTransform.transform(cachedVWBounds);
      local2VW=null;
    }
 else     if (parent == null) {
      worldTransform=(CellTransform)localTransform.clone(null);
      local2VW=null;
      cachedVWBounds=localBounds.clone(cachedVWBounds);
      worldTransform.transform(cachedVWBounds);
    }
    notifyTransformChangeListeners(source);
  }
  if (cachedVWBounds == null) {
    logger.warning("String_Node_Str" + getName() + "String_Node_Str"+ localBounds+ "String_Node_Str"+ localTransform);
    Thread.dumpStack();
  }
  for (  Cell child : getChildren()) {
    transformTreeUpdate(this,child,source);
  }
  for (  CellRenderer rend : cellRenderers.values()) {
    rend.cellTransformUpdate(localTransform);
  }
}

Fixed version (ground truth):
/** 
 * Set the transform for this cell. Users should not call this method directly, rather MovableComponent should be used, which will keep the client and server in sync.
 * @param localTransform
 */
void setLocalTransform(CellTransform localTransform,TransformChangeListener.ChangeSource source){
  if (this.localTransform != null && this.localTransform.equals(localTransform)) {
    return;
  }
  if (localTransform == null) {
    this.localTransform=null;
    Cell current=getParent();
    while (current != null) {
      CellTransform parentWorldTransform=current.getWorldTransform();
      if (parentWorldTransform != null) {
        setWorldTransform(parentWorldTransform,source);
        current=null;
      }
 else {
        current=current.getParent();
      }
    }
  }
 else {
    this.localTransform=(CellTransform)localTransform.clone(null);
    if (parent != null) {
      worldTransform=(CellTransform)localTransform.clone(null);
      worldTransform=parent.getWorldTransform().mul(worldTransform);
      cachedVWBounds=localBounds.clone(cachedVWBounds);
      worldTransform.transform(cachedVWBounds);
      local2VW=null;
    }
 else     if (parent == null) {
      worldTransform=(CellTransform)localTransform.clone(null);
      local2VW=null;
      cachedVWBounds=localBounds.clone(cachedVWBounds);
      worldTransform.transform(cachedVWBounds);
    }
    notifyTransformChangeListeners(source);
  }
  if (cachedVWBounds == null) {
    logger.warning("String_Node_Str" + getName() + "String_Node_Str"+ localBounds+ "String_Node_Str"+ localTransform);
    Thread.dumpStack();
  }
  for (  Cell child : getChildren()) {
    transformTreeUpdate(this,child,source);
  }
  for (  CellRenderer rend : cellRenderers.values()) {
    rend.cellTransformUpdate(localTransform);
  }
}