Program: 125447
Project: 125447
Buggy source:
public List<ImportItem> populateImportingItems(ResourcesManager resManager,boolean overwrite,IProgressMonitor progressMonitor,boolean enableProductChecking,boolean needCheck) throws Exception {
  IProgressMonitor monitor=progressMonitor;
  if (monitor == null) {
    monitor=new NullProgressMonitor();
  }
  TimeMeasure.display=CommonsPlugin.isDebugMode();
  TimeMeasure.displaySteps=CommonsPlugin.isDebugMode();
  TimeMeasure.measureActive=CommonsPlugin.isDebugMode();
  TimeMeasure.begin("String_Node_Str");
  try {
    prePopulate(monitor,resManager);
    ImportCacheHelper.getInstance().beforePopulateItems();
    if (resManager == null) {
      return Collections.emptyList();
    }
    Set<IPath> resPaths=resManager.getPaths();
    monitor.beginTask(Messages.getString("String_Node_Str"),resPaths.size());
    List<ImportItem> items=new ArrayList<ImportItem>();
    List<IPath> resourcesPathsList=new ArrayList<IPath>(resPaths);
    Collections.sort(resourcesPathsList,new Comparator<IPath>(){
      @Override public int compare(      IPath o1,      IPath o2){
        return o1.toPortableString().compareTo(o2.toPortableString());
      }
    }
);
    List<IPath> doneList=new ArrayList<IPath>();
    ImportHandlerHelper importHandlerHelper=createImportHandlerHelper();
    for (    IPath path : resourcesPathsList) {
      if (monitor.isCanceled()) {
        return Collections.emptyList();
      }
      if (!importHandlerHelper.validResourcePath(path)) {
        IImportItemsHandler importHandler=findValidImportHandler(resManager,path,enableProductChecking);
        if (importHandler != null) {
          ImportItem importItem=null;
          if (needCheck) {
            importItem=importHandler.createImportItem(progressMonitor,resManager,path,overwrite,items);
          }
 else {
            importItem=importHandler.generateImportItem(progressMonitor,resManager,path,overwrite,items);
          }
          if (importItem != null && !items.contains(importItem)) {
            items.add(importItem);
            doneList.add(path);
          }
        }
        monitor.worked(1);
      }
    }
    resourcesPathsList.removeAll(doneList);
    for (    IPath path : resourcesPathsList) {
      if (monitor.isCanceled()) {
        return Collections.emptyList();
      }
      ImportItem importItem=importHandlerHelper.computeImportItem(monitor,resManager,path,overwrite);
      if (importItem != null) {
        IImportItemsHandler importHandler=findValidImportHandler(importItem,enableProductChecking,needCheck);
        if (importHandler != null) {
          if (importHandler instanceof ImportBasicHandler) {
            ImportBasicHandler importBasicHandler=(ImportBasicHandler)importHandler;
            if (needCheck) {
              if (importBasicHandler.checkItem(resManager,importItem,overwrite)) {
                importBasicHandler.checkAndSetProject(resManager,importItem);
                changeIdManager.add(importItem);
              }
            }
 else {
              importBasicHandler.resolveItem(resManager,importItem);
            }
          }
        }
 else {
          importItem=null;
        }
      }
      if (importItem != null && !items.contains(importItem)) {
        items.add(importItem);
      }
      monitor.worked(1);
    }
    List<IPath> emptyFolders=resManager.getEmptyFolders();
    if (!emptyFolders.isEmpty()) {
      DynaEnum<? extends DynaEnum<?>>[] values=ERepositoryObjectType.values();
      ERepositoryObjectType folderType=null;
      for (      IPath folder : emptyFolders) {
        if (folder.segmentCount() < 1) {
          continue;
        }
        IPath folderPathToCheck=folder.removeFirstSegments(1);
        String generatedPath=ERepositoryObjectType.DOCUMENTATION.getFolder() + "String_Node_Str" + RepositoryConstants.DOCUMENTATION_GENERATED_PATH;
        if (folderPathToCheck.removeTrailingSeparator().toPortableString().startsWith(generatedPath)) {
          continue;
        }
        for (        DynaEnum<? extends DynaEnum<?>> type : ERepositoryObjectType.values()) {
          ERepositoryObjectType objectType=(ERepositoryObjectType)type;
          String[] products=objectType.getProducts();
          boolean isDI=false;
          for (          String product : products) {
            if (ERepositoryObjectType.PROD_DI.equals(product)) {
              isDI=true;
              break;
            }
          }
          if (isDI && objectType.isResouce()) {
            if (folderPathToCheck.toPortableString().startsWith(objectType.getFolder() + "String_Node_Str")) {
              folderType=objectType;
              ERepositoryObjectType fromChildrenType=getTypeFromChildren(objectType.getChildrenTypesArray(),folderPathToCheck.toPortableString());
              if (fromChildrenType != null) {
                folderType=fromChildrenType;
              }
              if (folderType == ERepositoryObjectType.SQLPATTERNS && folderPathToCheck.removeTrailingSeparator().toPortableString().endsWith(RepositoryConstants.USER_DEFINED) || folderType == ERepositoryObjectType.TEST_CONTAINER) {
                folderType=null;
              }
              if (folderPathToCheck.removeTrailingSeparator().toPortableString().equals(objectType.getFolder())) {
                folderType=null;
              }
              break;
            }
          }
        }
        if (folderType != null) {
          IPath typePath=new Path(folderType.getFolder());
          IPath folderPath=folder.removeFirstSegments(1 + typePath.segmentCount()).removeLastSegments(1).removeTrailingSeparator();
          String folderLabel=folder.lastSegment();
          EmptyFolderImportItem folderItem=new EmptyFolderImportItem(folderPath);
          folderItem.setRepositoryType(folderType);
          folderItem.setLabel(folderLabel);
          Project project=PropertiesFactory.eINSTANCE.createProject();
          project.setTechnicalLabel(folder.segment(0));
          project.setLabel(folder.segment(0));
          folderItem.setItemProject(project);
          Property property=PropertiesFactory.eINSTANCE.createProperty();
          property.setId(ProxyRepositoryFactory.getInstance().getNextId());
          FolderItem createFolderItem=PropertiesFactory.eINSTANCE.createFolderItem();
          ItemState createStatus=PropertiesFactory.eINSTANCE.createItemState();
          property.setItem(createFolderItem);
          createStatus.setPath(folderPath.toPortableString());
          createFolderItem.setState(createStatus);
          items.add(folderItem);
          folderItem.setProperty(property);
          folderType=null;
        }
      }
    }
    postPopulate(monitor,resManager,items.toArray(new ImportItem[0]));
    return items;
  }
  finally {
    ImportCacheHelper.getInstance().afterPopulateItems();
    TimeMeasure.end("String_Node_Str");
    TimeMeasure.display=false;
    TimeMeasure.displaySteps=false;
    TimeMeasure.measureActive=false;
  }
}

