Program: 24491
Project: 24491
Buggy source:
public ShapeController(IViewControllerModel viewModel,IShapeNode node,int index){
  super(viewModel,index);
  this.domainNode=node;
  this.parentAttribute=new DrawingElementFacade(this.domainNode.getGraphElement().getParent());
  this.figureController=new ShapeFigureControllerHelper(domainNode.getAttribute());
  figureController.createFigureController();
  shapePropertyChangeListener=new ICanvasAttributeChangeListener(){
    @Override public void propertyChange(    ICanvasAttributePropertyChangeEvent e){
      if (e.getPropertyChange().equals(CanvasAttributePropertyChange.LINE_COLOUR)) {
        figureController.getFigureController().setLineColour((RGB)e.getNewValue());
        figureController.refreshGraphicalAttributes();
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.FILL_COLOUR)) {
        figureController.getFigureController().setFillColour((RGB)e.getNewValue());
        figureController.refreshGraphicalAttributes();
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.LINE_WIDTH)) {
        Double newLineWidth=(Double)e.getNewValue();
        figureController.getFigureController().setLineWidth(newLineWidth);
        figureController.refreshGraphicalAttributes();
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.BOUNDS)) {
        IShapeAttribute attribute=(IShapeAttribute)e.getAttribute();
        Envelope oldDrawnBounds=figureController.getFigureController().getConvexHull().getEnvelope();
        figureController.getFigureController().setRequestedEnvelope(attribute.getBounds());
        figureController.refreshGraphicalAttributes();
        recalculateSrcLinks();
        recalculateTgtLinks();
        notifyDrawnBoundsChanged(oldDrawnBounds,figureController.getFigureController().getConvexHull().getEnvelope());
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.LINE_STYLE)) {
        IShapeAttribute attribute=(IShapeAttribute)e.getAttribute();
        figureController.getFigureController().setLineStyle(attribute.getLineStyle());
        figureController.refreshGraphicalAttributes();
      }
    }
    @Override public void elementTranslated(    ICanvasAttributeTranslationEvent e){
    }
    @Override public void nodeResized(    ICanvasAttributeResizedEvent e){
    }
  }
;
  annotPropChangeListener=new IAnnotationPropertyChangeListener(){
    @Override public void propertyChange(    IAnnotationPropertyChangeEvent e){
      figureController.refreshBoundProperties();
    }
  }
;
  parentDrawingNodePropertyChangeListener=new ICanvasAttributeChangeListener(){
    @Override public void propertyChange(    ICanvasAttributePropertyChangeEvent e){
    }
    @Override public void elementTranslated(    ICanvasAttributeTranslationEvent e){
      domainNode.getAttribute().translate(e.getTranslationDelta());
    }
    @Override public void nodeResized(    ICanvasAttributeResizedEvent e){
    }
  }
;
}

Fixed version (ground truth):
public ShapeController(IViewControllerModel viewModel,IShapeNode node,int index){
  super(viewModel,index);
  this.domainNode=node;
  this.parentAttribute=new DrawingElementFacade(this.domainNode.getGraphElement().getParent());
  this.figureController=new ShapeFigureControllerHelper(domainNode.getAttribute());
  figureController.createFigureController();
  shapePropertyChangeListener=new ICanvasAttributeChangeListener(){
    @Override public void propertyChange(    ICanvasAttributePropertyChangeEvent e){
      if (e.getPropertyChange().equals(CanvasAttributePropertyChange.LINE_COLOUR)) {
        figureController.getFigureController().setLineColour((RGB)e.getNewValue());
        figureController.refreshGraphicalAttributes();
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.FILL_COLOUR)) {
        figureController.getFigureController().setFillColour((RGB)e.getNewValue());
        figureController.refreshGraphicalAttributes();
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.LINE_WIDTH)) {
        Double newLineWidth=(Double)e.getNewValue();
        figureController.getFigureController().setLineWidth(newLineWidth);
        figureController.refreshGraphicalAttributes();
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.BOUNDS)) {
        IShapeAttribute attribute=(IShapeAttribute)e.getAttribute();
        Envelope oldDrawnBounds=figureController.getFigureController().getConvexHull().getEnvelope();
        figureController.getFigureController().setRequestedEnvelope(attribute.getBounds());
        figureController.refreshGraphicalAttributes();
        notifyDrawnBoundsChanged(oldDrawnBounds,figureController.getFigureController().getConvexHull().getEnvelope());
      }
 else       if (e.getPropertyChange().equals(CanvasAttributePropertyChange.LINE_STYLE)) {
        IShapeAttribute attribute=(IShapeAttribute)e.getAttribute();
        figureController.getFigureController().setLineStyle(attribute.getLineStyle());
        figureController.refreshGraphicalAttributes();
      }
    }
    @Override public void elementTranslated(    ICanvasAttributeTranslationEvent e){
    }
    @Override public void nodeResized(    ICanvasAttributeResizedEvent e){
    }
  }
;
  annotPropChangeListener=new IAnnotationPropertyChangeListener(){
    @Override public void propertyChange(    IAnnotationPropertyChangeEvent e){
      figureController.refreshBoundProperties();
    }
  }
;
  parentDrawingNodePropertyChangeListener=new ICanvasAttributeChangeListener(){
    @Override public void propertyChange(    ICanvasAttributePropertyChangeEvent e){
    }
    @Override public void elementTranslated(    ICanvasAttributeTranslationEvent e){
      domainNode.getAttribute().translate(e.getTranslationDelta());
    }
    @Override public void nodeResized(    ICanvasAttributeResizedEvent e){
    }
  }
;
}