Program: 85510
Project: 85510
Buggy source:
private List<MatchMetaData> discoverAgainstSingleModel(final IDBFactory factory,final Properties dataDiscoveryProperties,final Set<String> tables,final Model model,final double probabilityThreshold) throws AnonymizerException, ParseException {
  final IMetaData metaData=factory.fetchMetaData();
  final List<MatchMetaData> map=metaData.getMetaData();
  matches=new ArrayList<>();
  MatchMetaData specialCaseData=null;
  boolean specialCase=false;
  final String extentionList=dataDiscoveryProperties.getProperty("String_Node_Str");
  String[] specialCaseFunctions=null;
  if (!CommonUtils.isEmptyString(extentionList)) {
    specialCaseFunctions=extentionList.split("String_Node_Str");
    if (specialCaseFunctions != null && specialCaseFunctions.length > 0) {
      specialCase=true;
    }
  }
  final ISQLBuilder sqlBuilder=factory.createSQLBuilder();
  List<Probability> probabilityList;
  for (  final MatchMetaData data : map) {
    final String tableName=data.getTableName();
    final String columnName=data.getColumnName();
    log.debug(data.getColumnType());
    probabilityList=new ArrayList<>();
    log.info("String_Node_Str" + tableName + "String_Node_Str"+ columnName+ "String_Node_Str");
    if (!tables.isEmpty() && !tables.contains(tableName.toLowerCase(Locale.ENGLISH))) {
      log.debug("String_Node_Str");
      continue;
    }
    final String tableNamePattern=dataDiscoveryProperties.getProperty("String_Node_Str");
    if (!CommonUtils.isEmptyString(tableNamePattern)) {
      final Pattern p=compile(tableNamePattern);
      if (!p.matcher(tableName).matches()) {
        continue;
      }
    }
    final String table=sqlBuilder.prefixSchema(tableName);
    final int limit=Integer.parseInt(dataDiscoveryProperties.getProperty("String_Node_Str"));
    final String query=sqlBuilder.buildSelectWithLimit("String_Node_Str" + columnName + "String_Node_Str"+ "String_Node_Str"+ table+ "String_Node_Str"+ columnName+ "String_Node_Str",limit);
    log.debug("String_Node_Str" + query);
    try (Statement stmt=factory.getConnection().createStatement();ResultSet resultSet=stmt.executeQuery(query)){
      while (resultSet.next()) {
        if (data.getColumnType().equals("String_Node_Str") || data.getColumnType().equals("String_Node_Str")) {
          continue;
        }
        if (model.getName().equals("String_Node_Str") && data.getColumnType().contains("String_Node_Str")) {
          continue;
        }
        final String sentence=resultSet.getString(1);
        if (specialCase) {
          try {
            for (int i=0; i < specialCaseFunctions.length; i++) {
              if (sentence != null && !sentence.equals("String_Node_Str")) {
                specialCaseData=(MatchMetaData)callExtention(specialCaseFunctions[i],data,sentence);
              }
            }
          }
 catch (          NoSuchMethodException|IllegalAccessException|InvocationTargetException e) {
            log.error(e.toString());
          }
        }
        if (sentence != null && !sentence.isEmpty()) {
          String processingValue="String_Node_Str";
          if (data.getColumnType().equals("String_Node_Str") || data.getColumnType().equals("String_Node_Str") || data.getColumnType().equals("String_Node_Str")) {
            final DateFormat originalFormat=new SimpleDateFormat(sentence,Locale.ENGLISH);
            final DateFormat targetFormat=new SimpleDateFormat("String_Node_Str",Locale.ENGLISH);
            final java.util.Date date=originalFormat.parse(sentence);
            processingValue=targetFormat.format(date);
          }
 else {
            processingValue=sentence;
          }
          final String tokens[]=model.getTokenizer().tokenize(processingValue);
          final Span nameSpans[]=model.getNameFinder().find(tokens);
          final double[] spanProbs=model.getNameFinder().probs(nameSpans);
          for (int i=0; i < nameSpans.length; i++) {
            final String span=nameSpans[i].toString();
            if (span.length() > 2) {
              log.debug("String_Node_Str" + span);
              log.debug("String_Node_Str" + tokens[nameSpans[i].getStart()]);
              log.debug("String_Node_Str" + spanProbs[i]);
              probabilityList.add(new Probability(tokens[nameSpans[i].getStart()],spanProbs[i]));
            }
          }
          model.getNameFinder().clearAdaptiveData();
        }
      }
    }
 catch (    SQLException sqle) {
      log.error(sqle.toString());
    }
    final double averageProbability=calculateAverage(probabilityList);
    if ((averageProbability >= probabilityThreshold)) {
      data.setAverageProbability(averageProbability);
      data.setModel(model.getName());
      data.setProbabilityList(probabilityList);
      matches.add(data);
    }
    if (specialCase && specialCaseData != null) {
      matches.add(specialCaseData);
      specialCaseData=null;
    }
  }
  return matches;
}

