add error report functionality

This commit is contained in:
marhali 2022-02-04 11:45:09 +01:00
parent d078e3d8f6
commit ff9da52f75
4 changed files with 82 additions and 1 deletions

View File

@ -10,6 +10,7 @@
- Modularization supports namespace or locale module - Modularization supports namespace or locale module
- Full namespace / locale module support for all file types - Full namespace / locale module support for all file types
- Support for object and array elements inside json arrays - Support for object and array elements inside json arrays
- IDE integrated error report functionality
### Changed ### Changed
- Improve exception handling on IO operations - Improve exception handling on IO operations

View File

@ -0,0 +1,77 @@
package de.marhali.easyi18n.service;
import com.intellij.ide.BrowserUtil;
import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.ErrorReportSubmitter;
import com.intellij.openapi.diagnostic.IdeaLoggingEvent;
import com.intellij.openapi.diagnostic.SubmittedReportInfo;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NlsActions;
import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ResourceBundle;
/**
* Easily create issues on the project repository if exceptions occur.
* @author marhali
*/
public class ErrorReportHandler extends ErrorReportSubmitter {
@Override
public @NlsActions.ActionText @NotNull String getReportActionText() {
return ResourceBundle.getBundle("messages").getString("error.submit");
}
@Override
public boolean submit(IdeaLoggingEvent @NotNull [] events, @Nullable String additionalInfo,
@NotNull Component parentComponent, @NotNull Consumer<? super SubmittedReportInfo> consumer) {
if(events.length == 0) {
return false;
}
IdeaLoggingEvent event = events[0];
DataManager mgr = DataManager.getInstance();
DataContext context = mgr.getDataContext(parentComponent);
Project project = CommonDataKeys.PROJECT.getData(context);
String title = "IDE Error Report";
String labels = "ide report";
String body = "# Additional information\n"
+ additionalInfo + "\n"
+ "# Exception trace\n"
+ event.getMessage() + "\n"
+ "```\n"
+ event.getThrowableText()
+ "\n```";
String url = "https://github.com/marhali/easy-i18n/issues/new?title="
+ encodeParam(title) + "&labels=" + encodeParam(labels) + "&body=" + encodeParam(body);
new Task.Backgroundable(project, "Sending error report") {
@Override
public void run(@NotNull ProgressIndicator indicator) {
BrowserUtil.browse(url);
ApplicationManager.getApplication().invokeLater(() ->
consumer.consume(new SubmittedReportInfo(SubmittedReportInfo.SubmissionStatus.NEW_ISSUE)));
}
}.queue();
return true;
}
private String encodeParam(String param) {
return URLEncoder.encode(param, StandardCharsets.UTF_8);
}
}

View File

@ -36,5 +36,7 @@
<psi.referenceContributor <psi.referenceContributor
implementation="de.marhali.easyi18n.editor.generic.GenericKeyReferenceContributor" /> implementation="de.marhali.easyi18n.editor.generic.GenericKeyReferenceContributor" />
<errorHandler implementation="de.marhali.easyi18n.service.ErrorReportHandler" />
</extensions> </extensions>
</idea-plugin> </idea-plugin>

View File

@ -28,4 +28,5 @@ settings.editor.assistance=I18n key completion, annotation and reference inside
error.io=An error occurred while processing translation files. \n\ error.io=An error occurred while processing translation files. \n\
Config: {0} => {1} ({2}) \n\ Config: {0} => {1} ({2}) \n\
Path: {3} \n\ Path: {3} \n\
Please check examples at https://github.com/marhali/easy-i18n before reporting an issue! Please check examples at https://github.com/marhali/easy-i18n before reporting an issue!
error.submit=Open Issue