如何编写类似于现有 Find/Replace 对话框的 eclipse 插件

How to write an eclipse plugin similar to exisiting Find/Replace dialog

我想编写一个与现有 Find/Replace 对话框类似的 Eclipse 插件。 IE。如果我在焦点位于任意文本编辑器上时按下我选择的组合键,则会弹出我编写的对话框,我需要引用 IFindReplaceTarget 界面(或 IFindReplaceTargetExtension3 界面) . 这怎么可能?我需要扩展哪些扩展点?

我想要实现的顺序是

1) 按下组合键弹出对话框(我必须扩展某个我不知道的扩展点)

2) 也许然后我通过获取活动编辑器并将活动编辑器投射到此界面来获得 IFindReplaceTarget 界面。无论如何,我想要一个IFindReplaceTarget

3) 如果能够看到贡献 Find/Replace 对话框的插件的完整源代码,那也很棒。我能够打开对话框,将焦点放在它上面,然后按 Alt+Shift+F1 并访问 FindReplaceDialog class 的源代码。但是怎么才能看到整个插件的源码呢?

使用 org.eclipse.ui.commands 扩展点定义命令。

使用 org.eclipse.ui.handlers 扩展点为您的命令定义处理程序。处理程序 class 可以打开您的对话框。

使用 org.eclipse.ui.bindings 扩展点为您的命令定义键绑定。

您可以获得当前部分的 IFindReplaceTarget(如果有的话),使用类似:

IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().getActivePart();

IFindReplaceTarget target = (IFindReplaceTarget)part.getAdapter(IFindReplaceTarget.class);

以下 plugin.xml 文件完成了工作

    <?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.commands">
      <command
            id="com.florian.regexfindandreplace.commands.FindAndReplaceCommand"
            name="FindAndReplaceCommand">
         <defaultHandler
               class="com.florian.regexfindandreplace.handlers.FindAndReplaceHandler">
            <parameter
                  name="com.florian.regexfindandreplace.parameter1"
                  value="com.florian.regexfindandreplace.parameter1">
            </parameter>
         </defaultHandler>
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.bindings">
      <key
            commandId="com.florian.regexfindandreplace.commands.FindAndReplaceCommand"
            contextId="org.eclipse.ui.textEditorScope"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
            sequence="M1+F5">
      </key>

       <scheme
  name="Default"
  description="Default shortcuts for Eclipse"
  id="default.id" />
   </extension>

</plugin>

在我的处理程序中,我必须像这样重写 execute、isEnabled 和 isHandled

@Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        IWorkbenchPart part = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().getActivePart();

        IFindReplaceTarget target = (IFindReplaceTarget)part.getAdapter(IFindReplaceTarget.class);

        ExtendedFindReplaceDialog dialog = new ExtendedFindReplaceDialog(part.getSite().getShell(), target);
        dialog.setBlockOnOpen(true);
        dialog.open();

        return null;
    }

    @Override
    public boolean isEnabled() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isHandled() {
        // TODO Auto-generated method stub
        return true;
    }