--- old/src/share/classes/java/io/UncheckedIOException.java 2013-02-01 14:41:02.524350613 -0800 +++ new/src/share/classes/java/io/UncheckedIOException.java 2013-02-01 14:41:02.336350616 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,8 @@ */ package java.io; +import java.util.Objects; + /** * Wraps an {@link IOException} with an unchecked exception * @@ -31,16 +33,59 @@ * @since JDK1.8 */ public class UncheckedIOException extends RuntimeException { + private static final long serialVersionUID = -8134305061645241065L; + + /** + * Constructs an instance of this class. + * + * @param message + * the detail message + * @param cause + * the {@code IOException} + * + * @throws NullPointerException + * if the cause is {@code null} + */ public UncheckedIOException(String message, IOException cause) { - super(message, cause); + super(message, Objects.requireNonNull(cause)); } + /** + * Constructs an instance of this class. + * + * @param cause + * the {@code IOException} + * + * @throws NullPointerException + * if the cause is {@code null} + */ public UncheckedIOException(IOException cause) { - super(cause); + super(Objects.requireNonNull(cause)); } + /** + * Returns the cause of this exception. + * + * @return the cause + */ @Override public IOException getCause() { return (IOException) super.getCause(); } + + /** + * Called to read the object from a stream. + * + * @throws InvalidObjectException + * if the object is invalid or has a cause that is not + * an {@code IOException} + */ + private void readObject(ObjectInputStream s) + throws IOException, ClassNotFoundException + { + s.defaultReadObject(); + Throwable cause = super.getCause(); + if (!(cause instanceof IOException)) + throw new InvalidObjectException("Cause must be an IOException"); + } }