Program: 168112
Project: 168112
Buggy source:
@SuppressWarnings("String_Node_Str") public static void saveCorpus(Corpus corpus){
  String corpusName=corpus.getCorpusName();
  String corpusLocation=rootDir + corpusName;
  if (!(new File(corpusLocation).exists())) {
    new File(corpusLocation).mkdir();
    String metaFile=corpusLocation + System.getProperty("String_Node_Str") + "String_Node_Str";
    File metaFp=new File(metaFile);
    JSONObject jsonObj=new JSONObject();
    jsonObj.put("String_Node_Str",corpus.getCorpusName());
    jsonObj.put("String_Node_Str",corpus.getCorpusId());
    jsonObj.put("String_Node_Str",corpus.getDatatype().toString());
    jsonObj.put("String_Node_Str",corpus.getClasses().size());
    int numClasses=corpus.getClasses().size();
    ArrayList<ICorpusClass> corporaClasses=(ArrayList<ICorpusClass>)corpus.getClasses();
    JSONArray classArray=new JSONArray();
    for (int i=0; i < numClasses; i++) {
      CorpusClass currClass=(CorpusClass)corporaClasses.get(i);
      JSONObject classObj=new JSONObject();
      classObj.put("String_Node_Str",currClass.getClassName());
      classObj.put("String_Node_Str",currClass.getClassPath());
      classObj.put("String_Node_Str",corpusLocation + System.getProperty("String_Node_Str") + currClass.getClassName());
      classObj.put("String_Node_Str",currClass.getKeyTextFields());
      classArray.add(classObj);
    }
    jsonObj.put("String_Node_Str",classArray);
    jsonObj.put("String_Node_Str",0);
    JSONArray analysisArray=new JSONArray();
    jsonObj.put("String_Node_Str",analysisArray);
    try {
      FileOutputStream bw=new FileOutputStream(metaFp);
      bw.write(jsonObj.toString().getBytes());
      bw.flush();
      bw.close();
    }
 catch (    IOException e) {
      e.printStackTrace();
    }
    copyCorpus(jsonObj);
  }
 else {
    String metaFile=corpusLocation + System.getProperty("String_Node_Str") + "String_Node_Str";
    JSONArray analysisArray=new JSONArray();
    int numAnalysis=0;
    if (!new File(metaFile).exists()) {
      JSONParser parser=new JSONParser();
      try {
        analysisArray=(JSONArray)((JSONObject)parser.parse(new FileReader(metaFile))).get("String_Node_Str");
        numAnalysis=(Integer)((JSONObject)parser.parse(new FileReader(metaFile))).get("String_Node_Str");
      }
 catch (      FileNotFoundException e) {
        e.printStackTrace();
      }
catch (      IOException e) {
        e.printStackTrace();
      }
catch (      ParseException e) {
        e.printStackTrace();
      }
    }
    File metaFp=new File(metaFile);
    JSONObject jsonObj=new JSONObject();
    jsonObj.put("String_Node_Str",corpus.getCorpusName());
    jsonObj.put("String_Node_Str",corpus.getCorpusId());
    jsonObj.put("String_Node_Str",corpus.getDatatype().toString());
    jsonObj.put("String_Node_Str",corpus.getClasses().size());
    int numClasses=corpus.getClasses().size();
    ArrayList<ICorpusClass> corporaClasses=(ArrayList<ICorpusClass>)corpus.getClasses();
    JSONArray classArray=new JSONArray();
    for (int i=0; i < numClasses; i++) {
      CorpusClass currClass=(CorpusClass)corporaClasses.get(i);
      JSONObject classObj=new JSONObject();
      classObj.put("String_Node_Str",currClass.getClassName());
      classObj.put("String_Node_Str",currClass.getClassPath());
      classObj.put("String_Node_Str",corpusLocation + System.getProperty("String_Node_Str") + currClass.getClassName());
      classObj.put("String_Node_Str",currClass.getKeyTextFields());
      classArray.add(classObj);
    }
    jsonObj.put("String_Node_Str",classArray);
    jsonObj.put("String_Node_Str",numAnalysis);
    jsonObj.put("String_Node_Str",analysisArray);
    try {
      FileOutputStream bw=new FileOutputStream(metaFp);
      bw.write(jsonObj.toString().getBytes());
      bw.flush();
      bw.close();
    }
 catch (    IOException e) {
      e.printStackTrace();
    }
    copyCorpus(jsonObj);
    removeCorpus(corpus,false);
  }
}

