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

chr*_*mel 4 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做的代码更改。

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

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

org.eclipse.ui.ide.markerResolution对于Java源文件,使用Acanda建议的扩展点似乎很难实现。对于一个没有AST可用,只有一个IMarker实例。我如何获得AST CompilationUnit,并违规ASTNodeIMarker

更笼统:JDT中是否有API桥可用于IMarker实例` ?

Aca*_*nda 5

为了支持同时解决多个问题,您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>
Run Code Online (Sandbox Code Playgroud)

CompilationUnitIMarker甚至更棘手的位置找出违规行为确实有点棘手ASTNode。看一下eclipse-pmd 中的抽象类ASTQuickFix。它CompilationUnit从创建一个,IMarker并委托查找ASTNode其子类,子类可以定义自己的节点查找策略,例如NodeWithinPositionNodeFinder