Eclipse 如何从独立Java文件模拟完全兼容的ICompilationUnit?
我正在破解一个Eclipse插件,它可以完美地为Java项目中的Java文件工作。我想让它适用于任何类型的项目中的Java文件 该插件将每个Java文件处理为一个Eclipse 如何从独立Java文件模拟完全兼容的ICompilationUnit?,eclipse,eclipse-plugin,eclipse-jdt,Eclipse,Eclipse Plugin,Eclipse Jdt,我正在破解一个Eclipse插件,它可以完美地为Java项目中的Java文件工作。我想让它适用于任何类型的项目中的Java文件 该插件将每个Java文件处理为一个ICompilationUnit。然而,在我的方法中,我只能得到文件的一个实例 根据另一篇文章的建议,我正在从任何Java文件手动创建一个IJavaElement: IJavaElement element = JavaCore.create(file); 除了一些特殊情况外,这似乎效果不错。例如,当我试图获取文件的源代码时,我得到异
ICompilationUnit
。然而,在我的方法中,我只能得到文件的一个实例
根据另一篇文章的建议,我正在从任何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
编辑:我认为如果源文件在编辑器中打开,我不会得到这个异常。但是,如何避免它?JavaModelException说了什么?Java模型异常:Java模型状态[测试不存在]
我刚刚用异常@greg-449的更详细输出更新了我的问题,该异常似乎在说一些不存在的东西。从这个角度看,你是在重构过程中做这件事的——你确定文件、文件夹和项目在你做这件事的时候确实存在吗(什么是“测试”),老实说,我不知道从哪里得到了“测试”。无论如何,我希望java文件能够在不需要项目作为上下文的情况下进行重构。重构本身似乎并不需要整个项目。除此之外,像org.eclipse.jdt.internal.core.Openable.open祖先
这样的方法似乎在试图找到树根,并导致这些奇怪的失败:(JavaModelException怎么说?Java模型异常:Java模型状态[测试不存在]
我刚刚更新了一个更详细的异常输出@greg-449,该异常似乎表示某个东西不存在。从这一点上看,您在重构期间正在这样做-您确定在您执行此操作时文件、文件夹和项目确实存在吗(什么是“测试”?)老实说,我不知道从哪里得到“测试”。无论如何,我希望java文件在不需要项目作为上下文的情况下进行重构。重构本身似乎不需要整个项目。此外,像org.eclipse.jdt.internal.core.Openable.open祖先
这样的方法似乎正在试图升级到树上ot给我带来了这些奇怪的失败:(