From e36f099be9a09e8db09832a49a49ac8f3f423fce Mon Sep 17 00:00:00 2001 From: Alex Panchenko Date: Mon, 1 Apr 2024 17:31:13 +0200 Subject: [PATCH] StatusException/StatusRuntimeException hide stack trace in a simpler way (#11064) --- api/src/main/java/io/grpc/StatusException.java | 16 ++-------------- .../java/io/grpc/StatusRuntimeException.java | 17 ++--------------- 2 files changed, 4 insertions(+), 29 deletions(-) diff --git a/api/src/main/java/io/grpc/StatusException.java b/api/src/main/java/io/grpc/StatusException.java index e89ac16dc6..b719f88113 100644 --- a/api/src/main/java/io/grpc/StatusException.java +++ b/api/src/main/java/io/grpc/StatusException.java @@ -27,7 +27,6 @@ public class StatusException extends Exception { private static final long serialVersionUID = -660954903976144640L; private final Status status; private final Metadata trailers; - private final boolean fillInStackTrace; /** * Constructs an exception with both a status. See also {@link Status#asException()}. @@ -49,21 +48,10 @@ public class StatusException extends Exception { } StatusException(Status status, @Nullable Metadata trailers, boolean fillInStackTrace) { - super(Status.formatThrowableMessage(status), status.getCause()); + super(Status.formatThrowableMessage(status), status.getCause(), + /* enableSuppression */ true, /* writableStackTrace */fillInStackTrace); this.status = status; this.trailers = trailers; - this.fillInStackTrace = fillInStackTrace; - fillInStackTrace(); - } - - @Override - public synchronized Throwable fillInStackTrace() { - // Let's observe final variables in two states! This works because Throwable will invoke this - // method before fillInStackTrace is set, thus doing nothing. After the constructor has set - // fillInStackTrace, this method will properly fill it in. Additionally, sub classes may call - // this normally, because fillInStackTrace will either be set, or this method will be - // overriden. - return fillInStackTrace ? super.fillInStackTrace() : this; } /** diff --git a/api/src/main/java/io/grpc/StatusRuntimeException.java b/api/src/main/java/io/grpc/StatusRuntimeException.java index 68b816fc7f..70c4d10f0b 100644 --- a/api/src/main/java/io/grpc/StatusRuntimeException.java +++ b/api/src/main/java/io/grpc/StatusRuntimeException.java @@ -29,8 +29,6 @@ public class StatusRuntimeException extends RuntimeException { private final Status status; private final Metadata trailers; - private final boolean fillInStackTrace; - /** * Constructs the exception with both a status. See also {@link Status#asRuntimeException()}. * @@ -51,21 +49,10 @@ public class StatusRuntimeException extends RuntimeException { } StatusRuntimeException(Status status, @Nullable Metadata trailers, boolean fillInStackTrace) { - super(Status.formatThrowableMessage(status), status.getCause()); + super(Status.formatThrowableMessage(status), status.getCause(), + /* enable suppressions */ true, /* writableStackTrace */ fillInStackTrace); this.status = status; this.trailers = trailers; - this.fillInStackTrace = fillInStackTrace; - fillInStackTrace(); - } - - @Override - public synchronized Throwable fillInStackTrace() { - // Let's observe final variables in two states! This works because Throwable will invoke this - // method before fillInStackTrace is set, thus doing nothing. After the constructor has set - // fillInStackTrace, this method will properly fill it in. Additionally, sub classes may call - // this normally, because fillInStackTrace will either be set, or this method will be - // overriden. - return fillInStackTrace ? super.fillInStackTrace() : this; } /**