1fb3fb4f3Stomee /*
2fb3fb4f3Stomee  * CDDL HEADER START
3fb3fb4f3Stomee  *
4fb3fb4f3Stomee  * The contents of this file are subject to the terms of the
5fb3fb4f3Stomee  * Common Development and Distribution License (the "License").
6fb3fb4f3Stomee  * You may not use this file except in compliance with the License.
7fb3fb4f3Stomee  *
8fb3fb4f3Stomee  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9fb3fb4f3Stomee  * or http://www.opensolaris.org/os/licensing.
10fb3fb4f3Stomee  * See the License for the specific language governing permissions
11fb3fb4f3Stomee  * and limitations under the License.
12fb3fb4f3Stomee  *
13fb3fb4f3Stomee  * When distributing Covered Code, include this CDDL HEADER in each
14fb3fb4f3Stomee  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fb3fb4f3Stomee  * If applicable, add the following below this CDDL HEADER, with the
16fb3fb4f3Stomee  * fields enclosed by brackets "[]" replaced with your own identifying
17fb3fb4f3Stomee  * information: Portions Copyright [yyyy] [name of copyright owner]
18fb3fb4f3Stomee  *
19fb3fb4f3Stomee  * CDDL HEADER END
20fb3fb4f3Stomee  */
21fb3fb4f3Stomee 
22fb3fb4f3Stomee /*
23*4ae67516Stomee  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24fb3fb4f3Stomee  * Use is subject to license terms.
25fb3fb4f3Stomee  *
26fb3fb4f3Stomee  * ident	"%Z%%M%	%I%	%E% SMI"
27fb3fb4f3Stomee  */
28fb3fb4f3Stomee package org.opensolaris.os.dtrace;
29fb3fb4f3Stomee 
30fb3fb4f3Stomee /**
31fb3fb4f3Stomee  * Wraps a java exception encountered in native code for the purpose of
32fb3fb4f3Stomee  * adding native source filename and line number, which are otherwise
33fb3fb4f3Stomee  * not included in the stack trace of the wrapped exception.
34fb3fb4f3Stomee  *
35fb3fb4f3Stomee  * @author Tom Erickson
36fb3fb4f3Stomee  */
37fb3fb4f3Stomee class NativeException extends RuntimeException {
38fb3fb4f3Stomee     static final long serialVersionUID = 4129171856987233185L;
39fb3fb4f3Stomee 
40fb3fb4f3Stomee     /** @serial */
41fb3fb4f3Stomee     private String fileName;
42fb3fb4f3Stomee     /** @serial */
43fb3fb4f3Stomee     private int lineNumber;
44fb3fb4f3Stomee 
45fb3fb4f3Stomee     public
NativeException(String file, int line, Throwable cause)46fb3fb4f3Stomee     NativeException(String file, int line, Throwable cause)
47fb3fb4f3Stomee     {
48fb3fb4f3Stomee 	super(cause);
49fb3fb4f3Stomee 	fileName = file;
50fb3fb4f3Stomee 	lineNumber = line;
51fb3fb4f3Stomee     }
52fb3fb4f3Stomee 
53fb3fb4f3Stomee     public String
getMessage()54fb3fb4f3Stomee     getMessage()
55fb3fb4f3Stomee     {
56*4ae67516Stomee 	StringBuilder buf = new StringBuilder();
57fb3fb4f3Stomee 	buf.append(fileName);
58fb3fb4f3Stomee 	buf.append(" line ");
59fb3fb4f3Stomee 	buf.append(lineNumber);
60fb3fb4f3Stomee 	Throwable cause = getCause();
61fb3fb4f3Stomee 	if (cause != null) {
62fb3fb4f3Stomee 	    String message = cause.getMessage();
63fb3fb4f3Stomee 	    if (message != null) {
64fb3fb4f3Stomee 		buf.append(" ");
65fb3fb4f3Stomee 		buf.append(cause.getMessage());
66fb3fb4f3Stomee 	    }
67fb3fb4f3Stomee 	}
68fb3fb4f3Stomee 	return buf.toString();
69fb3fb4f3Stomee     }
70fb3fb4f3Stomee }
71