API для получения всех ресурсов типа контента в проекте Eclipse - PullRequest
4 голосов
/ 05 февраля 2010

Есть ли API для получения всех файлов определенного типа контента в проекте Eclipse?

Одним из вариантов является посещение всех ресурсов и сбор файлов типа контента.

Я смотрю на API, который принимает IProject и идентификатор типа контента в качестве параметров и возвращает объекты IPath или IFile или IResource. Например, получить все файлы Java в проекте.

Спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 07 сентября 2012

Вот что я использовал, чтобы найти все c файлы в текущем проекте:

    public static ArrayList<IResource> getAllCFilesInProject(){
    ArrayList<IResource> allCFiles = new ArrayList<IResource>();
    IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
    IProject project = FileParaviserUtils.getCurrentProject();

    IPath path = project.getLocation();

    recursiveFindCFiles(allCFiles,path,myWorkspaceRoot);
    return allCFiles;
}

private static void recursiveFindCFiles(ArrayList<IResource> allCFiles,IPath path, IWorkspaceRoot myWorkspaceRoot){
    IContainer  container =  myWorkspaceRoot.getContainerForLocation(path);

    try {
        IResource[] iResources;
        iResources = container.members();
        for (IResource iR : iResources){
            // for c files
            if ("c".equalsIgnoreCase(iR.getFileExtension()))
                allCFiles.add(iR);
            if (iR.getType() == IResource.FOLDER){
                IPath tempPath = iR.getLocation();
                recursiveFindCFiles(allCFiles,tempPath,myWorkspaceRoot);
            }
        }
    } catch (CoreException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public static IProject getCurrentProject(){
    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    if (window != null)
    {
        IStructuredSelection selection = (IStructuredSelection) window.getSelectionService().getSelection();
        Object firstElement = selection.getFirstElement();
        if (firstElement instanceof IAdaptable)
        {
            IProject project = (IProject)((IAdaptable)firstElement).getAdapter(IProject.class);
            return project;
        }
    }
    return null;
}
2 голосов
/ 05 февраля 2010

Нет, нет. Как правило, ваша идея состоит в том, как это сделать.

0 голосов
/ 05 февраля 2010

В примечаниях к выпуску eclipse3.1 упоминалось в то время (июнь 2005 г.) изменение эвристики для сопоставления типов контента.
Это было связано с
ошибка 90218 , часть ошибка 82986 (улучшения соответствия в 3.1), которая ссылается на ошибка 86862 ("потребность" API для поиска связанных пользовательских объектов ")

Этот API этого не сделал, но код доступен для повторного использования.

public Object[] findRelatedObjects(IContentType type, String fileName, IRelatedRegistry registry) {
  List allRelated = new ArrayList();
  // first add any objects directly related to the content type
  Object[] related = registry.getRelatedObjects(type);
  for (int i = 0; i < related.length; i++) {
    allRelated.add(related[i]);
  }
  // backward compatibility requested - add any objects related to the file name
  if (fileName != null) {
    related = registry.getRelatedObjects(fileName);
    for (int i = 0; i < related.length; i++) {
      if (!allRelated.contains(related[i])) {
        // we don't want to return duplicates
        allRelated.add(related[i]);
      }
    }
  }
  // now add any indirectly related objects, walking up the content type hierarchy 
  while ((type = type.getBaseType()) != null) {
    related = registry.getRelatedObjects(type);
    for (int i = 0; i < related.length; i++) {
      if (!allRelated.contains(related[i])) {
        // we don't want to return duplicates          
        allRelated.add(related[i]);
      }
    }
  }
  return allRelated.toArray();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...