public static void onError(
    @Nullable PluginId pluginId,
    @NotNull Throwable throwable,
    @Nullable VMOptions.MemoryKind memoryErrorKind
  ) {
    try {
      var description = new ThrowableDescription(throwable);
      var data = new ArrayList<EventPair<?>>();
      data.add(EventFields.PluginInfo.with(pluginId == null ? getPlatformPlugin() : getPluginInfoById(pluginId)));
      data.add(errorField.with(description.getThrowableClass()));

      if (memoryErrorKind != null) {
        data.add(memoryErrorKindField.with(memoryErrorKind));
      }

      if (ourErrorRateThrottle.tryPass(System.currentTimeMillis())) {
        var frames = description.getLastFrames(50);
        var frameHash = frames.hashCode();

        data.add(errorHashField.with(frameHash));

        if (ourErrorIdentityThrottle.tryPass(frameHash, System.currentTimeMillis())) {
          data.add(errorFramesField.with(frames));
          data.add(errorSizeField.with(description.getSize()));
        }
      }
      else {
        data.add(tooManyErrorsField.with(true));
      }

      IDE_ERROR.log(data);
    }
    catch (Exception e) {
      LOG.warn(e);
    }
  }
public static void onError(
    @Nullable PluginId pluginId,
    @NotNull Throwable throwable,
    @Nullable VMOptions.MemoryKind memoryErrorKind
  )