EvalException.java revision 3062:15bdc18525ff
1/*
2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package jdk.jshell;
27
28/**
29 * Wraps an exception thrown in the remotely executing client.
30 * An instance of <code>EvalException</code> can be returned in the
31 * {@link jdk.jshell.SnippetEvent#exception()} query.
32 * The name of the exception thrown is available from
33 * {@link jdk.jshell.EvalException#getExceptionClassName()}.
34 * Message and stack can be queried by methods on <code>Exception</code>.
35 * <p>
36 * Note that in stack trace frames representing JShell Snippets,
37 * <code>StackTraceElement.getFileName()</code> will return "#" followed by
38 * the Snippet id and for snippets without a method name (for example an
39 * expression) <code>StackTraceElement.getMethodName()</code> will be the
40 * empty string.
41 */
42@SuppressWarnings("serial")             // serialVersionUID intentionally omitted
43public class EvalException extends Exception {
44    private final String exceptionClass;
45
46    EvalException(String message, String exceptionClass, StackTraceElement[] stackElements) {
47        super(message);
48        this.exceptionClass = exceptionClass;
49        this.setStackTrace(stackElements);
50    }
51
52    /**
53     * Returns the name of the Throwable subclass which was thrown in the
54     * executing client. Note this class may not be loaded in the controlling
55     * process.
56     * See
57     * {@link java.lang.Class#getName() Class.getName()} for the format of the string.
58     * @return the name of the exception class as a String
59     */
60    public String getExceptionClassName() {
61        return exceptionClass;
62    }
63
64}
65