首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从CompilationUnit中获取IJavaCompletionProposal

如何从CompilationUnit中获取IJavaCompletionProposal
EN

Stack Overflow用户
提问于 2014-09-26 11:36:14
回答 1查看 175关注 0票数 1

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

代码语言:javascript
复制
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);
}

我使用iProblemiProblem获得有关错误和解决方案的更详细信息。例如,我使用iProblem.getOriginatingFileName()提取发生错误的文件。但是,我面临的问题是,我不知道如何提取需要更改以修复错误的类的comilationUnit。

作为一个简单的例子,当我们从另一个类( class1)中引用一个私有字段(在class2中定义)时,我们有一个编译器错误。在这种情况下,我需要提取compilationUnit用于class1。注意,getOriginatingFileName返回class2。

请告诉我如何使用org.eclipse.jdt.core.compiler.IProblem,和IJavaCompletionProposal.直接提取comilationUnit of class1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-26 12:29:36

您可以使用在getCompilationUnit()中定义的CUCorrectionProposal提取CompilationUnit of class1。注意,LinkedCorrectionProposal扩展了CUCorrectionProposal.然而,我不确定所有的eclipse CorrectionProposal都扩展了CorrectionProposal。检查一下。

解决办法可以是这样的。

代码语言:javascript
复制
    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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26058632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档