Получите ICompilationUnit/ITypeRoot из отдельного Java-файла для Eclipse Plugin

Я взламываю плагин Eclipse, который отлично работает для файлов Java в проектах Java. Я хочу, чтобы это работало для файлов Java в любом проекте.

Этот плагин обрабатывает каждый файл Java как ICompilationUnit, Тем не менее, в моем подходе я могу только получить экземпляр IFile,

Как я могу создать ICompilationUnit из этого IFile объект?

Как альтернатива ITypeRoot может также сработать. Я видел, как это было создано непосредственно из редактора, используя следующее:

IJavaElement input= JavaUI.getEditorInputJavaElement(editorInput);
        if (input instanceof ITypeRoot) {
            return (ITypeRoot) input;
        }

Этот подход работает даже с не Java-проектами (java-файлы из общих проектов / каталогов, которые открываются в редакторе), что заставляет меня поверить, что нечто подобное может быть достигнуто непосредственно для файлов.

1 ответ

Решение

JavaCore.create(IFile) вернет ICompilationUnit если это подходит для файла:

IFile file = ...

IJavaElement element = JavaCore.create(file); 

if (element instanceof ICompilationUnit) {
  ICompilationUnit compUnit = (ICompilationUnit)element;

  ...
}

Другие объекты могут быть возвращены, например IClassFile для файла.class.

Другие вопросы по тегам