Fixed version (ground truth):
private List<MatchMetaData> discoverAgainstSingleModel(final IDBFactory factory,final Properties dataDiscoveryProperties,final Set<String> tables,final Model model,final double probabilityThreshold) throws AnonymizerException, ParseException {
  final IMetaData metaData=factory.fetchMetaData();
  final List<MatchMetaData> map=metaData.getMetaData();
  matches=new ArrayList<>();
  MatchMetaData specialCaseData=null;
  List<MatchMetaData> specialCaseDataList=new ArrayList();
  boolean specialCase=false;
  final String extentionList=dataDiscoveryProperties.getProperty("String_Node_Str");
  String[] specialCaseFunctions=null;
  if (!CommonUtils.isEmptyString(extentionList)) {
    specialCaseFunctions=extentionList.split("String_Node_Str");
    if (specialCaseFunctions != null && specialCaseFunctions.length > 0) {
      specialCase=true;
    }
  }
  final ISQLBuilder sqlBuilder=factory.createSQLBuilder();
  List<Probability> probabilityList;
  for (  final MatchMetaData data : map) {
    final String tableName=data.getTableName();
    final String columnName=data.getColumnName();
    log.debug(data.getColumnType());
    probabilityList=new ArrayList<>();
    log.info("String_Node_Str" + tableName + "String_Node_Str"+ columnName+ "String_Node_Str");
    if (!tables.isEmpty() && !tables.contains(tableName.toLowerCase(Locale.ENGLISH))) {
      log.debug("String_Node_Str");
      continue;
    }
    final String tableNamePattern=dataDiscoveryProperties.getProperty("String_Node_Str");
    if (!CommonUtils.isEmptyString(tableNamePattern)) {
      final Pattern p=compile(tableNamePattern);
      if (!p.matcher(tableName).matches()) {
        continue;
      }
    }
    final String table=sqlBuilder.prefixSchema(tableName);
    final int limit=Integer.parseInt(dataDiscoveryProperties.getProperty("String_Node_Str"));
    final String query=sqlBuilder.buildSelectWithLimit("String_Node_Str" + columnName + "String_Node_Str"+ "String_Node_Str"+ table+ "String_Node_Str"+ columnName+ "String_Node_Str",limit);
    log.debug("String_Node_Str" + query);
    try (Statement stmt=factory.getConnection().createStatement();ResultSet resultSet=stmt.executeQuery(query)){
      while (resultSet.next()) {
        if (data.getColumnType().equals("String_Node_Str") || data.getColumnType().equals("String_Node_Str")) {
          continue;
        }
        if (model.getName().equals("String_Node_Str") && data.getColumnType().contains("String_Node_Str")) {
          continue;
        }
        final String sentence=resultSet.getString(1);
        if (specialCase) {
          try {
            for (int i=0; i < specialCaseFunctions.length; i++) {
              if (sentence != null && !sentence.equals("String_Node_Str")) {
                specialCaseData=(MatchMetaData)callExtention(specialCaseFunctions[i],data,sentence);
                if (specialCaseData != null) {
                  log.info("String_Node_Str" + specialCaseData.toString());
                  specialCaseDataList.add(specialCaseData);
                }
              }
            }
          }
 catch (          NoSuchMethodException|IllegalAccessException|InvocationTargetException e) {
            log.error(e.toString());
          }
        }
        if (sentence != null && !sentence.isEmpty()) {
          String processingValue="String_Node_Str";
          if (data.getColumnType().equals("String_Node_Str") || data.getColumnType().equals("String_Node_Str") || data.getColumnType().equals("String_Node_Str")) {
            final DateFormat originalFormat=new SimpleDateFormat(sentence,Locale.ENGLISH);
            final DateFormat targetFormat=new SimpleDateFormat("String_Node_Str",Locale.ENGLISH);
            final java.util.Date date=originalFormat.parse(sentence);
            processingValue=targetFormat.format(date);
          }
 else {
            processingValue=sentence;
          }
          final String tokens[]=model.getTokenizer().tokenize(processingValue);
          final Span nameSpans[]=model.getNameFinder().find(tokens);
          final double[] spanProbs=model.getNameFinder().probs(nameSpans);
          for (int i=0; i < nameSpans.length; i++) {
            final String span=nameSpans[i].toString();
            if (span.length() > 2) {
              log.debug("String_Node_Str" + span);
              log.debug("String_Node_Str" + tokens[nameSpans[i].getStart()]);
              log.debug("String_Node_Str" + spanProbs[i]);
              probabilityList.add(new Probability(tokens[nameSpans[i].getStart()],spanProbs[i]));
            }
          }
          model.getNameFinder().clearAdaptiveData();
        }
      }
    }
 catch (    SQLException sqle) {
      log.error(sqle.toString());
    }
    final double averageProbability=calculateAverage(probabilityList);
    if ((averageProbability >= probabilityThreshold)) {
      data.setAverageProbability(averageProbability);
      data.setModel(model.getName());
      data.setProbabilityList(probabilityList);
      matches.add(data);
    }
  }
  if (specialCaseDataList != null && !specialCaseDataList.isEmpty()) {
    log.info("String_Node_Str" + specialCaseDataList.toString());
    for (    MatchMetaData specialData : specialCaseDataList) {
      matches.add(specialData);
    }
  }
  return matches;
}