Program: 123185
Project: 123185
Buggy source:
/** 
 * DOC zli Comment method "modifyCommand".
 * @param event
 * @return
 */
private Command modifyCommand(ModifyEvent event){
  Set<String> elementsName;
  Control ctrl;
  elementsName=hashCurControls.keySet();
  for (  String name : elementsName) {
    Object o=hashCurControls.get(name);
    if (o instanceof Control) {
      ctrl=(Control)o;
      if (ctrl == null) {
        hashCurControls.remove(name);
        return null;
      }
      CCombo combo=(CCombo)event.getSource();
      Object data=ctrl.getData(PARAMETER_NAME);
      if (!(ctrl instanceof CCombo)) {
        continue;
      }
      boolean isDisposed=((CCombo)ctrl).isDisposed() || combo.isDisposed();
      if (isDisposed) {
        continue;
      }
      String paramName="String_Node_Str";
      if (data != null) {
        paramName=data.toString();
      }
      String value="String_Node_Str";
      if (data != null && data.equals(combo.getData(PARAMETER_NAME))) {
        for (int i=0; i < elem.getElementParameters().size(); i++) {
          IElementParameter param=elem.getElementParameters().get(i);
          if (param.getFieldType().equals(EParameterFieldType.OPENED_LIST) && paramName.equals(param.getName())) {
            String text=((CCombo)ctrl).getText();
            String[] listItemsDisplayName=param.getListItemsDisplayName();
            boolean valueSet=false;
            Object[] listItemsValue=param.getListItemsValue();
            for (int j=0; j < listItemsValue.length; j++) {
              if (j < listItemsDisplayName.length && text.equals(listItemsDisplayName[j])) {
                value=(String)listItemsValue[j];
                valueSet=true;
                break;
              }
            }
            if (!valueSet) {
              value=text;
            }
            param.setValue(value);
          }
        }
        return new PropertyChangeCommand(elem,paramName,value);
      }
    }
  }
  return null;
}

Fixed version (ground truth):
/** 
 * DOC zli Comment method "modifyCommand".
 * @param event
 * @return
 */
private Command modifyCommand(ModifyEvent event){
  Set<String> elementsName;
  Control ctrl;
  elementsName=hashCurControls.keySet();
  for (  String name : elementsName) {
    Object o=hashCurControls.get(name);
    if (o instanceof Control) {
      ctrl=(Control)o;
      if (ctrl == null) {
        hashCurControls.remove(name);
        return null;
      }
      CCombo combo=(CCombo)event.getSource();
      Object data=ctrl.getData(PARAMETER_NAME);
      if (!(ctrl instanceof CCombo)) {
        continue;
      }
      boolean isDisposed=((CCombo)ctrl).isDisposed() || combo.isDisposed();
      if (isDisposed) {
        continue;
      }
      String paramName="String_Node_Str";
      if (data != null) {
        paramName=data.toString();
      }
      String value="String_Node_Str";
      if (data != null && data.equals(combo.getData(PARAMETER_NAME))) {
        for (int i=0; i < elem.getElementParameters().size(); i++) {
          IElementParameter param=elem.getElementParameters().get(i);
          if (param.getFieldType().equals(EParameterFieldType.OPENED_LIST) && paramName.equals(param.getName())) {
            String text=((CCombo)ctrl).getText();
            String[] listItemsDisplayName=param.getListItemsDisplayName();
            boolean valueSet=false;
            Object[] listItemsValue=param.getListItemsValue();
            for (int j=0; j < listItemsValue.length; j++) {
              if (j < listItemsDisplayName.length && text.equals(listItemsDisplayName[j])) {
                value=(String)listItemsValue[j];
                valueSet=true;
                break;
              }
            }
            if (!valueSet) {
              value=text;
            }
            if (value != null && value.equals(param.getValue())) {
              return null;
            }
            param.setValue(value);
          }
        }
        return new PropertyChangeCommand(elem,paramName,value);
      }
    }
  }
  return null;
}