3

我在自定义快速修复方面遇到了麻烦,我想在我的 Eclipse 插件中提供这些,我希望在 Eclipse PDE 方面比我更有经验的人能在这个问题上给我一些提示。

据我了解,我可以通过扩展扩展点org.eclipse.ui.ide.markerResolution为特定标记 id提供自定义所谓的“快速修复”(或“解决方案”,在 Eclipse 内部术语中),例如例如一些默认的 Eclipse 标记org.eclipse.core.resources.problemmarker

这对我来说适用于默认标记类型和自定义标记类型,但是:我的IMarkerResolutionGenerator提供的 QuickFixes 只能从“问题”视图访问,而不是从我的标记显示的编辑器中访问。

我所拥有的:我在默认文本编辑器中创建标记,这会导致 (1) 带有标记工具提示消息的图标显示在左侧编辑器标尺上,标记被分配到该行,(2) 上的标记编辑器的右侧,(3)编辑器中的一些带下划线的字符,以及(4)“问题”视图中的条目。

我想要什么:就像在 Java IDE 支持中一样,我想按 Strg+1,或 Context-Menu->Quick Fix,或单击左侧标尺上的错误图标,以查看可用的快速修复并选择一个。

但是:只有在问题视图中,我才能通过按 Strg+1 或从上下文菜单中获得快速修复。

这是正常行为吗?我是否必须访问另一个扩展点或特定的编辑器功能才能将我的快速修复程序连接到它们中?我没有找到任何关于它的详细信息,除了每个人似乎都对我上面提到的这个唯一的扩展点很满意。我错过了什么?

为了完成,这是我的扩展点定义:

<extension point="org.eclipse.ui.ide.markerResolution">
    <markerResolutionGenerator
        class="com.markers.test.MarkerResolutionGenerator"
        markerType="org.eclipse.core.resources.problemmarker">
    </markerResolutionGenerator>
</extension>
4

2 回答 2

3

我有同样的问题,我不确定这是否是正确的方法,但至少它有效:

如果您想在源代码查看器中查看您的快速修复,您必须为其设置一个QuickAssistAssistant。在你的类中实现SourceViewerConfigurationoverride getQuickAssistAssistant。你可以实例化org.eclipse.jface.text.quickassist.QuickAssistAssistant,但你必须设置一个QuickAssistProcessor,所以实现org.eclipse.jface.text.quickassist.IQuickAssistProcessor接口,特别是computeQuickAssistProposals返回你的快速修复建议。

public IQuickAssistAssistant getQuickAssistAssistant(ISourceViewer sourceViewer) {
  IQuickAssistAssistant quickAssist = new QuickAssistAssistant();
  quickAssist.setQuickAssistProcessor(new MyQuickAssistProcessor());
  quickAssist.setInformationControlCreator(getInformationControlCreator(sourceViewer));
  return quickAssist; 
}

也看看上一篇文章中的代码它有点乱,但你会明白的。并在此处查看此代码以获取 的示例实现ICompletionProposal,您必须在QuickAssistProcessor.

于 2012-01-23T14:28:22.790 回答
0

如果您只是在标记扩展点添加一行:

<super type="org.eclipse.core.resources.textmarker"/>

并将属性添加到标记 marker.setAttribute(IMarker.CHAR_START, ...); marker.setAttribute(IMarker.CHAR_END, ...);

你将能够得到这个:

在文本悬停时显示快速修复

但我仍然找不到如何更改标记图标(与灯泡变体),也可以在单击注释图标后显示可能的快速修复。

于 2012-08-20T05:36:29.477 回答