Fixed version (ground truth):
public List<ImportItem> populateImportingItems(ResourcesManager resManager,boolean overwrite,IProgressMonitor progressMonitor,boolean enableProductChecking,boolean needCheck) throws Exception {
  IProgressMonitor monitor=progressMonitor;
  if (monitor == null) {
    monitor=new NullProgressMonitor();
  }
  TimeMeasure.display=CommonsPlugin.isDebugMode();
  TimeMeasure.displaySteps=CommonsPlugin.isDebugMode();
  TimeMeasure.measureActive=CommonsPlugin.isDebugMode();
  TimeMeasure.begin("String_Node_Str");
  try {
    prePopulate(monitor,resManager);
    ImportCacheHelper.getInstance().beforePopulateItems();
    if (resManager == null) {
      return Collections.emptyList();
    }
    Set<IPath> resPaths=resManager.getPaths();
    monitor.beginTask(Messages.getString("String_Node_Str"),resPaths.size());
    List<ImportItem> items=new ArrayList<ImportItem>();
    List<IPath> resourcesPathsList=new ArrayList<IPath>(resPaths);
    Collections.sort(resourcesPathsList,new Comparator<IPath>(){
      @Override public int compare(      IPath o1,      IPath o2){
        return o1.toPortableString().compareTo(o2.toPortableString());
      }
    }
);
    List<IPath> doneList=new ArrayList<IPath>();
    ImportHandlerHelper importHandlerHelper=createImportHandlerHelper();
    for (    IPath path : resourcesPathsList) {
      if (monitor.isCanceled()) {
        return Collections.emptyList();
      }
      if (!importHandlerHelper.validResourcePath(path)) {
        IImportItemsHandler importHandler=findValidImportHandler(resManager,path,enableProductChecking);
        if (importHandler != null) {
          ImportItem importItem=null;
          if (needCheck) {
            importItem=importHandler.createImportItem(progressMonitor,resManager,path,overwrite,items);
          }
 else {
            importItem=importHandler.generateImportItem(progressMonitor,resManager,path,overwrite,items);
          }
          if (importItem != null && !items.contains(importItem)) {
            items.add(importItem);
            doneList.add(path);
          }
        }
        monitor.worked(1);
      }
    }
    resourcesPathsList.removeAll(doneList);
    for (    IPath path : resourcesPathsList) {
      if (monitor.isCanceled()) {
        return Collections.emptyList();
      }
      ImportItem importItem=importHandlerHelper.computeImportItem(monitor,resManager,path,overwrite);
      if (importItem != null) {
        IImportItemsHandler importHandler=findValidImportHandler(resManager,path,importItem,enableProductChecking,needCheck);
        if (importHandler != null) {
          if (importHandler instanceof ImportBasicHandler) {
            ImportBasicHandler importBasicHandler=(ImportBasicHandler)importHandler;
            if (needCheck) {
              if (importBasicHandler.checkItem(resManager,importItem,overwrite)) {
                importBasicHandler.checkAndSetProject(resManager,importItem);
                changeIdManager.add(importItem);
              }
            }
 else {
              importBasicHandler.resolveItem(resManager,importItem);
            }
          }
        }
 else {
          importItem=null;
        }
      }
      if (importItem != null && !items.contains(importItem)) {
        items.add(importItem);
      }
      monitor.worked(1);
    }
    List<IPath> emptyFolders=resManager.getEmptyFolders();
    if (!emptyFolders.isEmpty()) {
      DynaEnum<? extends DynaEnum<?>>[] values=ERepositoryObjectType.values();
      ERepositoryObjectType folderType=null;
      for (      IPath folder : emptyFolders) {
        if (folder.segmentCount() < 1) {
          continue;
        }
        IPath folderPathToCheck=folder.removeFirstSegments(1);
        String generatedPath=ERepositoryObjectType.DOCUMENTATION.getFolder() + "String_Node_Str" + RepositoryConstants.DOCUMENTATION_GENERATED_PATH;
        if (folderPathToCheck.removeTrailingSeparator().toPortableString().startsWith(generatedPath)) {
          continue;
        }
        for (        DynaEnum<? extends DynaEnum<?>> type : ERepositoryObjectType.values()) {
          ERepositoryObjectType objectType=(ERepositoryObjectType)type;
          String[] products=objectType.getProducts();
          boolean isDI=false;
          for (          String product : products) {
            if (ERepositoryObjectType.PROD_DI.equals(product)) {
              isDI=true;
              break;
            }
          }
          if (isDI && objectType.isResouce()) {
            if (folderPathToCheck.toPortableString().startsWith(objectType.getFolder() + "String_Node_Str")) {
              folderType=objectType;
              ERepositoryObjectType fromChildrenType=getTypeFromChildren(objectType.getChildrenTypesArray(),folderPathToCheck.toPortableString());
              if (fromChildrenType != null) {
                folderType=fromChildrenType;
              }
              if (folderType == ERepositoryObjectType.SQLPATTERNS && folderPathToCheck.removeTrailingSeparator().toPortableString().endsWith(RepositoryConstants.USER_DEFINED) || folderType == ERepositoryObjectType.TEST_CONTAINER) {
                folderType=null;
              }
              if (folderPathToCheck.removeTrailingSeparator().toPortableString().equals(objectType.getFolder())) {
                folderType=null;
              }
              break;
            }
          }
        }
        if (folderType != null) {
          IPath typePath=new Path(folderType.getFolder());
          IPath folderPath=folder.removeFirstSegments(1 + typePath.segmentCount()).removeLastSegments(1).removeTrailingSeparator();
          String folderLabel=folder.lastSegment();
          EmptyFolderImportItem folderItem=new EmptyFolderImportItem(folderPath);
          folderItem.setRepositoryType(folderType);
          folderItem.setLabel(folderLabel);
          Project project=PropertiesFactory.eINSTANCE.createProject();
          project.setTechnicalLabel(folder.segment(0));
          project.setLabel(folder.segment(0));
          folderItem.setItemProject(project);
          Property property=PropertiesFactory.eINSTANCE.createProperty();
          property.setId(ProxyRepositoryFactory.getInstance().getNextId());
          FolderItem createFolderItem=PropertiesFactory.eINSTANCE.createFolderItem();
          ItemState createStatus=PropertiesFactory.eINSTANCE.createItemState();
          property.setItem(createFolderItem);
          createStatus.setPath(folderPath.toPortableString());
          createFolderItem.setState(createStatus);
          items.add(folderItem);
          folderItem.setProperty(property);
          folderType=null;
        }
      }
    }
    postPopulate(monitor,resManager,items.toArray(new ImportItem[0]));
    return items;
  }
  finally {
    ImportCacheHelper.getInstance().afterPopulateItems();
    TimeMeasure.end("String_Node_Str");
    TimeMeasure.display=false;
    TimeMeasure.displaySteps=false;
    TimeMeasure.measureActive=false;
  }
}