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}