001/*
002 * Copyright (c) 2005 Peter Palotas, Fredrik Johansson, Einar Pehrson,
003 * Sebastian Kekkonen, Lars Magnus Lang, Malin Johansson and Sofia Nilsson
004 *
005 * This file is part of
006 * CleanSheets Extension for Assertions
007 *
008 * CleanSheets Extension for Assertions is free software; you can
009 * redistribute it and/or modify it under the terms of the GNU General Public
010 * License as published by the Free Software Foundation; either version 2 of
011 * the License, or (at your option) any later version.
012 *
013 * CleanSheets Extension for Assertions is distributed in the hope that
014 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
015 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016 * See the GNU General Public License for more details.
017 *
018 * You should have received a copy of the GNU General Public License
019 * along with CleanSheets Extension for Assertions; if not, write to the
020 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
021 * Boston, MA  02111-1307  USA
022 */
023package csheets.ext.assertion;
024
025/** Representing a parse error of an assertion. Thrown by Assertion().
026        @author Fredrik Johansson
027        @author Peter Palotas
028*/
029public class AssertionException extends Exception {
030        static final long serialVersionUID = 2950555036431465919L;
031        private int line;
032        private int column;
033        private String errorMsg;
034
035        public AssertionException(int line, int column, String errorMsg) {
036                this.line = line;
037                this.column = column;
038                this.errorMsg = errorMsg;
039        }
040
041        public AssertionException(String errorMsg) {
042                this.line = this.column = -1;
043                this.errorMsg = errorMsg;
044        }
045
046        public AssertionException(antlr.RecognitionException re) {
047                this.line = re.getLine();
048                this.column = re.getColumn();
049                this.errorMsg = re.toString();
050        }
051
052        public AssertionException(antlr.TokenStreamException tse) {
053                this.line = -1;
054                this.column = -1;
055                this.errorMsg = tse.toString();
056        }
057
058        public AssertionException(antlr.CharStreamException cse) {
059                this.line = -1;
060                this.column = -1;
061                this.errorMsg = cse.toString();
062        }
063
064        public AssertionException(antlr.MismatchedCharException ex) {
065                this.line = ex.getLine();
066                this.column = ex.getColumn();
067                this.errorMsg = ex.getMessage();
068        }
069
070        public AssertionException(antlr.MismatchedTokenException ex) {
071                this.line = ex.getLine();
072                this.column = ex.getColumn();
073                this.errorMsg = ex.getMessage();
074        }
075
076        public AssertionException(antlr.NoViableAltException ex) {
077                this.line = ex.getLine();
078                this.column = ex.getColumn();
079                this.errorMsg = ex.getMessage();
080        }
081
082        public AssertionException(antlr.NoViableAltForCharException ex) {
083                this.line = ex.getLine();
084                this.column = ex.getColumn();
085                this.errorMsg = ex.getMessage();
086        }
087
088        /** Returns <code>true</code> if this exception contains information
089                about where in the assertion string the error occured,
090                meaning getLine() and getColumn() will return
091                correct values. Returns <code>false</code> otherwise.
092        */
093        public boolean hasLocationInfo() {
094                return (this.column != -1);
095        }
096
097        /** Returns the line of the assertion on which this
098                error occured if hasLocationInfo() returns
099                <code>true</code>. Otherwise <code>-1</code> will
100                be returned.
101        */
102        public int getLine() {
103                return line;
104        }
105
106        /** Returns the column of the assertion on which this
107                error occured if hasLocationInfo() returns
108                <code>true</code>. Otherwise <code>-1</code> will
109                be returned.
110        */
111        public int getColumn() {
112                return column;
113        }
114
115        /** Returns the message of this error. */
116        public String getMessage() {
117                return errorMsg;
118        }
119
120        /** Returns a message describing this error.
121        */
122        public String toString() {
123                String s = "Error parsing assertion:\n";
124                if (hasLocationInfo())
125                        s += "col " + getColumn() + ": ";
126                s += getMessage();
127                return s;
128        }
129}