public static @NotNull <T> Disposable createKeyedExtensionDisposable(@NotNull T extensionObject,
                                                                       @NotNull ExtensionPoint<@NotNull KeyedLazyInstance<T>> extensionPoint) {
    Disposable disposable = createDisposable(extensionObject, extensionPoint);
    extensionPoint.addExtensionPointListener(new ExtensionPointListener<KeyedLazyInstance<T>>() {
      @Override
      public void extensionRemoved(@NotNull KeyedLazyInstance<T> removedExtension, @NotNull PluginDescriptor pluginDescriptor) {
        if (extensionObject == removedExtension.getInstance()) {
          Disposer.dispose(disposable);
        }
      }
    }, false, disposable);
    return disposable;
  }
public static @NotNull <T> Disposable createKeyedExtensionDisposable(@NotNull T extensionObject,
                                                                       @NotNull ExtensionPoint<@NotNull KeyedLazyInstance<T>> extensionPoint)