以编程方式调用Eclipse快速修复时出现运行时错误

用户名

我实现了一个Java插件,该插件能够使用Eclipse快速修复来修复comiper错误。要访问输入程序的最新版本,首先刷新在eclipse中打开的项目,然后调用eclipse快速修复以修复现有的编译器错误。(将对输入程序进行必要的更改,我需要首先刷新项目,然后提取最后一个版本。)实现以下代码(作为一种方法提供)以完成所描述的工作。

//Get workspace
IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
IWorkspaceRoot root = workspace.getRoot();

//Get project
IProject project = root.getProject(projectName);

//Referesh the project
project.refreshLocal(IResource.DEPTH_INFINITE, null); 
IJobManager jobManager = Job.getJobManager();
jobManager.wakeUp(ResourcesPlugin.FAMILY_AUTO_BUILD);
jobManager.join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
IJavaProject javaProject = JavaCore.create(project);

//Get ICompilationUnit (classFullName is the full name of class that we need to find its compiler error)
IType iType = javaProject.findType(classFullName);
ICompilationUnit iUnit = iType.getCompilationUnit();

/** Create working copy. It is safer to work with a copy.*/
WorkingCopyOwner owner = iUnit.getOwner();
iUnit = (owner == null ? iUnit.getWorkingCopy(null) : iUnit.getWorkingCopy(owner, null)); 

//Get compilation Unit
ASTParser parser = ASTParser.newParser(AST.JLS8);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(iCompilationUnit);
parser.setResolveBindings(true); 
CompilationUnit cu = (CompilationUnit) parser.createAST(null);

//Get compiler error using eclipse quick fix
for (IProblem iProblem : cu.getProblems()) {

   //If it is an error
   if (iProblem.isError()) {
      int offset = iProblem.getSourceStart();
      int length = iProblem.getSourceEnd() + 1 - offset;
      IInvocationContext context = new AssistContext(iUnit , offset, length);

     ProblemLocation problem = new ProblemLocation(iProblem);

     //Extract Eclipse quick fix proposal.
     ArrayList<IJavaCompletionProposal> proposals = new ArrayList<IJavaCompletionProposal>();
     JavaCorrectionProcessor.collectCorrections(context, new IProblemLocation[] { problem }, proposals);        
 }}

最后,我们在提案变量中列出了蚀提案该程序运行良好,直到今天我遇到了一个新的编译器错误。如果我有以下示例作为输入程序:

class Test {
   public void foo(){
      Scanner in = new Scanner(System.in);
   }
 }

当我想考虑生产线提案时,出现以下运行时错误 Scanner in = new Scanner(System.in);

!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jdt.ui". !STACK 1 Java Model Exception: Java Model Status [[Working copy] Test.java [in src [in SortExample]]] does not exist] at org.eclipse.jdt.internal.core.JavaElement.newJavaModelException(JavaElement.java:544)

我调试程序并找到方法问题发生collectCorrectionsJavaCorrectionProcessor

public static IStatus collectCorrections(IInvocationContext context, IProblemLocation[] locations, Collection<IJavaCompletionProposal> proposals) {
    ContributedProcessorDescriptor[] processors= getCorrectionProcessors();
    SafeCorrectionCollector collector= new SafeCorrectionCollector(context, proposals);
    for (int i= 0; i < processors.length; i++) {
        ContributedProcessorDescriptor curr= processors[i];
        IProblemLocation[] handled= getHandledProblems(locations, curr);
        if (handled != null) {
            collector.setProblemLocations(handled);
            collector.process(curr);
        }
    }
    return collector.getStatus();
}

重要说明:对于特定类型的编译器错误,我只会收到此错误。例如,如果在未定义i的情况下此行i = 0发生编译器错误,那么我将得到unresolve变量,程序将提出解决方案,以解决任何问题。因此,我认为刷新部分应该可以正常工作,否则对于程序中所有类型的编译器错误,我都应该得到此错误。

用户名

我发现了问题。它是由于运行时错误中所示的工作副本而发生的Java Model Status [[Working copy] Test.java [in src [in SortExample]]] does not exist]我评论了以下几行后,一切正常。

WorkingCopyOwner owner = iUnit.getOwner();
iUnit = (owner == null ? iUnit.getWorkingCopy(null) : iUnit.getWorkingCopy(owner, null)); 

正如我所说,问题是由于某些特定的错误而发生的。例如,当我使用未定义整数变量(i = 0)时,不会发生这种情况,但是当在第二个类中使用一个类的实体,但是没有将其import语句添加到第二个类中时,就会发生这种情况。

