Как я могу имитировать полностью совместимый ICompilationUnit из автономных файлов Java?
Я взламываю плагин Eclipse, который отлично работает для файлов Java в проектах Java. Я хочу, чтобы это работало для файлов Java в любом проекте.
Этот плагин обрабатывает каждый файл Java как ICompilationUnit
, Тем не менее, в моем подходе я могу только получить экземпляр File
,
После предложения в другом посте я вручную создаю IJavaElement
из любого файла Java:
IJavaElement element = JavaCore.create(file);
Кажется, это работает нормально, за исключением некоторых конкретных случаев. Например, когда я пытаюсь получить источник файла, я получаю исключение JavaModelException
:
ICompilationUnit compUnit = (ICompilationUnit)element;
compUnit.getSource();
Сообщение об исключении:
Java Model Exception: Java Model Status [test does not exist]
at org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement.java:566)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:247)
at org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:505)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:241)
at org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:505)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:241)
at org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:505)
at org.eclipse.jdt.internal.core.CompilationUnit.openAncestors(CompilationUnit.java:1176)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:241)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:579)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:316)
at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:302)
at org.eclipse.jdt.internal.core.Openable.getBuffer(Openable.java:285)
at org.eclipse.jdt.internal.core.CompilationUnit.getSource(CompilationUnit.java:903)
at org.autorefactor.refactoring.rules.RefactoringContext.getSource(RefactoringContext.java:126)
... 19 more
Боюсь, что то же самое случится с другими методами. Как я могу иметь полностью рабочий ICompilationUnit
/IJavaElement
?
Изменить: я понял, что если исходный файл открыт в редакторе, я не получу это исключение. И все же, как этого избежать?