The updated patch looks good.

Mandy

On 3/11/19 9:29 AM, Joe Darcy wrote:
Hello,

Always surprising how much discussion an (apparently) simple refactoring can generate!

Thanks to Tagir for spotting this issue.

For completeness, the two-argument forms of requireNonNull which takes a Supplier<String> is not applicable to preserve the message behavior since the loop counter i is not final or effectively final:

    Objects.requireNonNull(defensiveCopy[i],  () -> "stackTrace[" + i + "]");

Therefore, I'll revert this use of requireNonNull in Throwable but keep the other three:

diff -r 289fd6cb7480 src/java.base/share/classes/java/lang/Throwable.java
--- a/src/java.base/share/classes/java/lang/Throwable.java    Mon Mar 11 15:34:16 2019 +0100 +++ b/src/java.base/share/classes/java/lang/Throwable.java    Mon Mar 11 09:28:51 2019 -0700
@@ -914,8 +914,7 @@
                  for (Throwable t : suppressedExceptions) {
                      // Enforce constraints on suppressed exceptions in
                      // case of corrupt or malicious stream.
-                    if (t == null)
-                        throw new NullPointerException(NULL_CAUSE_MESSAGE);
+                    Objects.requireNonNull(t, NULL_CAUSE_MESSAGE);
                      if (t == this)
                         throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE);
                      suppressed.add(t);
@@ -942,8 +941,7 @@
                  stackTrace = null;
              } else { // Verify stack trace elements are non-null.
                  for(StackTraceElement ste : stackTrace) {
-                    if (ste == null)
-                        throw new NullPointerException("null StackTraceElement in serial stream. "); +                    Objects.requireNonNull(ste, "null StackTraceElement in serial stream.");
                  }
              }
          } else {
@@ -1034,8 +1032,7 @@
          if (exception == this)
             throw new IllegalArgumentException(SELF_SUPPRESSION_MESSAGE, exception);

-        if (exception == null)
-            throw new NullPointerException(NULL_CAUSE_MESSAGE);
+        Objects.requireNonNull(exception, NULL_CAUSE_MESSAGE);

         if (suppressedExceptions == null) // Suppressed exceptions not recorded
              return;

Thanks,

-Joe

Reply via email to