在重构某些遗留代码期间,需要创建我们自己的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
实例一起使用?
答案 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