| // Copyright 2014 The Bazel Authors. All rights reserved. | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //    http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 | // All Rights Reserved. | 
 |  | 
 | package com.google.devtools.build.lib.vfs; | 
 |  | 
 | import java.io.IOException; | 
 |  | 
 | /** | 
 |  * Signals that an I/O exception of some sort has occurred. Contrary to | 
 |  * <code>java.io.IOException</code>, this class is a subclass of | 
 |  * <code>RuntimeException</code>, which allows you to signal an I/O problem | 
 |  * without polluting the callers. For details on why checked exceptions is bad, | 
 |  * try searching for "java checked exception mistake" on Google. | 
 |  */ | 
 | public class IORuntimeException extends RuntimeException { | 
 |   /** | 
 |    * Constructs a new IORuntimeException with null as its detail message. | 
 |    */ | 
 |   public IORuntimeException() { | 
 |     super(); | 
 |   } | 
 |  | 
 |   /** | 
 |    * Constructs a new IORuntimeException with the specified detail message. | 
 |    */ | 
 |   public IORuntimeException(String message) { | 
 |     super(message); | 
 |   } | 
 |  | 
 |   /** | 
 |    * Constructs a new IORuntimeException with the specified detail message and | 
 |    * cause. | 
 |    * | 
 |    * @param message the detail message, which is saved for later retrieval by | 
 |    *        the <code>Throwable.getMessage()</code> method. | 
 |    * @param cause the cause (which is saved for later retrieval by the | 
 |    *        <code>Throwable.getCause()</code> method). (A null value is | 
 |    *        permitted, and indicates that the cause is nonexistent or unknown.) | 
 |    */ | 
 |   public IORuntimeException(String message, Throwable cause) { | 
 |     super(message, cause); | 
 |   } | 
 |  | 
 |   /** | 
 |    * Constructs a new IORuntimeException as a wrapper on a root cause | 
 |    */ | 
 |   public IORuntimeException(Throwable cause) { | 
 |     super(cause); | 
 |   } | 
 |  | 
 |   /** | 
 |    * @return the actual IOException that caused this exception, or null if it | 
 |    *         was not caused by an IOException. Call <code>getCause()</code> | 
 |    *         instead if it was caused by other types of exceptions. | 
 |    */ | 
 |   public IOException getCauseIOException() { | 
 |     Throwable cause = getCause(); | 
 |     if (cause instanceof IOException) { | 
 |       return (IOException) cause; | 
 |     } else { | 
 |       return null; | 
 |     } | 
 |   } | 
 |  | 
 |   private static final long serialVersionUID = 1L; | 
 | } |