我正在攻击一个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
?
编辑:我发现如果源文件在编辑器中打开,我就不会得到这个例外。还是,如何避免呢?