Получите 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.