void (@Nullable PluginId pluginId, @NotNull Throwable throwable, @Nullable VMOptions.MemoryKind memoryErrorKind) { try { final ThrowableDescription description = new ThrowableDescription(throwable); List<EventPair<?>> data = new ArrayList<>(); 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())) { List<String> frames = description.getLastFrames(50); int framesHash = frames.hashCode(); data.add(errorHashField.with(framesHash)); if (ourErrorIdentityThrottle.tryPass(framesHash, 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); } }