@Override
  public @Nullable Object getData(@NotNull String dataId, @NotNull Editor e, @NotNull Caret caret) {
    if (e.isDisposed() || !(e instanceof EditorEx)) {
      return null;
    }
    VirtualFile file = e.getVirtualFile();
    if (file == null || !file.isValid()) return null;

    if (HOST_EDITOR.is(dataId)) {
      return e instanceof EditorWindow ? ((EditorWindow)e).getDelegate() : e;
    }
    if (CARET.is(dataId)) {
      return caret;
    }
    if (IDE_VIEW.is(dataId)) {
      return getIdeView(e, file);
    }
    if (BGT_DATA_PROVIDER.is(dataId)) {
      return (DataProvider)slowId -> getSlowData(slowId, e, caret);
    }
    return null;
  }
@Override
  public @Nullable Object getData(@NotNull String dataId, @NotNull Editor e, @NotNull Caret caret)