Program: 56915
Project: 56915
Buggy source:
private static SerializationData loadData(String dirName) throws IOException, JAXBException {
  SerializationManager serializationManager=GeneralManager.get().getSerializationManager();
  Unmarshaller unmarshaller=serializationManager.getProjectContext().createUnmarshaller();
  File metaData=new File(dirName,METADATA_FILE);
  if (metaData.exists()) {
    ProjectMetaData m=(ProjectMetaData)unmarshaller.unmarshal(metaData);
    GeneralManager.get().setMetaData(m);
  }
  DataDomainList dataDomainList;
  for (  ISerializationAddon addon : serializationManager.getAddons()) {
    addon.deserialize(dirName,unmarshaller);
  }
  dataDomainList=(DataDomainList)unmarshaller.unmarshal(GeneralManager.get().getResourceLoader().getResource(dirName + ProjectManager.DATA_DOMAIN_FILE));
  SerializationData serializationData=new SerializationData();
  for (  ADataDomain dataDomain : dataDomainList.getDataDomains()) {
    DataSetDescription dataSetDescription=dataDomain.getDataSetDescription();
    if (dataDomain.getDataDomainType().equals("String_Node_Str"))     DataDomainManager.get().initalizeDataDomain("String_Node_Str");
    IDTypeInitializer.initIDs(dataSetDescription);
    dataDomain.init();
    DataDomainManager.get().register(dataDomain);
    Thread thread=new Thread(dataDomain,dataDomain.getDataDomainID());
    thread.start();
    if (dataDomain instanceof ATableBasedDataDomain) {
      String extendedDirName=dirName + dataDomain.getDataDomainID() + "String_Node_Str";
      dataDomain.getDataSetDescription().setDataSourcePath(extendedDirName + ProjectManager.DATA_TABLE_FILE);
      DataDomainSerializationData dataInitializationData=new DataDomainSerializationData();
      dataInitializationData.setDataDomain((ATableBasedDataDomain)dataDomain);
      HashMap<String,Perspective> recordPerspectives=new HashMap<String,Perspective>();
      GeneralManager.get().getSplash().updateProgessLabel("String_Node_Str" + dataDomain.getLabel());
      Set<String> recordPerspectiveIDs=((ATableBasedDataDomain)dataDomain).getRecordPerspectiveIDs();
      Set<String> dimensionPerspectiveIDs=((ATableBasedDataDomain)dataDomain).getDimensionPerspectiveIDs();
      int nrPerspectives=recordPerspectiveIDs.size() + dimensionPerspectiveIDs.size();
      float progressBarFactor=100f / nrPerspectives;
      int perspectiveCount=0;
      for (      String recordPerspectiveID : recordPerspectiveIDs) {
        Perspective recordPerspective=(Perspective)unmarshaller.unmarshal(GeneralManager.get().getResourceLoader().getResource(extendedDirName + recordPerspectiveID + "String_Node_Str"));
        recordPerspective.setDataDomain((ATableBasedDataDomain)dataDomain);
        recordPerspective.setIDType(((ATableBasedDataDomain)dataDomain).getRecordIDType());
        recordPerspectives.put(recordPerspectiveID,recordPerspective);
        ClusterTree tree=loadTree(extendedDirName + recordPerspectiveID + "String_Node_Str",((ATableBasedDataDomain)dataDomain).getRecordIDType());
        if (tree != null)         recordPerspective.setTree(tree);
        GeneralManager.get().getSplash().updateProgress((int)(progressBarFactor * perspectiveCount));
        perspectiveCount++;
      }
      dataInitializationData.setRecordPerspectiveMap(recordPerspectives);
      HashMap<String,Perspective> dimensionPerspectives=new HashMap<String,Perspective>();
      for (      String dimensionPerspectiveID : dimensionPerspectiveIDs) {
        Perspective dimensionPerspective=(Perspective)unmarshaller.unmarshal(GeneralManager.get().getResourceLoader().getResource(extendedDirName + dimensionPerspectiveID + "String_Node_Str"));
        dimensionPerspective.setDataDomain((ATableBasedDataDomain)dataDomain);
        dimensionPerspective.setIDType(((ATableBasedDataDomain)dataDomain).getDimensionIDType());
        dimensionPerspectives.put(dimensionPerspectiveID,dimensionPerspective);
        ClusterTree tree=loadTree(extendedDirName + dimensionPerspectiveID + "String_Node_Str",((ATableBasedDataDomain)dataDomain).getDimensionIDType());
        dimensionPerspective.setTree(tree);
        GeneralManager.get().getSplash().updateProgress((int)(progressBarFactor * perspectiveCount));
        perspectiveCount++;
      }
      dataInitializationData.setDimensionPerspectiveMap(dimensionPerspectives);
      serializationData.addDataDomainSerializationData(dataInitializationData);
    }
  }
  for (  ISerializationAddon addon : serializationManager.getAddons()) {
    addon.deserialize(dirName,unmarshaller,serializationData);
  }
  return serializationData;
}

