Как я могу имитировать полностью совместимый 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?

Изменить: я понял, что если исходный файл открыт в редакторе, я не получу это исключение. И все же, как этого избежать?

0 ответов

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