diff --git a/platform/platform-api/src/com/intellij/openapi/diagnostic/ErrorReportSubmitter.java b/platform/platform-api/src/com/intellij/openapi/diagnostic/ErrorReportSubmitter.java
index 099939366441..6308fc2b4c57 100644
--- a/platform/platform-api/src/com/intellij/openapi/diagnostic/ErrorReportSubmitter.java
+++ b/platform/platform-api/src/com/intellij/openapi/diagnostic/ErrorReportSubmitter.java
@@ -65,6 +65,8 @@ public abstract class ErrorReportSubmitter implements PluginAware {
/**
* This method is called whenever an exception in a plugin code had happened and a user decided to report a problem to the plugin vendor.
+ *
+ * Note: the method is not abstract because compatibility, but all implementations must override it.
*
* @param events a non-empty sequence of error descriptors.
* @param additionalInfo additional information provided by a user.
@@ -76,33 +78,24 @@ public abstract class ErrorReportSubmitter implements PluginAware {
@Nullable String additionalInfo,
@NotNull Component parentComponent,
@NotNull Consumer super SubmittedReportInfo> consumer) {
- return trySubmitAsync(events, additionalInfo, parentComponent, consumer);
+ try {
+ consumer.consume(submit(events, parentComponent));
+ return true;
+ }
+ catch (UnsupportedOperationException e) {
+ Logger.getInstance(getClass()).warn(e);
+ consumer.consume(new SubmittedReportInfo(null, e.getMessage(), SubmittedReportInfo.SubmissionStatus.FAILED));
+ return false;
+ }
}
//
/** @deprecated do not override; implement {@link #submit(IdeaLoggingEvent[], String, Component, Consumer)} instead */
@Deprecated
- @ApiStatus.ScheduledForRemoval(inVersion = "2020.3")
- @SuppressWarnings("ALL")
- public boolean trySubmitAsync(IdeaLoggingEvent[] events, String info, Component parent, Consumer super SubmittedReportInfo> consumer) {
- submitAsync(events, info, parent, consumer);
- return true;
- }
-
- /** @deprecated do not override; implement {@link #submit(IdeaLoggingEvent[], String, Component, Consumer)} instead */
- @Deprecated
- @ApiStatus.ScheduledForRemoval(inVersion = "2020.3")
- @SuppressWarnings("ALL")
- public void submitAsync(IdeaLoggingEvent[] events, String info, Component parent, Consumer super SubmittedReportInfo> consumer) {
- consumer.consume(submit(events, parent));
- }
-
- /** @deprecated do not override; implement {@link #submit(IdeaLoggingEvent[], String, Component, Consumer)} instead */
- @Deprecated
- @ApiStatus.ScheduledForRemoval(inVersion = "2020.3")
+ @ApiStatus.ScheduledForRemoval(inVersion = "2021.3")
@SuppressWarnings("ALL")
public SubmittedReportInfo submit(IdeaLoggingEvent[] events, Component parent) {
- throw new UnsupportedOperationException("Deprecated API called");
+ throw new UnsupportedOperationException("'" + getClass().getName() + "' doesn't implement exception submitter API");
}
//
-}
\ No newline at end of file
+}
diff --git a/platform/platform-impl/resources/messages/DiagnosticBundle.properties b/platform/platform-impl/resources/messages/DiagnosticBundle.properties
index 111ba49808ff..c5a72aeb108e 100644
--- a/platform/platform-impl/resources/messages/DiagnosticBundle.properties
+++ b/platform/platform-impl/resources/messages/DiagnosticBundle.properties
@@ -29,6 +29,7 @@ error.list.message.submitted=Submitted
error.list.message.submitted.as.link=Submitted as {1}
error.list.message.duplicate=[Duplicate]
error.list.message.submission.failed=Submission failed
+error.list.message.submission.failed.details=Submission failed ({0})
error.dialog.foreign.plugin.warning=This plugin is not a production of JetBrains. Please report the problem to {0}.
error.dialog.foreign.plugin.warning.unnamed=This plugin is not a production of JetBrains. Please report the problem to the plugin vendor.
error.dialog.foreign.plugin.warning.unknown=This plugin is not a production of JetBrains. Please report the problem to the plugin vendor.
diff --git a/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java b/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java
index 05d44d711037..fbecc67c27ca 100644
--- a/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java
+++ b/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java
@@ -467,14 +467,14 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
.append(DiagnosticBundle.message("error.list.disable.plugin")).append("");
}
- if (message.isSubmitted()) {
+ if (message.isSubmitting()) {
+ info.append(' ').append(DiagnosticBundle.message("error.list.message.submitting"));
+ }
+ else if (message.getSubmissionInfo() != null) {
info.append(' ').append("");
appendSubmissionInformation(message.getSubmissionInfo(), info);
info.append("");
}
- else if (message.isSubmitting()) {
- info.append(' ').append(DiagnosticBundle.message("error.list.message.submitting"));
- }
myInfoLabel.setText(info.toString());
@@ -949,7 +949,9 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
public static void appendSubmissionInformation(@NotNull SubmittedReportInfo info, @NotNull StringBuilder out) {
if (info.getStatus() == SubmittedReportInfo.SubmissionStatus.FAILED) {
- out.append(DiagnosticBundle.message("error.list.message.submission.failed"));
+ String details = info.getLinkText();
+ out.append(details != null ? DiagnosticBundle.message("error.list.message.submission.failed.details", details)
+ : DiagnosticBundle.message("error.list.message.submission.failed"));
}
else if (info.getURL() != null && info.getLinkText() != null) {
out.append(DiagnosticBundle.message("error.list.message.submitted.as.link", info.getURL(), info.getLinkText()));