我正在編寫一個讀取java項目的插件,並且在程序中存在任何編譯器錯誤的情況下,它使用Eclipse JDT Quick fix來提取可能的解決方案來修復編譯器錯誤。用來發現錯誤和Eclipse解決方案的輸入編譯單元的代碼如下:如何從IJavaCompletionProposal獲取CompilationUnit
private void collectCorrections(final ICompilationUnit cu, final CompilationUnit astRoot) {
ArrayList<IProblem> problems = new ArrayList<IProblem>();
for (IProblem iProblem : astRoot.getProblems())
if (iProblem.isError()) problems.add(iProblem);
Map<IProblem, ArrayList<IJavaCompletionProposal>> ErrorproposalsMap = new HashMap<IProblem, ArrayList<IJavaCompletionProposal>>();
for (IProblem iProblem : problems) {
int offset = iProblem.getSourceStart();
int length = iProblem.getSourceEnd() + 1 - offset;
context = new AssistContext(cu, offset, length);
}
ProblemLocation problem = new ProblemLocation(iProblem);
ArrayList<IJavaCompletionProposal> proposals = new ArrayList<IJavaCompletionProposal>();
JavaCorrectionProcessor.collectCorrections(context, new IProblemLocation[] { problem }, proposals);
ErrorproposalsMap.put(iProblem, proposals);
}
我同時使用iProblem和建議獲取有關錯誤和解決方案的更多詳細信息。作爲示例,我使用iProblem.getOriginatingFileName()來提取發生錯誤的文件。但是,我面臨的問題是我不知道如何提取需要修改以修復錯誤的類的comilationUnit。
作爲一個簡單的例子,當我們從另一個類(class2)引用私有文件(在class1中定義)時,我們有一個編譯器錯誤。在這種情況下,我需要爲class1提取compilationUnit。請注意,getOriginatingFileName返回class2。
請讓我知道我可以提取使用org.eclipse.jdt.core.compiler.IProblem,並IJavaCompletionProposal class1的直接comilationUnit。