发生这种情况是因为未将使用过的类添加到工作副本中,并且当eclipse想要找到使用过的类时,因为它不在工作副本中,所以它会引发异常。但是,对于第一个错误(i = 0),什么都不会发生,因为可以从工作副本中获取所有信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以编程方式调用Eclipse快速修复时出现运行时错误

来自分类Dev

以编程方式隐藏表时访问vba运行时错误2467

来自分类Dev

运行时错误-调用popToRootViewController时出现“嵌套推送动画”

来自分类Dev

使用列表框调用用户窗体时出现运行时错误

来自分类Dev

Access 调用 Outlook 时出现运行时 429 ActiveX 组件错误

来自分类Dev

运行Go代码时出现运行时错误

来自分类Dev

运行for循环时出现奇怪的运行时错误'424'

来自分类Dev

运行“粘贴”时,出现VBA运行时错误438

来自分类Dev

在Eclipse上运行时出现rJava错误

来自分类Dev

尝试以编程方式创建用户窗体按钮时,运行时“ 13”错误类型不匹配

来自分类Dev

3265检索表信息时出现运行时错误

来自分类Dev

启动地图时出现运行时错误

来自分类Dev

打开Excel文件时出现运行时错误

来自分类Dev

编译Java运行时库时出现Protobuf错误

来自分类Dev

设置图像javafx时出现运行时错误IllegalArgumentException

来自分类Dev

打开Access时出现“运行时错误91”

来自分类Dev

从FormControl ListBox检索值时出现运行时错误

来自分类Dev

3265检索表信息时出现运行时错误

来自分类Dev

设置图像javafx时出现运行时错误IllegalArgumentException

来自分类Dev

打开Word文件时出现运行时错误'1004'

来自分类Dev

编译Java运行时库时出现Protobuf错误

来自分类Dev

尝试使用pip时出现运行时错误

来自分类Dev

保存NewWorkbook时出现运行时错误

来自分类Dev

在 VBA 中执行 SQL 时出现运行时错误

来自分类Dev

生成邮件合并时出现运行时错误 424

来自分类Dev

将“:”更改为“;”时出现运行时错误 VBA

来自分类Dev

使用动态数组时出现运行时错误 1004

来自分类Dev

调用方法时发生运行时错误?

来自分类Dev

在具有例程调用的并行区域中使用 PGI 而不是 Cray 进行编译时出现运行时错误

Related 相关文章

  1. 1

    以编程方式调用Eclipse快速修复时出现运行时错误

  2. 2

    以编程方式隐藏表时访问vba运行时错误2467

  3. 3

    运行时错误-调用popToRootViewController时出现“嵌套推送动画”

  4. 4

    使用列表框调用用户窗体时出现运行时错误

  5. 5

    Access 调用 Outlook 时出现运行时 429 ActiveX 组件错误

  6. 6

    运行Go代码时出现运行时错误

  7. 7

    运行for循环时出现奇怪的运行时错误'424'

  8. 8

    运行“粘贴”时,出现VBA运行时错误438

  9. 9

    在Eclipse上运行时出现rJava错误

  10. 10

    尝试以编程方式创建用户窗体按钮时,运行时“ 13”错误类型不匹配

  11. 11

    3265检索表信息时出现运行时错误

  12. 12

    启动地图时出现运行时错误

  13. 13

    打开Excel文件时出现运行时错误

  14. 14

    编译Java运行时库时出现Protobuf错误

  15. 15

    设置图像javafx时出现运行时错误IllegalArgumentException

  16. 16

    打开Access时出现“运行时错误91”

  17. 17

    从FormControl ListBox检索值时出现运行时错误

  18. 18

    3265检索表信息时出现运行时错误

  19. 19

    设置图像javafx时出现运行时错误IllegalArgumentException

  20. 20

    打开Word文件时出现运行时错误'1004'

  21. 21

    编译Java运行时库时出现Protobuf错误

  22. 22

    尝试使用pip时出现运行时错误

  23. 23

    保存NewWorkbook时出现运行时错误

  24. 24

    在 VBA 中执行 SQL 时出现运行时错误

  25. 25

    生成邮件合并时出现运行时错误 424

  26. 26

    将“:”更改为“;”时出现运行时错误 VBA

  27. 27

    使用动态数组时出现运行时错误 1004

  28. 28

    调用方法时发生运行时错误?

  29. 29

    在具有例程调用的并行区域中使用 PGI 而不是 Cray 进行编译时出现运行时错误

热门标签

归档