[英]JDT - How to get ICompilationUnit from CompilationUnit
[英]How to get CompilationUnit from IJavaCompletionProposal
我正在編寫一個讀取Java項目的插件,並且在程序中出現編譯器錯誤的情況下,它使用Eclipse JDT Quick fix提取可能的解決方案來修復編譯器錯誤。 用於查找輸入編譯單元的錯誤和日食解決方案的代碼如下:
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 。
您可以使用getCompilationUnit()在CUCorrectionProposal規定提取的Class1的CompilationUnit。 需要注意的是LinkedCorrectionProposal延伸CUCorrectionProposal。 但是,我不確定所有的Eclipse CorrectionProposal是否都擴展了LinkedCorrectionProposal 。 核實。
解決方案可以是這樣的。
CUCorrectionProposal cUCorrectionProposal = (CUCorrectionProposal) eclipseProposal;
ICompilationUnit iCompilationUnit = cUCorrectionProposal.getCompilationUnit();
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(iCompilationUnit );
CompilationUnit compilationUnit = (CompilationUnit) parser.createAST(null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.