Eclipse 插件开发 - Detect/Listen 文件在编辑器中打开

Eclipse Plugin Development - Detect/Listen File open in editor

我需要检测文件(任何类型)何时在 Eclipse 中打开,并在发生这种情况时 运行 一些代码。

我试过以下代码,但它似乎多次调用该函数:

Display.getDefault().asyncExec(new Runnable() {
    @Override
    public void run() {
        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(new IPartListener2() {
            @Override
            public void partOpened(IWorkbenchPartReference partRef) {
                System.out.println("File opened");
            }
            
        });
    }
});

有没有办法在 Eclipse RCP 中做到这一点?

IPartListener2.partOpened 是正确的用法。确保只设置一次侦听器。

partOpened 将调用所有部分,因此您需要检查您感兴趣的部分。

@Override
public void partOpened(final IWorkbenchPartReference partRef)
{
  // Check for editor reference and get the editor part

  if (partRef instanceof IEditorReference && 
      partRef.getPart(false) instanceof IEditorPart editorPart) {
     // Example getting current IFile being edited:
     IFile file = editorPart.getEditorInput().getAdapter(IFile.class);
  }
}

注意:示例代码使用 Java 16 类型模式,对于旧版本需要修改。

另请注意,通常不需要 Display.asyncExec 来进行设置。