Program: 18376
Project: 18376
Buggy source:
/** 
 * Creates a new XMINode
 * @param node the XMI node
 * @param root the XMI root node
 * @param ignoreID <tt>true</tt>, to enable ignore mode
 * @param copyMode <tt>true</tt>, to enable copyMode
 */
public XMINode(Node node,Element root,boolean ignoreID,boolean copyMode){
  super(node.getNodeName(),"String_Node_Str");
  this.root=root;
  this.node=node;
  this.ignoreID=ignoreID;
  this.copyMode=copyMode;
  String name="String_Node_Str";
  String type="String_Node_Str";
  String id="String_Node_Str";
  String ref="String_Node_Str";
  type=node.getNodeName();
  NamedNodeMap map=node.getAttributes();
  if (map != null) {
    for (int i=0; i < map.getLength(); i++) {
      Node subNode=map.item(i);
      String nodeName=subNode.getNodeName();
      String nodeValue=subNode.getNodeValue();
      if (nodeName.equals("String_Node_Str")) {
        id=nodeValue;
      }
 else       if (nodeName.equals("String_Node_Str")) {
        ref=nodeValue;
      }
 else       if (nodeName.equals("String_Node_Str")) {
        name=nodeValue;
      }
 else {
        setNodeAttribute(nodeName,nodeValue);
      }
    }
    if (copyMode) {
      if (!id.isEmpty()) {
        setNodeAttribute("String_Node_Str",id);
        setName(id);
      }
      if (!name.isEmpty()) {
        setNodeAttribute("String_Node_Str",name);
      }
      if (!ref.isEmpty()) {
        setNodeAttribute("String_Node_Str",type + IdToElement(ref,type));
      }
    }
 else {
      if (name.equals("String_Node_Str")) {
        if (!id.equals("String_Node_Str")) {
          if (!ignoreID) {
            setNodeAttribute("String_Node_Str",id);
            setName(id);
          }
        }
      }
 else {
        setName(name);
        setNodeAttribute("String_Node_Str",name);
        if (type.equals("String_Node_Str") | type.equals("String_Node_Str") | type.equals("String_Node_Str")) {
        }
 else         if (ignoreID) {
        }
 else         if (!id.equals("String_Node_Str")) {
          setNodeAttribute("String_Node_Str",type + name);
        }
      }
      if (!ref.equals("String_Node_Str")) {
        String newRef=IdToElement(ref,type);
        if (newRef.equals("String_Node_Str")) {
          setNodeAttribute("String_Node_Str",ref);
        }
 else {
          setNodeAttribute("String_Node_Str",type + newRef);
        }
      }
    }
    if (type.equals("String_Node_Str") || type.equals("String_Node_Str")) {
      setName("String_Node_Str");
    }
    if (type.equals("String_Node_Str") || type.equals("String_Node_Str")) {
      this.ignoreID=true;
    }
    if (type.equals("String_Node_Str")) {
      this.copyMode=true;
    }
  }
}

Fixed version (ground truth):
/** 
 * Creates a new XMINode
 * @param node the XMI node
 * @param root the XMI root node
 * @param ignoreID <tt>true</tt>, to enable ignore mode
 * @param copyMode <tt>true</tt>, to enable copyMode
 */
public XMINode(Node node,Element root,boolean ignoreID,boolean copyMode){
  super(node.getNodeName(),"String_Node_Str");
  this.root=root;
  this.node=node;
  this.ignoreID=ignoreID;
  this.copyMode=copyMode;
  String name="String_Node_Str";
  String type="String_Node_Str";
  String id="String_Node_Str";
  String ref="String_Node_Str";
  type=node.getNodeName();
  NamedNodeMap map=node.getAttributes();
  if (map != null) {
    for (int i=0; i < map.getLength(); i++) {
      Node subNode=map.item(i);
      String nodeName=subNode.getNodeName();
      String nodeValue=subNode.getNodeValue();
      if (nodeName.equals("String_Node_Str")) {
        id=nodeValue;
      }
 else       if (nodeName.equals("String_Node_Str")) {
        ref=nodeValue;
      }
 else       if (nodeName.equals("String_Node_Str")) {
        name=nodeValue;
      }
 else {
        setNodeAttribute(nodeName,nodeValue);
      }
    }
    if (copyMode) {
      if (!id.isEmpty()) {
        setNodeAttribute("String_Node_Str",id);
        setName(id);
      }
      if (!name.isEmpty()) {
        setNodeAttribute("String_Node_Str",name);
      }
      if (!ref.isEmpty()) {
        setNodeAttribute("String_Node_Str",type + IdToElement(ref,type));
      }
    }
 else {
      if (name.equals("String_Node_Str")) {
        if (!id.equals("String_Node_Str")) {
          if (!ignoreID) {
            setNodeAttribute("String_Node_Str",id);
            setName(id);
          }
        }
      }
 else {
        setName(name);
        setNodeAttribute("String_Node_Str",name);
        if (type.equals("String_Node_Str") || type.equals("String_Node_Str") || type.equals("String_Node_Str")) {
        }
 else         if (ignoreID) {
        }
 else         if (!id.equals("String_Node_Str")) {
          setNodeAttribute("String_Node_Str",type + name);
        }
      }
      if (!ref.equals("String_Node_Str")) {
        String newRef=IdToElement(ref,type);
        if (newRef.equals("String_Node_Str")) {
          setNodeAttribute("String_Node_Str",ref);
        }
 else {
          setNodeAttribute("String_Node_Str",type + newRef);
        }
      }
    }
    if (type.equals("String_Node_Str") || type.equals("String_Node_Str")) {
      setName("String_Node_Str");
    }
    if (type.equals("String_Node_Str") || type.equals("String_Node_Str")) {
      this.ignoreID=true;
    }
    if (type.equals("String_Node_Str")) {
      this.copyMode=true;
    }
  }
}