001: /*
002: * Copyright (c) 2002-2008 Gargoyle Software Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * 1. Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: * 2. Redistributions in binary form must reproduce the above copyright notice,
010: * this list of conditions and the following disclaimer in the documentation
011: * and/or other materials provided with the distribution.
012: * 3. The end-user documentation included with the redistribution, if any, must
013: * include the following acknowledgment:
014: *
015: * "This product includes software developed by Gargoyle Software Inc.
016: * (http://www.GargoyleSoftware.com/)."
017: *
018: * Alternately, this acknowledgment may appear in the software itself, if
019: * and wherever such third-party acknowledgments normally appear.
020: * 4. The name "Gargoyle Software" must not be used to endorse or promote
021: * products derived from this software without prior written permission.
022: * For written permission, please contact info@GargoyleSoftware.com.
023: * 5. Products derived from this software may not be called "HtmlUnit", nor may
024: * "HtmlUnit" appear in their name, without prior written permission of
025: * Gargoyle Software Inc.
026: *
027: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
028: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
029: * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
030: * SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
031: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
032: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
033: * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
034: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
035: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
036: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
037: */
038: package com.gargoylesoftware.htmlunit.javascript;
039:
040: import com.gargoylesoftware.htmlunit.Assert;
041: import org.apache.commons.logging.Log;
042: import org.mozilla.javascript.ErrorReporter;
043: import org.mozilla.javascript.EvaluatorException;
044:
045: /**
046: * A javascript error reporter that will log all warnings and errors, no matter how trivial.
047: *
048: * @version $Revision: 2132 $
049: * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
050: */
051: public class StrictErrorReporter implements ErrorReporter {
052: private final Log log_;
053:
054: /**
055: * Create an instance.
056: *
057: * @param log The log to use when reporting errors
058: */
059: public StrictErrorReporter(final Log log) {
060: Assert.notNull("log", log);
061: log_ = log;
062: }
063:
064: /**
065: * Log a warning
066: *
067: * @param message The message to be displayed.
068: * @param sourceName The name of the source file
069: * @param line The line number
070: * @param lineSource The source code that failed
071: * @param lineOffset The line offset
072: */
073: public void warning(final String message, final String sourceName,
074: final int line, final String lineSource,
075: final int lineOffset) {
076: log_.warn(format("warning", message, sourceName, line,
077: lineSource, lineOffset));
078: }
079:
080: /**
081: * Log an error
082: *
083: * @param message The message to be displayed.
084: * @param sourceName The name of the source file
085: * @param line The line number
086: * @param lineSource The source code that failed
087: * @param lineOffset The line offset
088: */
089: public void error(final String message, final String sourceName,
090: final int line, final String lineSource,
091: final int lineOffset) {
092:
093: log_.error(format("error", message, sourceName, line,
094: lineSource, lineOffset));
095: throw new EvaluatorException(message, sourceName, line,
096: lineSource, lineOffset);
097: }
098:
099: /**
100: * Log a runtime error
101: *
102: * @param message The message to be displayed.
103: * @param sourceName The name of the source file
104: * @param line The line number
105: * @param lineSource The source code that failed
106: * @param lineOffset The line offset
107: * @return An evaluator exception
108: */
109: public EvaluatorException runtimeError(final String message,
110: final String sourceName, final int line,
111: final String lineSource, final int lineOffset) {
112:
113: log_.error(format("runtimeError", message, sourceName, line,
114: lineSource, lineOffset));
115: return new EvaluatorException(message, sourceName, line,
116: lineSource, lineOffset);
117: }
118:
119: private String format(final String prefix, final String message,
120: final String sourceName, final int line,
121: final String lineSource, final int lineOffset) {
122:
123: return prefix + ": message=[" + message + "] sourceName=["
124: + sourceName + "] line=[" + line + "] lineSource=["
125: + lineSource + "] lineOffset=[" + lineOffset + "]";
126: }
127: }
|