mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-24 16:18:02 +01:00
343 lines
15 KiB
Diff
343 lines
15 KiB
Diff
--- a/net/minecraft/CrashReport.java
|
|
+++ b/net/minecraft/CrashReport.java
|
|
@@ -7,10 +7,10 @@
|
|
import java.io.OutputStreamWriter;
|
|
import java.io.PrintWriter;
|
|
import java.io.StringWriter;
|
|
-import java.io.Writer;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.time.ZonedDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
+import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import java.util.concurrent.CompletionException;
|
|
@@ -21,6 +21,7 @@
|
|
import org.slf4j.Logger;
|
|
|
|
public class CrashReport {
|
|
+
|
|
private static final Logger LOGGER = LogUtils.getLogger();
|
|
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
|
|
private final String title;
|
|
@@ -35,6 +36,7 @@
|
|
public CrashReport(String title, Throwable exception) {
|
|
this.title = title;
|
|
this.exception = exception;
|
|
+ this.systemReport.setDetail("CraftBukkit Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit
|
|
}
|
|
|
|
public String getTitle() {
|
|
@@ -46,31 +48,40 @@
|
|
}
|
|
|
|
public String getDetails() {
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
- this.getDetails(stringBuilder);
|
|
- return stringBuilder.toString();
|
|
+ StringBuilder stringbuilder = new StringBuilder();
|
|
+
|
|
+ this.getDetails(stringbuilder);
|
|
+ return stringbuilder.toString();
|
|
}
|
|
|
|
public void getDetails(StringBuilder builder) {
|
|
if ((this.uncategorizedStackTrace == null || this.uncategorizedStackTrace.length <= 0) && !this.details.isEmpty()) {
|
|
- this.uncategorizedStackTrace = ArrayUtils.subarray(this.details.get(0).getStacktrace(), 0, 1);
|
|
+ this.uncategorizedStackTrace = (StackTraceElement[]) ArrayUtils.subarray(((CrashReportCategory) this.details.get(0)).getStacktrace(), 0, 1);
|
|
}
|
|
|
|
if (this.uncategorizedStackTrace != null && this.uncategorizedStackTrace.length > 0) {
|
|
builder.append("-- Head --\n");
|
|
builder.append("Thread: ").append(Thread.currentThread().getName()).append("\n");
|
|
builder.append("Stacktrace:\n");
|
|
+ StackTraceElement[] astacktraceelement = this.uncategorizedStackTrace;
|
|
+ int i = astacktraceelement.length;
|
|
|
|
- for (StackTraceElement stackTraceElement : this.uncategorizedStackTrace) {
|
|
- builder.append("\t").append("at ").append(stackTraceElement);
|
|
+ for (int j = 0; j < i; ++j) {
|
|
+ StackTraceElement stacktraceelement = astacktraceelement[j];
|
|
+
|
|
+ builder.append("\t").append("at ").append(stacktraceelement);
|
|
builder.append("\n");
|
|
}
|
|
|
|
builder.append("\n");
|
|
}
|
|
|
|
- for (CrashReportCategory crashReportCategory : this.details) {
|
|
- crashReportCategory.getDetails(builder);
|
|
+ Iterator iterator = this.details.iterator();
|
|
+
|
|
+ while (iterator.hasNext()) {
|
|
+ CrashReportCategory crashreportsystemdetails = (CrashReportCategory) iterator.next();
|
|
+
|
|
+ crashreportsystemdetails.getDetails(builder);
|
|
builder.append("\n\n");
|
|
}
|
|
|
|
@@ -78,57 +89,60 @@
|
|
}
|
|
|
|
public String getExceptionMessage() {
|
|
- StringWriter stringWriter = null;
|
|
- PrintWriter printWriter = null;
|
|
- Throwable throwable = this.exception;
|
|
- if (throwable.getMessage() == null) {
|
|
- if (throwable instanceof NullPointerException) {
|
|
- throwable = new NullPointerException(this.title);
|
|
- } else if (throwable instanceof StackOverflowError) {
|
|
- throwable = new StackOverflowError(this.title);
|
|
- } else if (throwable instanceof OutOfMemoryError) {
|
|
- throwable = new OutOfMemoryError(this.title);
|
|
+ StringWriter stringwriter = null;
|
|
+ PrintWriter printwriter = null;
|
|
+ Object object = this.exception;
|
|
+
|
|
+ if (((Throwable) object).getMessage() == null) {
|
|
+ if (object instanceof NullPointerException) {
|
|
+ object = new NullPointerException(this.title);
|
|
+ } else if (object instanceof StackOverflowError) {
|
|
+ object = new StackOverflowError(this.title);
|
|
+ } else if (object instanceof OutOfMemoryError) {
|
|
+ object = new OutOfMemoryError(this.title);
|
|
}
|
|
|
|
- throwable.setStackTrace(this.exception.getStackTrace());
|
|
+ ((Throwable) object).setStackTrace(this.exception.getStackTrace());
|
|
}
|
|
|
|
- String var4;
|
|
+ String s;
|
|
+
|
|
try {
|
|
- stringWriter = new StringWriter();
|
|
- printWriter = new PrintWriter(stringWriter);
|
|
- throwable.printStackTrace(printWriter);
|
|
- var4 = stringWriter.toString();
|
|
+ stringwriter = new StringWriter();
|
|
+ printwriter = new PrintWriter(stringwriter);
|
|
+ ((Throwable) object).printStackTrace(printwriter);
|
|
+ s = stringwriter.toString();
|
|
} finally {
|
|
- IOUtils.closeQuietly((Writer)stringWriter);
|
|
- IOUtils.closeQuietly((Writer)printWriter);
|
|
+ IOUtils.closeQuietly(stringwriter);
|
|
+ IOUtils.closeQuietly(printwriter);
|
|
}
|
|
|
|
- return var4;
|
|
+ return s;
|
|
}
|
|
|
|
public String getFriendlyReport() {
|
|
- StringBuilder stringBuilder = new StringBuilder();
|
|
- stringBuilder.append("---- Minecraft Crash Report ----\n");
|
|
- stringBuilder.append("// ");
|
|
- stringBuilder.append(getErrorComment());
|
|
- stringBuilder.append("\n\n");
|
|
- stringBuilder.append("Time: ");
|
|
- stringBuilder.append(DATE_TIME_FORMATTER.format(ZonedDateTime.now()));
|
|
- stringBuilder.append("\n");
|
|
- stringBuilder.append("Description: ");
|
|
- stringBuilder.append(this.title);
|
|
- stringBuilder.append("\n\n");
|
|
- stringBuilder.append(this.getExceptionMessage());
|
|
- stringBuilder.append("\n\nA detailed walkthrough of the error, its code path and all known details is as follows:\n");
|
|
+ StringBuilder stringbuilder = new StringBuilder();
|
|
|
|
- for (int i = 0; i < 87; i++) {
|
|
- stringBuilder.append("-");
|
|
+ stringbuilder.append("---- Minecraft Crash Report ----\n");
|
|
+ stringbuilder.append("// ");
|
|
+ stringbuilder.append(getErrorComment());
|
|
+ stringbuilder.append("\n\n");
|
|
+ stringbuilder.append("Time: ");
|
|
+ stringbuilder.append(CrashReport.DATE_TIME_FORMATTER.format(ZonedDateTime.now()));
|
|
+ stringbuilder.append("\n");
|
|
+ stringbuilder.append("Description: ");
|
|
+ stringbuilder.append(this.title);
|
|
+ stringbuilder.append("\n\n");
|
|
+ stringbuilder.append(this.getExceptionMessage());
|
|
+ stringbuilder.append("\n\nA detailed walkthrough of the error, its code path and all known details is as follows:\n");
|
|
+
|
|
+ for (int i = 0; i < 87; ++i) {
|
|
+ stringbuilder.append("-");
|
|
}
|
|
|
|
- stringBuilder.append("\n\n");
|
|
- this.getDetails(stringBuilder);
|
|
- return stringBuilder.toString();
|
|
+ stringbuilder.append("\n\n");
|
|
+ this.getDetails(stringbuilder);
|
|
+ return stringbuilder.toString();
|
|
}
|
|
|
|
@Nullable
|
|
@@ -144,22 +158,25 @@
|
|
toFile.getParentFile().mkdirs();
|
|
}
|
|
|
|
- Writer writer = null;
|
|
+ OutputStreamWriter outputstreamwriter = null;
|
|
|
|
- boolean var4;
|
|
+ boolean flag;
|
|
+
|
|
try {
|
|
- writer = new OutputStreamWriter(new FileOutputStream(toFile), StandardCharsets.UTF_8);
|
|
- writer.write(this.getFriendlyReport());
|
|
+ outputstreamwriter = new OutputStreamWriter(new FileOutputStream(toFile), StandardCharsets.UTF_8);
|
|
+ outputstreamwriter.write(this.getFriendlyReport());
|
|
this.saveFile = toFile;
|
|
- return true;
|
|
- } catch (Throwable var8) {
|
|
- LOGGER.error("Could not save crash report to {}", toFile, var8);
|
|
- var4 = false;
|
|
+ boolean flag1 = true;
|
|
+
|
|
+ return flag1;
|
|
+ } catch (Throwable throwable) {
|
|
+ CrashReport.LOGGER.error("Could not save crash report to {}", toFile, throwable);
|
|
+ flag = false;
|
|
} finally {
|
|
- IOUtils.closeQuietly(writer);
|
|
+ IOUtils.closeQuietly(outputstreamwriter);
|
|
}
|
|
|
|
- return var4;
|
|
+ return flag;
|
|
}
|
|
}
|
|
|
|
@@ -172,78 +189,45 @@
|
|
}
|
|
|
|
public CrashReportCategory addCategory(String categoryName, int stacktraceLength) {
|
|
- CrashReportCategory crashReportCategory = new CrashReportCategory(categoryName);
|
|
+ CrashReportCategory crashreportsystemdetails = new CrashReportCategory(categoryName);
|
|
+
|
|
if (this.trackingStackTrace) {
|
|
- int i = crashReportCategory.fillInStackTrace(stacktraceLength);
|
|
- StackTraceElement[] stackTrace = this.exception.getStackTrace();
|
|
- StackTraceElement stackTraceElement = null;
|
|
- StackTraceElement stackTraceElement1 = null;
|
|
- int i1 = stackTrace.length - i;
|
|
- if (i1 < 0) {
|
|
- LOGGER.error("Negative index in crash report handler ({}/{})", stackTrace.length, i);
|
|
+ int j = crashreportsystemdetails.fillInStackTrace(stacktraceLength);
|
|
+ StackTraceElement[] astacktraceelement = this.exception.getStackTrace();
|
|
+ StackTraceElement stacktraceelement = null;
|
|
+ StackTraceElement stacktraceelement1 = null;
|
|
+ int k = astacktraceelement.length - j;
|
|
+
|
|
+ if (k < 0) {
|
|
+ CrashReport.LOGGER.error("Negative index in crash report handler ({}/{})", astacktraceelement.length, j);
|
|
}
|
|
|
|
- if (stackTrace != null && 0 <= i1 && i1 < stackTrace.length) {
|
|
- stackTraceElement = stackTrace[i1];
|
|
- if (stackTrace.length + 1 - i < stackTrace.length) {
|
|
- stackTraceElement1 = stackTrace[stackTrace.length + 1 - i];
|
|
+ if (astacktraceelement != null && 0 <= k && k < astacktraceelement.length) {
|
|
+ stacktraceelement = astacktraceelement[k];
|
|
+ if (astacktraceelement.length + 1 - j < astacktraceelement.length) {
|
|
+ stacktraceelement1 = astacktraceelement[astacktraceelement.length + 1 - j];
|
|
}
|
|
}
|
|
|
|
- this.trackingStackTrace = crashReportCategory.validateStackTrace(stackTraceElement, stackTraceElement1);
|
|
- if (stackTrace != null && stackTrace.length >= i && 0 <= i1 && i1 < stackTrace.length) {
|
|
- this.uncategorizedStackTrace = new StackTraceElement[i1];
|
|
- System.arraycopy(stackTrace, 0, this.uncategorizedStackTrace, 0, this.uncategorizedStackTrace.length);
|
|
+ this.trackingStackTrace = crashreportsystemdetails.validateStackTrace(stacktraceelement, stacktraceelement1);
|
|
+ if (astacktraceelement != null && astacktraceelement.length >= j && 0 <= k && k < astacktraceelement.length) {
|
|
+ this.uncategorizedStackTrace = new StackTraceElement[k];
|
|
+ System.arraycopy(astacktraceelement, 0, this.uncategorizedStackTrace, 0, this.uncategorizedStackTrace.length);
|
|
} else {
|
|
this.trackingStackTrace = false;
|
|
}
|
|
}
|
|
|
|
- this.details.add(crashReportCategory);
|
|
- return crashReportCategory;
|
|
+ this.details.add(crashreportsystemdetails);
|
|
+ return crashreportsystemdetails;
|
|
}
|
|
|
|
private static String getErrorComment() {
|
|
- String[] strings = new String[]{
|
|
- "Who set us up the TNT?",
|
|
- "Everything's going to plan. No, really, that was supposed to happen.",
|
|
- "Uh... Did I do that?",
|
|
- "Oops.",
|
|
- "Why did you do that?",
|
|
- "I feel sad now :(",
|
|
- "My bad.",
|
|
- "I'm sorry, Dave.",
|
|
- "I let you down. Sorry :(",
|
|
- "On the bright side, I bought you a teddy bear!",
|
|
- "Daisy, daisy...",
|
|
- "Oh - I know what I did wrong!",
|
|
- "Hey, that tickles! Hehehe!",
|
|
- "I blame Dinnerbone.",
|
|
- "You should try our sister game, Minceraft!",
|
|
- "Don't be sad. I'll do better next time, I promise!",
|
|
- "Don't be sad, have a hug! <3",
|
|
- "I just don't know what went wrong :(",
|
|
- "Shall we play a game?",
|
|
- "Quite honestly, I wouldn't worry myself about that.",
|
|
- "I bet Cylons wouldn't have this problem.",
|
|
- "Sorry :(",
|
|
- "Surprise! Haha. Well, this is awkward.",
|
|
- "Would you like a cupcake?",
|
|
- "Hi. I'm Minecraft, and I'm a crashaholic.",
|
|
- "Ooh. Shiny.",
|
|
- "This doesn't make any sense!",
|
|
- "Why is it breaking :(",
|
|
- "Don't do that.",
|
|
- "Ouch. That hurt :(",
|
|
- "You're mean.",
|
|
- "This is a token for 1 free hug. Redeem at your nearest Mojangsta: [~~HUG~~]",
|
|
- "There are four lights!",
|
|
- "But it works on my machine."
|
|
- };
|
|
+ String[] astring = new String[]{"Who set us up the TNT?", "Everything's going to plan. No, really, that was supposed to happen.", "Uh... Did I do that?", "Oops.", "Why did you do that?", "I feel sad now :(", "My bad.", "I'm sorry, Dave.", "I let you down. Sorry :(", "On the bright side, I bought you a teddy bear!", "Daisy, daisy...", "Oh - I know what I did wrong!", "Hey, that tickles! Hehehe!", "I blame Dinnerbone.", "You should try our sister game, Minceraft!", "Don't be sad. I'll do better next time, I promise!", "Don't be sad, have a hug! <3", "I just don't know what went wrong :(", "Shall we play a game?", "Quite honestly, I wouldn't worry myself about that.", "I bet Cylons wouldn't have this problem.", "Sorry :(", "Surprise! Haha. Well, this is awkward.", "Would you like a cupcake?", "Hi. I'm Minecraft, and I'm a crashaholic.", "Ooh. Shiny.", "This doesn't make any sense!", "Why is it breaking :(", "Don't do that.", "Ouch. That hurt :(", "You're mean.", "This is a token for 1 free hug. Redeem at your nearest Mojangsta: [~~HUG~~]", "There are four lights!", "But it works on my machine."};
|
|
|
|
try {
|
|
- return strings[(int)(Util.getNanos() % (long)strings.length)];
|
|
- } catch (Throwable var2) {
|
|
+ return astring[(int) (Util.getNanos() % (long) astring.length)];
|
|
+ } catch (Throwable throwable) {
|
|
return "Witty comment unavailable :(";
|
|
}
|
|
}
|
|
@@ -253,18 +237,21 @@
|
|
cause = cause.getCause();
|
|
}
|
|
|
|
- CrashReport report;
|
|
- if (cause instanceof ReportedException reportedException) {
|
|
- report = reportedException.getReport();
|
|
+ CrashReport crashreport;
|
|
+
|
|
+ if (cause instanceof ReportedException) {
|
|
+ ReportedException reportedexception = (ReportedException) cause;
|
|
+
|
|
+ crashreport = reportedexception.getReport();
|
|
} else {
|
|
- report = new CrashReport(description, cause);
|
|
+ crashreport = new CrashReport(description, cause);
|
|
}
|
|
|
|
- return report;
|
|
+ return crashreport;
|
|
}
|
|
|
|
public static void preload() {
|
|
MemoryReserve.allocate();
|
|
- new CrashReport("Don't panic!", new Throwable()).getFriendlyReport();
|
|
+ (new CrashReport("Don't panic!", new Throwable())).getFriendlyReport();
|
|
}
|
|
}
|