Fixed version (ground truth):
@SuppressWarnings("String_Node_Str") public static void saveCorpus(Corpus corpus){
  String corpusName=corpus.getCorpusName();
  String corpusLocation=rootDir + corpusName;
  if (!(new File(corpusLocation).exists())) {
    new File(corpusLocation).mkdir();
    String metaFile=corpusLocation + System.getProperty("String_Node_Str") + "String_Node_Str";
    File metaFp=new File(metaFile);
    JSONObject jsonObj=new JSONObject();
    jsonObj.put("String_Node_Str",corpus.getCorpusName());
    jsonObj.put("String_Node_Str",corpus.getCorpusId());
    jsonObj.put("String_Node_Str",corpus.getDatatype().toString());
    jsonObj.put("String_Node_Str",corpus.getClasses().size());
    int numClasses=corpus.getClasses().size();
    ArrayList<ICorpusClass> corporaClasses=(ArrayList<ICorpusClass>)corpus.getClasses();
    JSONArray classArray=new JSONArray();
    for (int i=0; i < numClasses; i++) {
      CorpusClass currClass=(CorpusClass)corporaClasses.get(i);
      JSONObject classObj=new JSONObject();
      classObj.put("String_Node_Str",currClass.getClassName());
      classObj.put("String_Node_Str",currClass.getClassPath());
      classObj.put("String_Node_Str",corpusLocation + System.getProperty("String_Node_Str") + currClass.getClassName());
      if (!currClass.getKeyTextFields().isEmpty())       classObj.put("String_Node_Str",currClass.getKeyTextFields());
      classArray.add(classObj);
    }
    jsonObj.put("String_Node_Str",classArray);
    jsonObj.put("String_Node_Str",0);
    JSONArray analysisArray=new JSONArray();
    jsonObj.put("String_Node_Str",analysisArray);
    try {
      FileOutputStream bw=new FileOutputStream(metaFp);
      bw.write(jsonObj.toString().getBytes());
      bw.flush();
      bw.close();
    }
 catch (    IOException e) {
      e.printStackTrace();
    }
    copyCorpus(jsonObj);
  }
 else {
    String metaFile=corpusLocation + System.getProperty("String_Node_Str") + "String_Node_Str";
    JSONArray analysisArray=new JSONArray();
    int numAnalysis=0;
    if (!new File(metaFile).exists()) {
      JSONParser parser=new JSONParser();
      try {
        analysisArray=(JSONArray)((JSONObject)parser.parse(new FileReader(metaFile))).get("String_Node_Str");
        numAnalysis=(Integer)((JSONObject)parser.parse(new FileReader(metaFile))).get("String_Node_Str");
      }
 catch (      FileNotFoundException e) {
        e.printStackTrace();
      }
catch (      IOException e) {
        e.printStackTrace();
      }
catch (      ParseException e) {
        e.printStackTrace();
      }
    }
    File metaFp=new File(metaFile);
    JSONObject jsonObj=new JSONObject();
    jsonObj.put("String_Node_Str",corpus.getCorpusName());
    jsonObj.put("String_Node_Str",corpus.getCorpusId());
    jsonObj.put("String_Node_Str",corpus.getDatatype().toString());
    jsonObj.put("String_Node_Str",corpus.getClasses().size());
    int numClasses=corpus.getClasses().size();
    ArrayList<ICorpusClass> corporaClasses=(ArrayList<ICorpusClass>)corpus.getClasses();
    JSONArray classArray=new JSONArray();
    for (int i=0; i < numClasses; i++) {
      CorpusClass currClass=(CorpusClass)corporaClasses.get(i);
      JSONObject classObj=new JSONObject();
      classObj.put("String_Node_Str",currClass.getClassName());
      classObj.put("String_Node_Str",currClass.getClassPath());
      classObj.put("String_Node_Str",corpusLocation + System.getProperty("String_Node_Str") + currClass.getClassName());
      if (!currClass.getKeyTextFields().isEmpty())       classObj.put("String_Node_Str",currClass.getKeyTextFields());
      classArray.add(classObj);
    }
    jsonObj.put("String_Node_Str",classArray);
    jsonObj.put("String_Node_Str",numAnalysis);
    jsonObj.put("String_Node_Str",analysisArray);
    try {
      FileOutputStream bw=new FileOutputStream(metaFp);
      bw.write(jsonObj.toString().getBytes());
      bw.flush();
      bw.close();
    }
 catch (    IOException e) {
      e.printStackTrace();
    }
    copyCorpus(jsonObj);
    removeCorpus(corpus,false);
  }
}