如何从独立的Java文件模仿完全兼容的ICompilationUnit?

时间:2016-12-12 12:13:18

标签: eclipse eclipse-plugin eclipse-jdt

我正在攻击一个Eclipse插件,它对Java项目中的Java文件非常有效。我想让它适用于任何类型项目中的Java文件。

此插件将每个Java文件处理为ICompilationUnit。但是,在我的方法中,我只能获得File的实例。

根据另一个post的建议,我从任何Java文件手动创建IJavaElement

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 个答案:

没有答案