public static @NotNull <T, U> Disposable createExtensionDisposable(@NotNull T extensionObject,
                                                                     @NotNull ExtensionPoint<@NotNull U> extensionPoint,
                                                                     @NotNull Predicate<? super U> removePredicate) {
    Disposable disposable = createDisposable(extensionObject, extensionPoint);
    extensionPoint.addExtensionPointListener(new ExtensionPointListener<U>() {
      @Override
      public void extensionRemoved(@NotNull U removedExtension, @NotNull PluginDescriptor pluginDescriptor) {
        if (removePredicate.test(removedExtension)) {
          Disposer.dispose(disposable);
        }
      }
    }, false, disposable);
    return disposable;
  }
public static @NotNull <T, U> Disposable createExtensionDisposable(@NotNull T extensionObject,
                                                                     @NotNull ExtensionPoint<@NotNull U> extensionPoint,
                                                                     @NotNull Predicate<? super U> removePredicate)