Fixed version (ground truth):
private static SerializationData loadData(String dirName) throws IOException, JAXBException {
  SerializationManager serializationManager=GeneralManager.get().getSerializationManager();
  Unmarshaller unmarshaller=serializationManager.getProjectContext().createUnmarshaller();
  File metaData=new File(dirName,METADATA_FILE);
  if (metaData.exists()) {
    ProjectMetaData m=(ProjectMetaData)unmarshaller.unmarshal(metaData);
    GeneralManager.get().setMetaData(m);
  }
  DataDomainList dataDomainList;
  for (  ISerializationAddon addon : serializationManager.getAddons()) {
    addon.deserialize(dirName,unmarshaller);
  }
  dataDomainList=(DataDomainList)unmarshaller.unmarshal(GeneralManager.get().getResourceLoader().getResource(dirName + ProjectManager.DATA_DOMAIN_FILE));
  SerializationData serializationData=new SerializationData();
  for (  ADataDomain dataDomain : dataDomainList.getDataDomains()) {
    DataSetDescription dataSetDescription=dataDomain.getDataSetDescription();
    if (dataDomain.getDataDomainType().equals("String_Node_Str"))     DataDomainManager.get().initalizeDataDomain("String_Node_Str");
    IDTypeInitializer.initIDs(dataSetDescription);
    dataDomain.init();
    DataDomainManager.get().register(dataDomain);
    Thread thread=new Thread(dataDomain,dataDomain.getDataDomainID());
    thread.start();
    if (dataDomain instanceof ATableBasedDataDomain) {
      String extendedDirName=dirName + dataDomain.getDataDomainID() + "String_Node_Str";
      dataDomain.getDataSetDescription().setDataSourcePath(extendedDirName + ProjectManager.DATA_TABLE_FILE);
      DataDomainSerializationData dataInitializationData=new DataDomainSerializationData();
      dataInitializationData.setDataDomain((ATableBasedDataDomain)dataDomain);
      HashMap<String,Perspective> recordPerspectives=new HashMap<String,Perspective>();
      GeneralManager.get().updateProgressLabel("String_Node_Str" + dataDomain.getLabel());
      Set<String> recordPerspectiveIDs=((ATableBasedDataDomain)dataDomain).getRecordPerspectiveIDs();
      Set<String> dimensionPerspectiveIDs=((ATableBasedDataDomain)dataDomain).getDimensionPerspectiveIDs();
      int nrPerspectives=recordPerspectiveIDs.size() + dimensionPerspectiveIDs.size();
      float progressBarFactor=100f / nrPerspectives;
      int perspectiveCount=0;
      for (      String recordPerspectiveID : recordPerspectiveIDs) {
        Perspective recordPerspective=(Perspective)unmarshaller.unmarshal(GeneralManager.get().getResourceLoader().getResource(extendedDirName + recordPerspectiveID + "String_Node_Str"));
        recordPerspective.setDataDomain((ATableBasedDataDomain)dataDomain);
        recordPerspective.setIDType(((ATableBasedDataDomain)dataDomain).getRecordIDType());
        recordPerspectives.put(recordPerspectiveID,recordPerspective);
        ClusterTree tree=loadTree(extendedDirName + recordPerspectiveID + "String_Node_Str",((ATableBasedDataDomain)dataDomain).getRecordIDType());
        if (tree != null)         recordPerspective.setTree(tree);
        GeneralManager.get().updateProgress((int)(progressBarFactor * perspectiveCount));
        perspectiveCount++;
      }
      dataInitializationData.setRecordPerspectiveMap(recordPerspectives);
      HashMap<String,Perspective> dimensionPerspectives=new HashMap<String,Perspective>();
      for (      String dimensionPerspectiveID : dimensionPerspectiveIDs) {
        Perspective dimensionPerspective=(Perspective)unmarshaller.unmarshal(GeneralManager.get().getResourceLoader().getResource(extendedDirName + dimensionPerspectiveID + "String_Node_Str"));
        dimensionPerspective.setDataDomain((ATableBasedDataDomain)dataDomain);
        dimensionPerspective.setIDType(((ATableBasedDataDomain)dataDomain).getDimensionIDType());
        dimensionPerspectives.put(dimensionPerspectiveID,dimensionPerspective);
        ClusterTree tree=loadTree(extendedDirName + dimensionPerspectiveID + "String_Node_Str",((ATableBasedDataDomain)dataDomain).getDimensionIDType());
        dimensionPerspective.setTree(tree);
        GeneralManager.get().updateProgress((int)(progressBarFactor * perspectiveCount));
        perspectiveCount++;
      }
      dataInitializationData.setDimensionPerspectiveMap(dimensionPerspectives);
      serializationData.addDataDomainSerializationData(dataInitializationData);
    }
  }
  for (  ISerializationAddon addon : serializationManager.getAddons()) {
    addon.deserialize(dirName,unmarshaller,serializationData);
  }
  return serializationData;
}