001: /*
002: $Id: GroovyBugError.java 4032 2006-08-30 07:18:49Z mguillem $
003:
004: Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
005:
006: Redistribution and use of this software and associated documentation
007: ("Software"), with or without modification, are permitted provided
008: that the following conditions are met:
009:
010: 1. Redistributions of source code must retain copyright
011: statements and notices. Redistributions must also contain a
012: copy of this document.
013:
014: 2. Redistributions in binary form must reproduce the
015: above copyright notice, this list of conditions and the
016: following disclaimer in the documentation and/or other
017: materials provided with the distribution.
018:
019: 3. The name "groovy" must not be used to endorse or promote
020: products derived from this Software without prior written
021: permission of The Codehaus. For written permission,
022: please contact info@codehaus.org.
023:
024: 4. Products derived from this Software may not be called "groovy"
025: nor may "groovy" appear in their names without prior written
026: permission of The Codehaus. "groovy" is a registered
027: trademark of The Codehaus.
028:
029: 5. Due credit should be given to The Codehaus -
030: http://groovy.codehaus.org/
031:
032: THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
033: ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
034: NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
035: FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
036: THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
037: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
038: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
039: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
040: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
041: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
042: ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
043: OF THE POSSIBILITY OF SUCH DAMAGE.
044: */
045: package org.codehaus.groovy;
046:
047: /**
048: * This class represents an error that is thrown when a bug is
049: * recognized inside the runtime. Basically it is thrown when
050: * a constraint is not fullfilled that should be fullfiled.
051: *
052: * @author Jochen Theodorou
053: */
054: public class GroovyBugError extends AssertionError {
055:
056: // message string
057: private String message;
058: // optional exception
059: private Exception exception;
060:
061: /**
062: * constructs a bug error using the given text
063: * @param message the error message text
064: */
065: public GroovyBugError(String message) {
066: this .message = message;
067: }
068:
069: /**
070: * Constructs a bug error using the given exception
071: * @param exception cause of this error
072: */
073: public GroovyBugError(Exception exception) {
074: this .exception = exception;
075: }
076:
077: /**
078: * Constructs a bug error using the given exception and
079: * a text with additional information about the cause
080: * @param msg additional information about this error
081: * @param exception cause of this error
082: */
083: public GroovyBugError(String msg, Exception exception) {
084: this .exception = exception;
085: this .message = msg;
086: }
087:
088: /**
089: * Returns a String representation of this class by calling <code>getMessage()</code>.
090: * @see #getMessage()
091: */
092: public String toString() {
093: return getMessage();
094: }
095:
096: /**
097: * Returns the detail message string of this error. The message
098: * will consist of the bug text prefixed by "BUG! " if there this
099: * isntance was created using a message. If this error was
100: * constructed without using a bug text the message of the cause
101: * is used prefixed by "BUG! UNCAUGHT EXCEPTION: "
102: *
103: * @return the detail message string of this error.
104: */
105: public String getMessage() {
106: if (message != null) {
107: return "BUG! " + message;
108: } else {
109: return "BUG! UNCAUGHT EXCEPTION: " + exception.getMessage();
110: }
111: }
112:
113: public Throwable getCause() {
114: return this .exception;
115: }
116:
117: /**
118: * Returns the bug text to describe this error
119: */
120: public String getBugText() {
121: if (message != null) {
122: return message;
123: } else {
124: return exception.getMessage();
125: }
126: }
127:
128: /**
129: * Sets the bug text to describe this error
130: */
131: public void setBugText(String msg) {
132: this.message = msg;
133: }
134: }
|