Program: 55813
Project: 55813
Buggy source:
public IAction catchAction(IAction action){
  action=activeContent.catchAction(action);
  EActionType type=action.getActionType();
switch (type) {
case MOVE_TO:
case SET_DOCK:
case SET_TRADING_WAYPOINT:
case SET_WORK_AREA:
    if (activeContent instanceof SelectPointMessage) {
      goBack();
    }
  return action;
case ASK_SET_DOCK:
goBackContent=activeContent;
setContent(new SelectPointMessage(Labels.getString("String_Node_Str")){
@Override public PointAction getSelectAction(ShortPoint2D position){
  return new PointAction(EActionType.SET_DOCK,position);
}
}
);
return null;
case ASK_SET_WORK_AREA:
goBackContent=activeContent;
setContent(new SelectPointMessage(Labels.getString("String_Node_Str")){
@Override public PointAction getSelectAction(ShortPoint2D position){
return new PointAction(EActionType.SET_WORK_AREA,position);
}
}
);
return null;
case ASK_SET_TRADING_WAYPOINT:
goBackContent=activeContent;
final EWaypointType wp=((AskSetTradingWaypointAction)action).getWaypoint();
setContent(new SelectPointMessage(Labels.getString("String_Node_Str" + wp)){
@Override public PointAction getSelectAction(ShortPoint2D position){
return new SetTradingWaypointAction(wp,position);
}
}
);
return null;
case ASK_DESTROY:
goBackContent=activeContent;
setContent(new MessageContent(Labels.getString("String_Node_Str"),Labels.getName(EActionType.DESTROY),new Action(EActionType.DESTROY),Labels.getString("String_Node_Str"),new Action(EActionType.ABORT)){
@Override public boolean isForSelection(){
return true;
}
}
);
return null;
case ABORT:
goBack();
return action;
case EXECUTABLE:
((ExecutableAction)action).execute();
return null;
default :
return action;
}
}

Fixed version (ground truth):
public synchronized IAction catchAction(IAction action){
  action=activeContent.catchAction(action);
  EActionType type=action.getActionType();
switch (type) {
case MOVE_TO:
case SET_DOCK:
case SET_TRADING_WAYPOINT:
case SET_WORK_AREA:
    if (activeContent instanceof SelectPointMessage) {
      goBack();
    }
  return action;
case ASK_SET_DOCK:
goBackContent=activeContent;
setContent(new SelectPointMessage(Labels.getString("String_Node_Str")){
@Override public PointAction getSelectAction(ShortPoint2D position){
  return new PointAction(EActionType.SET_DOCK,position);
}
}
);
return null;
case ASK_SET_WORK_AREA:
goBackContent=activeContent;
setContent(new SelectPointMessage(Labels.getString("String_Node_Str")){
@Override public PointAction getSelectAction(ShortPoint2D position){
return new PointAction(EActionType.SET_WORK_AREA,position);
}
}
);
return null;
case ASK_SET_TRADING_WAYPOINT:
goBackContent=activeContent;
final EWaypointType wp=((AskSetTradingWaypointAction)action).getWaypoint();
setContent(new SelectPointMessage(Labels.getString("String_Node_Str" + wp)){
@Override public PointAction getSelectAction(ShortPoint2D position){
return new SetTradingWaypointAction(wp,position);
}
}
);
return null;
case ASK_DESTROY:
goBackContent=activeContent;
setContent(new MessageContent(Labels.getString("String_Node_Str"),Labels.getName(EActionType.DESTROY),new Action(EActionType.DESTROY),Labels.getString("String_Node_Str"),new Action(EActionType.ABORT)){
@Override public boolean isForSelection(){
return true;
}
}
);
return null;
case ABORT:
goBack();
return action;
case EXECUTABLE:
((ExecutableAction)action).execute();
return null;
default :
return action;
}
}