diff --git a/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java b/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java index e32717cabec..a6be363f136 100644 --- a/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java +++ b/jetty-continuation/src/main/java/org/eclipse/jetty/continuation/ContinuationThrowable.java @@ -43,4 +43,9 @@ package org.eclipse.jetty.continuation; *

*/ public class ContinuationThrowable extends Error -{} +{ + public ContinuationThrowable() + { + super(null, null, false, false); + } +} diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/ConstantThrowable.java b/jetty-util/src/main/java/org/eclipse/jetty/util/ConstantThrowable.java new file mode 100644 index 00000000000..b368c90f909 --- /dev/null +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/ConstantThrowable.java @@ -0,0 +1,43 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.util; + +/** + * A {@link Throwable} that may be used in static contexts. It uses Java 7 + * constructor that prevents setting stackTrace inside exception object. + */ +public class ConstantThrowable extends Throwable { + + private String name; + + public ConstantThrowable() { + this(null); + } + + public ConstantThrowable(String name) { + super(null, null, false, false); + this.name = name; + } + + @Override + public String toString() { + return name; + } + +} diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java b/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java index 247535cb284..72ea4828a53 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/FutureCallback.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class FutureCallback implements Future,Callback { - private static Throwable COMPLETED=new Throwable(); + private static Throwable COMPLETED=new ConstantThrowable(); private final AtomicBoolean _done=new AtomicBoolean(false); private final CountDownLatch _latch=new CountDownLatch(1); private Throwable _cause; diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java b/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java index 09a770b2a0a..a471407f86c 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/FuturePromise.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class FuturePromise implements Future,Promise { - private static Throwable COMPLETED=new Throwable(); + private static Throwable COMPLETED=new ConstantThrowable(); private final AtomicBoolean _done=new AtomicBoolean(false); private final CountDownLatch _latch=new CountDownLatch(1); private Throwable _cause; diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java b/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java index 27daefd7f17..4abd732b289 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/SharedBlockingCallback.java @@ -50,30 +50,11 @@ import org.eclipse.jetty.util.thread.Invocable.InvocationType; public class SharedBlockingCallback { static final Logger LOG = Log.getLogger(SharedBlockingCallback.class); - private static Throwable IDLE = new Throwable() - { - @Override - public String toString() - { - return "IDLE"; - } - }; - private static Throwable SUCCEEDED = new Throwable() - { - @Override - public String toString() - { - return "SUCCEEDED"; - } - }; - private static Throwable FAILED = new Throwable() - { - @Override - public String toString() - { - return "FAILED"; - } - }; + + private static Throwable IDLE = new ConstantThrowable("IDLE"); + private static Throwable SUCCEEDED = new ConstantThrowable("SUCCEEDED"); + + private static Throwable FAILED = new ConstantThrowable("FAILED"); private final ReentrantLock _lock = new ReentrantLock(); private final Condition _idle = _lock.newCondition();