gpt4 book ai didi

java - 如何从 IJavaCompletionProposal 获取 CompilationUnit

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:31 25 4
gpt4 key购买 nike

我正在编写一个读取java项目的插件,如果程序中存在任何编译器错误,它会使用Eclipse JDT快速修复来提取可能的解决方案来修复编译器错误。用于查找输入编译单元的错误和eclipse解决方案的代码如下:

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)引用私有(private)字段(在 class1 中定义)时,就会出现编译器错误。在本例中,我需要提取 class1 的compilationUnit。请注意,getOriginatingFileName 返回 class2。

请告诉我如何使用org.eclipse.jdt.core.compiler.IProblemIJavaCompletionProposal直接提取class1的comilationUnit。

最佳答案

您可以使用CUCorrectionProposal中定义的getCompilationUnit()来提取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);

关于java - 如何从 IJavaCompletionProposal 获取 CompilationUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com