Program: 119220
Project: 119220
Buggy source:
@Override public void refreshNode(final IProcessMessage psMess){
  Display.getDefault().asyncExec(new Runnable(){
    public void run(){
      if (processContext == null) {
        return;
      }
      org.talend.core.model.process.IProcess process=processContext.getProcess();
      if (process == null) {
        return;
      }
      List<INode> nodeList=(List<INode>)process.getGraphicalNodes();
      for (      INode inode : nodeList) {
        if (!inode.isActivate()) {
          continue;
        }
        String nodeUniqueName=inode.getUniqueName();
        if (LanguageManager.getCurrentLanguage().equals(ECodeLanguage.PERL) && Problems.nodeList.size() > 0) {
          errorMessMap.clear();
        }
        if (errorMessMap.get(nodeUniqueName) != null) {
          if (inode instanceof Node) {
            IProcessMessage messPro=errorMessMap.get(nodeUniqueName);
            Node node=(Node)inode;
            node.setErrorFlag(true);
            node.setCompareFlag(false);
            node.setErrorInfo(messPro.getContent());
            node.getNodeError().updateState("String_Node_Str",true);
            if (node.isFileScaleComponent()) {
              refreshProgress(psMess,node,nodeUniqueName);
            }
            node.setErrorInfoChange("String_Node_Str",true);
          }
        }
 else {
          if (inode instanceof Node) {
            Node node=(Node)inode;
            if (Problems.nodeList.size() > 0) {
              String befor="String_Node_Str";
              Iterator<Entry<Node,StringBuffer>> set=Problems.nodeList.entrySet().iterator();
              while (set.hasNext()) {
                Entry<Node,StringBuffer> en=set.next();
                Node no=en.getKey();
                String des=en.getValue().toString();
                if (node == no) {
                  node.setErrorFlag(true);
                  node.setCompareFlag(false);
                  node.setErrorInfo(befor + des);
                  node.getNodeError().updateState("String_Node_Str",false);
                  node.setErrorInfoChange("String_Node_Str",true);
                }
              }
            }
 else {
              if (node.isErrorFlag() == true) {
                node.setErrorFlag(false);
                node.setCompareFlag(false);
                node.setErrorInfo(null);
                node.getNodeError().updateState("String_Node_Str",false);
              }
              if (node.isFileScaleComponent()) {
                refreshProgress(psMess,node,nodeUniqueName);
              }
              if (node.isErrorFlag() == true) {
                node.setErrorInfoChange("String_Node_Str",false);
              }
            }
          }
        }
      }
    }
  }
);
}

Fixed version (ground truth):
@Override public void refreshNode(final IProcessMessage psMess){
  Display.getDefault().asyncExec(new Runnable(){
    @Override public void run(){
      if (processContext == null) {
        return;
      }
      org.talend.core.model.process.IProcess process=processContext.getProcess();
      if (process == null) {
        return;
      }
      List<INode> nodeList=(List<INode>)process.getGraphicalNodes();
      for (      INode inode : nodeList) {
        if (!inode.isActivate()) {
          continue;
        }
        String nodeUniqueName=inode.getUniqueName();
        if (LanguageManager.getCurrentLanguage().equals(ECodeLanguage.PERL) && Problems.nodeList.size() > 0) {
          errorMessMap.clear();
        }
        if (errorMessMap.get(nodeUniqueName) != null) {
          if (inode instanceof Node) {
            IProcessMessage messPro=errorMessMap.get(nodeUniqueName);
            Node node=(Node)inode;
            node.setErrorFlag(true);
            node.setCompareFlag(false);
            node.setErrorInfo(messPro.getContent());
            node.getNodeError().updateState("String_Node_Str",true);
            if (node.isFileScaleComponent()) {
              refreshProgress(psMess,node,nodeUniqueName);
            }
            node.setErrorInfoChange("String_Node_Str",true);
          }
        }
 else {
          if (inode instanceof Node) {
            Node node=(Node)inode;
            if (Problems.nodeList.size() > 0) {
              String befor="String_Node_Str";
              Iterator<Entry<Node,StringBuffer>> set=Problems.nodeList.entrySet().iterator();
              while (set.hasNext()) {
                Entry<Node,StringBuffer> en=set.next();
                Node no=en.getKey();
                String des=en.getValue().toString();
                if (node == no) {
                  node.setErrorFlag(true);
                  node.setCompareFlag(false);
                  node.setErrorInfo(befor + des);
                  node.getNodeError().updateState("String_Node_Str",false);
                  node.setErrorInfoChange("String_Node_Str",true);
                }
              }
            }
 else {
              if (node.isErrorFlag() == true) {
                node.setErrorFlag(false);
                node.setCompareFlag(false);
                node.setErrorInfo(null);
                node.getNodeError().updateState("String_Node_Str",false);
              }
              if (node.isFileScaleComponent()) {
                refreshProgress(psMess,node,nodeUniqueName);
              }
              if (node.isErrorFlag() == true) {
                node.setErrorInfoChange("String_Node_Str",false);
              }
            }
          }
        }
      }
    }
  }
);
}