Program: 123115
Project: 123115
Buggy source:
public void creatPart(Map<String,String[]> attrsValuesAvailableMap,Map<String,String> attrsToolTipsMap){
  GridData gd=null;
  if ((!nodeData.isHasTreeAttr()) && (!nodeData.isHasChildTreeNode())) {
    Label label=new Label(this,SWT.NONE);
    label.setText(nodeData.getXMLNode().getNodeName() + MARK);
    gd=new GridData();
    gd.horizontalSpan=2;
    label.setLayoutData(gd);
    final Text nodeText=new Text(this,SWT.BORDER | SWT.MULTI | SWT.WRAP);
    gd=new GridData(GridData.FILL_BOTH);
    gd.horizontalSpan=2;
    nodeText.setLayoutData(gd);
    nodeText.setText(nodeData.getBodayText());
    nodeText.addModifyListener(new ModifyListener(){
      public void modifyText(      ModifyEvent e){
        nodeData.getXMLNode().setTextContent(nodeText.getText());
        nodeData.setBodayText(nodeText.getText());
      }
    }
);
  }
 else {
    for (    Object attrName : nodeData.getTreeAttrNames()) {
      final Label attrLabel=new Label(this,SWT.NONE);
      attrLabel.setText(attrName + MARK);
      attrLabel.setLayoutData(new GridData());
      String[] valuesArray=attrsValuesAvailableMap.get(attrName);
      String tooTipsText=attrsToolTipsMap.get(attrName);
      if (valuesArray == null) {
        final Text attrText=new Text(this,SWT.BORDER);
        gd=new GridData(GridData.FILL_HORIZONTAL);
        attrText.setLayoutData(gd);
        if (nodeData.getAttrValue((String)attrName) != null) {
          attrText.setText(nodeData.getAttrValue((String)attrName));
        }
        if (tooTipsText != null) {
          attrText.setToolTipText(tooTipsText);
        }
        attrText.addModifyListener(new ModifyListener(){
          public void modifyText(          ModifyEvent e){
            String attrName=attrLabel.getText().split(MARK)[0];
            if (attrText.getText().equals(PluginConstant.EMPTY_STRING)) {
              ((Element)nodeData.getXMLNode()).removeAttribute(attrName);
              nodeData.removeAttrValue(attrName);
            }
 else {
              ((Element)nodeData.getXMLNode()).setAttribute(attrName,attrText.getText());
              nodeData.putAttrValue(attrName,attrText.getText());
            }
          }
        }
);
      }
 else {
        final Combo attrCombo=new Combo(this,SWT.BORDER);
        gd=new GridData(GridData.FILL_HORIZONTAL);
        attrCombo.setLayoutData(gd);
        attrCombo.setItems(valuesArray);
        String attrValue=nodeData.getAttrValue((String)attrName);
        if (attrValue != null) {
          int index=-1;
          for (int i=0; i < valuesArray.length; i++) {
            if (valuesArray[i].equals(attrValue)) {
              index=i;
              break;
            }
          }
          if (index == -1) {
            attrCombo.setText(attrValue);
          }
 else {
            attrCombo.select(index);
          }
        }
        if (tooTipsText != null) {
          attrCombo.setToolTipText(tooTipsText);
        }
        attrCombo.addModifyListener(new ModifyListener(){
          public void modifyText(          ModifyEvent e){
            String attrName=attrLabel.getText().split(MARK)[0];
            if (attrCombo.getText().equals(PluginConstant.EMPTY_STRING)) {
              ((Element)nodeData.getXMLNode()).removeAttribute(attrName);
              nodeData.removeAttrValue(attrName);
            }
 else {
              ((Element)nodeData.getXMLNode()).setAttribute(attrName,attrCombo.getText());
              nodeData.putAttrValue(attrName,attrCombo.getText());
            }
          }
        }
);
      }
    }
  }
}

Fixed version (ground truth):
public void creatPart(Map<String,String[]> attrsValuesAvailableMap,Map<String,String> attrsToolTipsMap){
  GridData gd=null;
  if ((!nodeData.isHasTreeAttr()) && (!nodeData.isHasChildTreeNode())) {
    Label label=new Label(this,SWT.NONE);
    label.setText(nodeData.getXMLNode().getNodeName() + MARK);
    gd=new GridData();
    gd.horizontalSpan=2;
    label.setLayoutData(gd);
    final Text nodeText=new Text(this,SWT.BORDER | SWT.MULTI | SWT.WRAP| SWT.V_SCROLL);
    gd=new GridData(GridData.FILL_BOTH);
    gd.horizontalSpan=2;
    nodeText.setLayoutData(gd);
    nodeText.setText(nodeData.getBodayText());
    nodeText.addModifyListener(new ModifyListener(){
      public void modifyText(      ModifyEvent e){
        nodeData.getXMLNode().setTextContent(nodeText.getText());
        nodeData.setBodayText(nodeText.getText());
      }
    }
);
  }
 else {
    for (    Object attrName : nodeData.getTreeAttrNames()) {
      final Label attrLabel=new Label(this,SWT.NONE);
      attrLabel.setText(attrName + MARK);
      attrLabel.setLayoutData(new GridData());
      String[] valuesArray=attrsValuesAvailableMap.get(attrName);
      String tooTipsText=attrsToolTipsMap.get(attrName);
      if (valuesArray == null) {
        final Text attrText=new Text(this,SWT.BORDER);
        gd=new GridData(GridData.FILL_HORIZONTAL);
        attrText.setLayoutData(gd);
        if (nodeData.getAttrValue((String)attrName) != null) {
          attrText.setText(nodeData.getAttrValue((String)attrName));
        }
        if (tooTipsText != null) {
          attrText.setToolTipText(tooTipsText);
        }
        attrText.addModifyListener(new ModifyListener(){
          public void modifyText(          ModifyEvent e){
            String attrName=attrLabel.getText().split(MARK)[0];
            if (attrText.getText().equals(PluginConstant.EMPTY_STRING)) {
              ((Element)nodeData.getXMLNode()).removeAttribute(attrName);
              nodeData.removeAttrValue(attrName);
            }
 else {
              ((Element)nodeData.getXMLNode()).setAttribute(attrName,attrText.getText());
              nodeData.putAttrValue(attrName,attrText.getText());
            }
          }
        }
);
      }
 else {
        final Combo attrCombo=new Combo(this,SWT.BORDER);
        gd=new GridData(GridData.FILL_HORIZONTAL);
        attrCombo.setLayoutData(gd);
        attrCombo.setItems(valuesArray);
        String attrValue=nodeData.getAttrValue((String)attrName);
        if (attrValue != null) {
          int index=-1;
          for (int i=0; i < valuesArray.length; i++) {
            if (valuesArray[i].equals(attrValue)) {
              index=i;
              break;
            }
          }
          if (index == -1) {
            attrCombo.setText(attrValue);
          }
 else {
            attrCombo.select(index);
          }
        }
        if (tooTipsText != null) {
          attrCombo.setToolTipText(tooTipsText);
        }
        attrCombo.addModifyListener(new ModifyListener(){
          public void modifyText(          ModifyEvent e){
            String attrName=attrLabel.getText().split(MARK)[0];
            if (attrCombo.getText().equals(PluginConstant.EMPTY_STRING)) {
              ((Element)nodeData.getXMLNode()).removeAttribute(attrName);
              nodeData.removeAttrValue(attrName);
            }
 else {
              ((Element)nodeData.getXMLNode()).setAttribute(attrName,attrCombo.getText());
              nodeData.putAttrValue(attrName,attrCombo.getText());
            }
          }
        }
);
      }
    }
  }
}