Program: 76958
Project: 76958
Buggy source:
protected void addDragAndDropListener(){
  int ops=DND.DROP_MOVE | DND.DROP_COPY;
  Transfer[] transfers=new Transfer[]{TemplateTransfer.getInstance()};
  getTreeViewer().addDragSupport(ops,transfers,new DesignerDragListener(getTreeViewer()));
  transfers=new Transfer[]{TemplateTransfer.getInstance()};
  DesignerDropListener dropListener=new LibraryDropListener(getTreeViewer());
  dropListener.addDropConstraint(CascadingParameterGroupHandle.class,new IDropConstraint(){
    public int validate(    Object transfer,    Object target){
      return RESULT_NO;
    }
  }
);
  dropListener.addDropConstraint(ScalarParameterHandle.class,new IDropConstraint(){
    public int validate(    Object transfer,    Object target){
      if (target instanceof ScalarParameterHandle) {
        ScalarParameterHandle targetParameter=(ScalarParameterHandle)target;
        if (targetParameter.getContainer() instanceof CascadingParameterGroupHandle)         return RESULT_NO;
      }
      return RESULT_UNKNOW;
    }
  }
);
  IDropConstraint cascadingParameterGroupChildrenConstraint=new IDropConstraint(){
    public int validate(    Object transfer,    Object target){
      if (transfer instanceof Object[] && ((Object[])transfer).length > 0 && ((Object[])transfer)[0] instanceof ScalarParameterHandle) {
        ScalarParameterHandle transferParameter=(ScalarParameterHandle)((Object[])transfer)[0];
        if (transferParameter.getContainer() instanceof CascadingParameterGroupHandle)         return RESULT_NO;
      }
      return RESULT_UNKNOW;
    }
  }
;
  dropListener.addDropConstraint(ScalarParameterHandle.class,cascadingParameterGroupChildrenConstraint);
  dropListener.addDropConstraint(ParameterGroupHandle.class,cascadingParameterGroupChildrenConstraint);
  dropListener.addDropConstraint(ReportElementModel.class,cascadingParameterGroupChildrenConstraint);
  getTreeViewer().addDropSupport(ops,transfers,dropListener);
}

Fixed version (ground truth):
protected void addDragAndDropListener(){
  int ops=DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
  Transfer[] transfers=new Transfer[]{TemplateTransfer.getInstance()};
  getTreeViewer().addDragSupport(ops,transfers,new DesignerDragListener(getTreeViewer()));
  transfers=new Transfer[]{TemplateTransfer.getInstance()};
  DesignerDropListener dropListener=new LibraryDropListener(getTreeViewer());
  dropListener.addDropConstraint(CascadingParameterGroupHandle.class,new IDropConstraint(){
    public int validate(    Object transfer,    Object target){
      return RESULT_NO;
    }
  }
);
  dropListener.addDropConstraint(ScalarParameterHandle.class,new IDropConstraint(){
    public int validate(    Object transfer,    Object target){
      if (target instanceof ScalarParameterHandle) {
        ScalarParameterHandle targetParameter=(ScalarParameterHandle)target;
        if (targetParameter.getContainer() instanceof CascadingParameterGroupHandle)         return RESULT_NO;
      }
      return RESULT_UNKNOW;
    }
  }
);
  IDropConstraint cascadingParameterGroupChildrenConstraint=new IDropConstraint(){
    public int validate(    Object transfer,    Object target){
      if (transfer instanceof Object[] && ((Object[])transfer).length > 0 && ((Object[])transfer)[0] instanceof ScalarParameterHandle) {
        ScalarParameterHandle transferParameter=(ScalarParameterHandle)((Object[])transfer)[0];
        if (transferParameter.getContainer() instanceof CascadingParameterGroupHandle)         return RESULT_NO;
      }
      return RESULT_UNKNOW;
    }
  }
;
  dropListener.addDropConstraint(ScalarParameterHandle.class,cascadingParameterGroupChildrenConstraint);
  dropListener.addDropConstraint(ParameterGroupHandle.class,cascadingParameterGroupChildrenConstraint);
  dropListener.addDropConstraint(ReportElementModel.class,cascadingParameterGroupChildrenConstraint);
  getTreeViewer().addDropSupport(ops,transfers,dropListener);
}