Clover coverage report - PMD - 3.7
Coverage timestamp: Wed May 31 2006 09:25:59 EDT
file stats: LOC: 189   Methods: 5
NCLOC: 107   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
ParseException.java 0% 9.3% 40% 8.8%
coverage coverage
 1    /* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
 2    package net.sourceforge.pmd.ast;
 3   
 4    /**
 5    * This exception is thrown when parse errors are encountered.
 6    * You can explicitly create objects of this exception type by
 7    * calling the method generateParseException in the generated
 8    * parser.
 9    * <p/>
 10    * You can modify this class to customize your error reporting
 11    * mechanisms so long as you retain the public fields.
 12    */
 13    public class ParseException extends RuntimeException {
 14   
 15    /**
 16    * This constructor is used by the method "generateParseException"
 17    * in the generated parser. Calling this constructor generates
 18    * a new object of this type with the fields "currentToken",
 19    * "expectedTokenSequences", and "tokenImage" set. The boolean
 20    * flag "specialConstructor" is also set to true to indicate that
 21    * this constructor was used to create this object.
 22    * This constructor calls its super class with the empty string
 23    * to force the "toString" method of parent class "Throwable" to
 24    * print the error message in the form:
 25    * ParseException: <result of getMessage>
 26    */
 27  1 public ParseException(Token currentTokenVal,
 28    int[][] expectedTokenSequencesVal,
 29    String[] tokenImageVal) {
 30  1 super("");
 31  1 specialConstructor = true;
 32  1 currentToken = currentTokenVal;
 33  1 expectedTokenSequences = expectedTokenSequencesVal;
 34  1 tokenImage = tokenImageVal;
 35    }
 36   
 37    /**
 38    * The following constructors are for use by you for whatever
 39    * purpose you can think of. Constructing the exception in this
 40    * manner makes the exception behave in the normal way - i.e., as
 41    * documented in the class "Throwable". The fields "errorToken",
 42    * "expectedTokenSequences", and "tokenImage" do not contain
 43    * relevant information. The JavaCC generated code does not use
 44    * these constructors.
 45    */
 46   
 47  0 public ParseException() {
 48  0 super();
 49  0 specialConstructor = false;
 50    }
 51   
 52  7 public ParseException(String message) {
 53  7 super(message);
 54  7 specialConstructor = false;
 55    }
 56   
 57    /**
 58    * This variable determines which constructor was used to create
 59    * this object and thereby affects the semantics of the
 60    * "getMessage" method (see below).
 61    */
 62    protected boolean specialConstructor;
 63   
 64    /**
 65    * This is the last token that has been consumed successfully. If
 66    * this object has been created due to a parse error, the token
 67    * followng this token will (therefore) be the first error token.
 68    */
 69    public Token currentToken;
 70   
 71    /**
 72    * Each entry in this array is an array of integers. Each array
 73    * of integers represents a sequence of tokens (by their ordinal
 74    * values) that is expected at this point of the parse.
 75    */
 76    public int[][] expectedTokenSequences;
 77   
 78    /**
 79    * This is a reference to the "tokenImage" array of the generated
 80    * parser within which the parse error occurred. This array is
 81    * defined in the generated ...Constants interface.
 82    */
 83    public String[] tokenImage;
 84   
 85    /**
 86    * This method has the standard behavior when this object has been
 87    * created using the standard constructors. Otherwise, it uses
 88    * "currentToken" and "expectedTokenSequences" to generate a parse
 89    * error message and returns it. If this object has been created
 90    * due to a parse error, and you do not catch it (it gets thrown
 91    * from the parser), then this method is called during the printing
 92    * of the final stack trace, and hence the correct error message
 93    * gets displayed.
 94    */
 95  0 public String getMessage() {
 96  0 if (!specialConstructor) {
 97  0 return super.getMessage();
 98    }
 99  0 StringBuffer expected = new StringBuffer();
 100  0 int maxSize = 0;
 101  0 for (int i = 0; i < expectedTokenSequences.length; i++) {
 102  0 if (maxSize < expectedTokenSequences[i].length) {
 103  0 maxSize = expectedTokenSequences[i].length;
 104    }
 105  0 for (int j = 0; j < expectedTokenSequences[i].length; j++) {
 106  0 expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
 107    }
 108  0 if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
 109  0 expected.append("...");
 110    }
 111  0 expected.append(eol).append(" ");
 112    }
 113  0 String retval = "Encountered \"";
 114  0 Token tok = currentToken.next;
 115  0 for (int i = 0; i < maxSize; i++) {
 116  0 if (i != 0) retval += " ";
 117  0 if (tok.kind == 0) {
 118  0 retval += tokenImage[0];
 119  0 break;
 120    }
 121  0 retval += add_escapes(tok.image);
 122  0 tok = tok.next;
 123    }
 124  0 retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
 125  0 retval += "." + eol;
 126  0 if (expectedTokenSequences.length == 1) {
 127  0 retval += "Was expecting:" + eol + " ";
 128    } else {
 129  0 retval += "Was expecting one of:" + eol + " ";
 130    }
 131  0 retval += expected.toString();
 132  0 return retval;
 133    }
 134   
 135    /**
 136    * The end of line string for this machine.
 137    */
 138    protected String eol = System.getProperty("line.separator", "\n");
 139   
 140    /**
 141    * Used to convert raw characters to their escaped version
 142    * when these raw version cannot be used as part of an ASCII
 143    * string literal.
 144    */
 145  0 protected String add_escapes(String str) {
 146  0 StringBuffer retval = new StringBuffer();
 147  0 char ch;
 148  0 for (int i = 0; i < str.length(); i++) {
 149  0 switch (str.charAt(i)) {
 150  0 case 0:
 151  0 continue;
 152  0 case '\b':
 153  0 retval.append("\\b");
 154  0 continue;
 155  0 case '\t':
 156  0 retval.append("\\t");
 157  0 continue;
 158  0 case '\n':
 159  0 retval.append("\\n");
 160  0 continue;
 161  0 case '\f':
 162  0 retval.append("\\f");
 163  0 continue;
 164  0 case '\r':
 165  0 retval.append("\\r");
 166  0 continue;
 167  0 case '\"':
 168  0 retval.append("\\\"");
 169  0 continue;
 170  0 case '\'':
 171  0 retval.append("\\\'");
 172  0 continue;
 173  0 case '\\':
 174  0 retval.append("\\\\");
 175  0 continue;
 176  0 default:
 177  0 if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
 178  0 String s = "0000" + Integer.toString(ch, 16);
 179  0 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
 180    } else {
 181  0 retval.append(ch);
 182    }
 183  0 continue;
 184    }
 185    }
 186  0 return retval.toString();
 187    }
 188   
 189    }