/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.support; /** * These exceptions are intended to be as lightweight as possible so that they may be used for * normal control flow instead of indicating a program error. * * This kind of exception does not provide stack traces. Subclasses can override this behaviour * (e.g. for debugging) by overriding {@link #shouldFillInStackTrace()}. * * @see <a href="https://blogs.oracle.com/jrose/entry/longjumps_considered_inexpensive"> * Optimization: Longjumps Considered Inexpensive</a> * @author bertm */ public class LightweightException extends Exception { private static final long serialVersionUID = -1; public LightweightException() { super(); } public LightweightException(String message) { super(message); } public LightweightException(Throwable cause) { super(cause); } public LightweightException(String message, Throwable cause) { super(message, cause); } /** * Allows subclasses to override the default lack of a stack trace for debugging purposes. * The default implementation in {@link LightweightException} always returns {@code false}. * @return {@code true} if a stack trace should be provided, {@code false} for lightweight. */ protected boolean shouldFillInStackTrace() { return false; } @Override public final Throwable fillInStackTrace() { if (shouldFillInStackTrace()) { return super.fillInStackTrace(); } return null; } }