如何为Java源文件中的多个问题编写Eclipse QuickFix

时间:2014-02-07 09:38:44

标签: java eclipse eclipse-jdt

在重构某些遗留代码期间,需要创建我们自己的Eclipse Quick Fix来对代码进行一些小的修正。这篇文章(本身)在本文之后(德语)很简单: http://jaxenter.de/artikel/Eclipse-JDT-um-eigene-Quickfixes-erweitern

快速修复(IQuickFixProcessor)通过扩展点org.eclipse.jdt.ui.quickFixProcessors添加,创建了IJavaCompletionProposal来完成工作。 IQuickFixProcessor有一个AST可以随时进行代码更改。

我现在面临的问题是,我一次只能将快速修复应用于一个问题。如果我选择多个问题(所有相同类型,因此我的自定义快速修复适用),我会收到错误“所选问题没有常见的适用快速修复”。

如何创建可用于同一类型的多个问题的快速修复?

使用Acanda建议的扩展点org.eclipse.ui.ide.markerResolution似乎很难为Java源文件实现。例如,没有AST可用,只有IMarker个实例。如何获取CompilationUnit的AST ASTNode和有问题的IMarker

更一般:JDT中是否有API桥接器与IMarker实例一起使用?

2 个答案:

答案 0 :(得分:4)

要在快速修复必须实施org.eclipse.ui.views.markers.WorkbenchMarkerResolution的同时支持修复多个问题,必须使用扩展点org.eclipse.ui.ide.markerResolution进行注册。以下示例来自Eclipse插件eclipse-pmd:

<extension
     point="org.eclipse.ui.ide.markerResolution">
   <markerResolutionGenerator
        class="ch.acanda.eclipse.pmd.java.resolution.PMDMarkerResolutionGenerator"
        markerType="ch.acanda.eclipse.pmd.core.pmdMarker">
   </markerResolutionGenerator>
</extension>

CompilationUnit创建IMarker甚至更难找到有问题的ASTNode确实有点棘手。从eclipse-pmd看一下抽象类ASTQuickFix。它从CompilationUnit创建IMarker并委托将ASTNode发现到其子类,这些子类可以定义自己的节点查找策略,例如: NodeWithinPositionNodeFinder

答案 1 :(得分:1)

获取ASTNode的{​​{1}}:

IMarker