Program: 137570
Project: 137570
Buggy source:
/** 
 * DOC yyin Comment method "addValidator".
 */
private void addValidator(){
  setValidator(new ISelectionStatusValidator(){
    public IStatus validate(    Object[] selection){
      IStatus status=new Status(IStatus.OK,CorePlugin.PLUGIN_ID,StringUtils.EMPTY);
      if (selection != null && selection.length > 2) {
        status=new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,DefaultMessagesImpl.getString("String_Node_Str"));
      }
      for (      Object selectObject : selection) {
        if (selectObject instanceof IFile) {
          IFile file=(IFile)selectObject;
          if (FactoriesUtil.DQRULE.equals(file.getFileExtension())) {
            MatchRuleDefinition matchRule=DQRuleResourceFileHelper.getInstance().findMatchRule(file);
            if ((matchRule.getBlockKeys() == null || matchRule.getBlockKeys().size() < 1) && (matchRule.getMatchRules() == null || matchRule.getMatchRules().size() < 1)) {
              status=new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,DefaultMessagesImpl.getString("String_Node_Str"));
              return status;
            }
            String warningMsg=StringUtils.EMPTY;
            if (T_SWOOSH_ALGORITHM.equals(matchRule.getRecordLinkageAlgorithm())) {
              warningMsg=DefaultMessagesImpl.getString("String_Node_Str");
            }
            boolean needColumnWarning=false;
            if (dialogType != MATCHGROUP_TYPE) {
              for (              BlockKeyDefinition bkd : matchRule.getBlockKeys()) {
                for (                String col : inputColumnNames) {
                  if (!col.equalsIgnoreCase(bkd.getColumn()) && !col.equalsIgnoreCase(bkd.getName())) {
                    needColumnWarning=true;
                    break;
                  }
                }
                if (needColumnWarning) {
                  break;
                }
              }
            }
            if (dialogType != GENKEY_TYPE) {
              for (              MatchRule rule : matchRule.getMatchRules()) {
                EList<MatchKeyDefinition> matchKeys=rule.getMatchKeys();
                for (                MatchKeyDefinition mkd : matchKeys) {
                  for (                  String col : inputColumnNames) {
                    if (!col.equalsIgnoreCase(mkd.getColumn()) && !col.equalsIgnoreCase(mkd.getName())) {
                      needColumnWarning=true;
                      break;
                    }
                  }
                  if (needColumnWarning) {
                    break;
                  }
                }
                if (needColumnWarning) {
                  break;
                }
              }
            }
            if (needColumnWarning) {
              warningMsg=DefaultMessagesImpl.getString("String_Node_Str");
            }
            if (!StringUtils.EMPTY.equals(warningMsg)) {
              status=new Status(IStatus.WARNING,CorePlugin.PLUGIN_ID,warningMsg);
            }
          }
        }
      }
      return status;
    }
  }
);
}

Fixed version (ground truth):
/** 
 * DOC yyin Comment method "addValidator".
 */
private void addValidator(){
  setValidator(new ISelectionStatusValidator(){
    public IStatus validate(    Object[] selection){
      IStatus status=new Status(IStatus.OK,CorePlugin.PLUGIN_ID,StringUtils.EMPTY);
      if (selection != null && selection.length > 2) {
        status=new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,DefaultMessagesImpl.getString("String_Node_Str"));
      }
      for (      Object selectObject : selection) {
        if (selectObject instanceof IFile) {
          IFile file=(IFile)selectObject;
          if (FactoriesUtil.DQRULE.equals(file.getFileExtension())) {
            MatchRuleDefinition matchRule=DQRuleResourceFileHelper.getInstance().findMatchRule(file);
            if ((matchRule.getBlockKeys() == null || matchRule.getBlockKeys().size() < 1) && (matchRule.getMatchRules() == null || matchRule.getMatchRules().size() < 1)) {
              status=new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,DefaultMessagesImpl.getString("String_Node_Str"));
              return status;
            }
            String warningMsg=StringUtils.EMPTY;
            if (T_SWOOSH_ALGORITHM.equals(matchRule.getRecordLinkageAlgorithm())) {
              warningMsg=DefaultMessagesImpl.getString("String_Node_Str");
            }
            boolean needColumnWarning=false;
            if (dialogType != MATCHGROUP_TYPE) {
              for (              BlockKeyDefinition bkd : matchRule.getBlockKeys()) {
                boolean hasColumnMatch=false;
                for (                String col : inputColumnNames) {
                  if (col.equalsIgnoreCase(bkd.getColumn()) || col.equalsIgnoreCase(bkd.getName())) {
                    hasColumnMatch=true;
                    break;
                  }
                }
                if (!hasColumnMatch) {
                  needColumnWarning=true;
                  break;
                }
              }
            }
            if (dialogType != GENKEY_TYPE) {
              for (              MatchRule rule : matchRule.getMatchRules()) {
                EList<MatchKeyDefinition> matchKeys=rule.getMatchKeys();
                for (                MatchKeyDefinition mkd : matchKeys) {
                  boolean hasColumnMatch=false;
                  for (                  String col : inputColumnNames) {
                    if (col.equalsIgnoreCase(mkd.getColumn()) || col.equalsIgnoreCase(mkd.getName())) {
                      hasColumnMatch=true;
                      break;
                    }
                  }
                  if (!hasColumnMatch) {
                    needColumnWarning=true;
                    break;
                  }
                }
                if (needColumnWarning) {
                  break;
                }
              }
            }
            if (needColumnWarning) {
              warningMsg=DefaultMessagesImpl.getString("String_Node_Str");
            }
            if (!StringUtils.EMPTY.equals(warningMsg)) {
              status=new Status(IStatus.WARNING,CorePlugin.PLUGIN_ID,warningMsg);
            }
          }
        }
      }
      return status;
    }
  }
);
}