Clover coverage report - PMD - 3.7
Coverage timestamp: Wed May 31 2006 09:25:59 EDT
file stats: LOC: 483   Methods: 31
NCLOC: 378   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
JavaCharStream.java 29.4% 34.2% 45.2% 34.2%
coverage coverage
 1    /* Generated By:JavaCC: Do not edit this line. JavaCharStream.java Version 3.0 */
 2    package net.sourceforge.pmd.ast;
 3   
 4    /**
 5    * An implementation of interface CharStream, where the stream is assumed to
 6    * contain only ASCII characters (with java-like unicode escape processing).
 7    */
 8   
 9    public class JavaCharStream implements CharStream {
 10    public static final boolean staticFlag = false;
 11   
 12  0 static final int hexval(char c) throws java.io.IOException {
 13  0 switch (c) {
 14  0 case '0':
 15  0 return 0;
 16  0 case '1':
 17  0 return 1;
 18  0 case '2':
 19  0 return 2;
 20  0 case '3':
 21  0 return 3;
 22  0 case '4':
 23  0 return 4;
 24  0 case '5':
 25  0 return 5;
 26  0 case '6':
 27  0 return 6;
 28  0 case '7':
 29  0 return 7;
 30  0 case '8':
 31  0 return 8;
 32  0 case '9':
 33  0 return 9;
 34   
 35  0 case 'a':
 36  0 case 'A':
 37  0 return 10;
 38  0 case 'b':
 39  0 case 'B':
 40  0 return 11;
 41  0 case 'c':
 42  0 case 'C':
 43  0 return 12;
 44  0 case 'd':
 45  0 case 'D':
 46  0 return 13;
 47  0 case 'e':
 48  0 case 'E':
 49  0 return 14;
 50  0 case 'f':
 51  0 case 'F':
 52  0 return 15;
 53    }
 54   
 55  0 throw new java.io.IOException(); // Should never come here
 56    }
 57   
 58    public int bufpos = -1;
 59    int bufsize;
 60    int available;
 61    int tokenBegin;
 62    protected int bufline[];
 63    protected int bufcolumn[];
 64   
 65    protected int column = 0;
 66    protected int line = 1;
 67   
 68    protected boolean prevCharIsCR = false;
 69    protected boolean prevCharIsLF = false;
 70   
 71    protected java.io.Reader inputStream;
 72   
 73    protected char[] nextCharBuf;
 74    protected char[] buffer;
 75    protected int maxNextCharInd = 0;
 76    protected int nextCharInd = -1;
 77    protected int inBuf = 0;
 78   
 79  0 protected void ExpandBuff(boolean wrapAround) {
 80  0 char[] newbuffer = new char[bufsize + 2048];
 81  0 int newbufline[] = new int[bufsize + 2048];
 82  0 int newbufcolumn[] = new int[bufsize + 2048];
 83   
 84  0 try {
 85  0 if (wrapAround) {
 86  0 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
 87  0 System.arraycopy(buffer, 0, newbuffer,
 88    bufsize - tokenBegin, bufpos);
 89  0 buffer = newbuffer;
 90   
 91  0 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
 92  0 System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
 93  0 bufline = newbufline;
 94   
 95  0 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
 96  0 System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
 97  0 bufcolumn = newbufcolumn;
 98   
 99  0 bufpos += (bufsize - tokenBegin);
 100    } else {
 101  0 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
 102  0 buffer = newbuffer;
 103   
 104  0 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
 105  0 bufline = newbufline;
 106   
 107  0 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
 108  0 bufcolumn = newbufcolumn;
 109   
 110  0 bufpos -= tokenBegin;
 111    }
 112    } catch (Throwable t) {
 113  0 throw new RuntimeException(t.getMessage());
 114    }
 115   
 116  0 available = (bufsize += 2048);
 117  0 tokenBegin = 0;
 118    }
 119   
 120  2532 protected void FillBuff() throws java.io.IOException {
 121  2532 int i;
 122  2532 if (maxNextCharInd == 4096)
 123  0 maxNextCharInd = nextCharInd = 0;
 124   
 125  2532 try {
 126  ? if ((i = inputStream.read(nextCharBuf, maxNextCharInd,
 127    4096 - maxNextCharInd)) == -1) {
 128  1250 inputStream.close();
 129  1250 throw new java.io.IOException();
 130    } else
 131  1258 maxNextCharInd += i;
 132  1258 return;
 133    } catch (java.io.IOException e) {
 134  1274 if (bufpos != 0) {
 135  24 --bufpos;
 136  24 backup(0);
 137    } else {
 138  1250 bufline[bufpos] = line;
 139  1250 bufcolumn[bufpos] = column;
 140    }
 141  1274 throw e;
 142    }
 143    }
 144   
 145  120381 protected char ReadByte() throws java.io.IOException {
 146  120381 if (++nextCharInd >= maxNextCharInd)
 147  2532 FillBuff();
 148   
 149  119107 return nextCharBuf[nextCharInd];
 150    }
 151   
 152  64871 public char BeginToken() throws java.io.IOException {
 153  64871 if (inBuf > 0) {
 154  16866 --inBuf;
 155   
 156  16866 if (++bufpos == bufsize)
 157  0 bufpos = 0;
 158   
 159  16866 tokenBegin = bufpos;
 160  16866 return buffer[bufpos];
 161    }
 162   
 163  48005 tokenBegin = 0;
 164  48005 bufpos = -1;
 165   
 166  48005 return readChar();
 167    }
 168   
 169  0 protected void AdjustBuffSize() {
 170  0 if (available == bufsize) {
 171  0 if (tokenBegin > 2048) {
 172  0 bufpos = 0;
 173  0 available = tokenBegin;
 174    } else
 175  0 ExpandBuff(false);
 176  0 } else if (available > tokenBegin)
 177  0 available = bufsize;
 178  0 else if ((tokenBegin - available) < 2048)
 179  0 ExpandBuff(true);
 180    else
 181  0 available = tokenBegin;
 182    }
 183   
 184  119107 protected void UpdateLineColumn(char c) {
 185  119107 column++;
 186   
 187  119107 if (prevCharIsLF) {
 188  5785 prevCharIsLF = false;
 189  5785 line += (column = 1);
 190  113322 } else if (prevCharIsCR) {
 191  0 prevCharIsCR = false;
 192  0 if (c == '\n') {
 193  0 prevCharIsLF = true;
 194    } else
 195  0 line += (column = 1);
 196    }
 197   
 198  119107 switch (c) {
 199  0 case '\r':
 200  0 prevCharIsCR = true;
 201  0 break;
 202  6859 case '\n':
 203  6859 prevCharIsLF = true;
 204  6859 break;
 205  149 case '\t':
 206  149 column--;
 207  149 column += (8 - (column & 07));
 208  149 break;
 209  112099 default :
 210  112099 break;
 211    }
 212   
 213  119107 bufline[bufpos] = line;
 214  119107 bufcolumn[bufpos] = column;
 215    }
 216   
 217  120408 public char readChar() throws java.io.IOException {
 218  120408 if (inBuf > 0) {
 219  29 --inBuf;
 220   
 221  29 if (++bufpos == bufsize)
 222  0 bufpos = 0;
 223   
 224  29 return buffer[bufpos];
 225    }
 226   
 227  120379 char c;
 228   
 229  120379 if (++bufpos == available)
 230  0 AdjustBuffSize();
 231   
 232  ? if ((buffer[bufpos] = c = ReadByte()) == '\\') {
 233  2 UpdateLineColumn(c);
 234   
 235  2 int backSlashCnt = 1;
 236   
 237  2 for (; ;) // Read all the backslashes
 238    {
 239  2 if (++bufpos == available)
 240  0 AdjustBuffSize();
 241   
 242  2 try {
 243  ? if ((buffer[bufpos] = c = ReadByte()) != '\\') {
 244  2 UpdateLineColumn(c);
 245    // found a non-backslash char.
 246  2 if ((c == 'u') && ((backSlashCnt & 1) == 1)) {
 247  0 if (--bufpos < 0)
 248  0 bufpos = bufsize - 1;
 249   
 250  0 break;
 251    }
 252   
 253  2 backup(backSlashCnt);
 254  2 return '\\';
 255    }
 256    } catch (java.io.IOException e) {
 257  0 if (backSlashCnt > 1)
 258  0 backup(backSlashCnt);
 259   
 260  0 return '\\';
 261    }
 262   
 263  0 UpdateLineColumn(c);
 264  0 backSlashCnt++;
 265    }
 266   
 267    // Here, we have seen an odd number of backslash's followed by a 'u'
 268  0 try {
 269  0 while ((c = ReadByte()) == 'u')
 270  0 ++column;
 271   
 272  0 buffer[bufpos] = c = (char) (hexval(c) << 12 |
 273    hexval(ReadByte()) << 8 |
 274    hexval(ReadByte()) << 4 |
 275    hexval(ReadByte()));
 276   
 277  0 column += 4;
 278    } catch (java.io.IOException e) {
 279  0 throw new RuntimeException("Invalid escape character at line " + line +
 280    " column " + column + ".");
 281    }
 282   
 283  0 if (backSlashCnt == 1)
 284  0 return c;
 285    else {
 286  0 backup(backSlashCnt - 1);
 287  0 return '\\';
 288    }
 289    } else {
 290  119103 UpdateLineColumn(c);
 291  119103 return (c);
 292    }
 293    }
 294   
 295    /**
 296    * @see #getEndColumn
 297    * @deprecated
 298    */
 299   
 300  0 public int getColumn() {
 301  0 return bufcolumn[bufpos];
 302    }
 303   
 304    /**
 305    * @see #getEndLine
 306    * @deprecated
 307    */
 308   
 309  0 public int getLine() {
 310  0 return bufline[bufpos];
 311    }
 312   
 313  64848 public int getEndColumn() {
 314  64848 return bufcolumn[bufpos];
 315    }
 316   
 317  64848 public int getEndLine() {
 318  64848 return bufline[bufpos];
 319    }
 320   
 321  64848 public int getBeginColumn() {
 322  64848 return bufcolumn[tokenBegin];
 323    }
 324   
 325  64848 public int getBeginLine() {
 326  64848 return bufline[tokenBegin];
 327    }
 328   
 329  16908 public void backup(int amount) {
 330   
 331  16908 inBuf += amount;
 332  16908 if ((bufpos -= amount) < 0)
 333  0 bufpos += bufsize;
 334    }
 335   
 336  1258 public JavaCharStream(java.io.Reader dstream,
 337    int startline, int startcolumn, int buffersize) {
 338  1258 inputStream = dstream;
 339  1258 line = startline;
 340  1258 column = startcolumn - 1;
 341   
 342  1258 available = bufsize = buffersize;
 343  1258 buffer = new char[buffersize];
 344  1258 bufline = new int[buffersize];
 345  1258 bufcolumn = new int[buffersize];
 346  1258 nextCharBuf = new char[4096];
 347    }
 348   
 349  0 public JavaCharStream(java.io.Reader dstream,
 350    int startline, int startcolumn) {
 351  0 this(dstream, startline, startcolumn, 4096);
 352    }
 353   
 354  1258 public JavaCharStream(java.io.Reader dstream) {
 355  1258 this(dstream, 1, 1, 4096);
 356    }
 357   
 358  0 public void ReInit(java.io.Reader dstream,
 359    int startline, int startcolumn, int buffersize) {
 360  0 inputStream = dstream;
 361  0 line = startline;
 362  0 column = startcolumn - 1;
 363   
 364  0 if (buffer == null || buffersize != buffer.length) {
 365  0 available = bufsize = buffersize;
 366  0 buffer = new char[buffersize];
 367  0 bufline = new int[buffersize];
 368  0 bufcolumn = new int[buffersize];
 369  0 nextCharBuf = new char[4096];
 370    }
 371  0 prevCharIsLF = prevCharIsCR = false;
 372  0 tokenBegin = inBuf = maxNextCharInd = 0;
 373  0 nextCharInd = bufpos = -1;
 374    }
 375   
 376  0 public void ReInit(java.io.Reader dstream,
 377    int startline, int startcolumn) {
 378  0 ReInit(dstream, startline, startcolumn, 4096);
 379    }
 380   
 381  0 public void ReInit(java.io.Reader dstream) {
 382  0 ReInit(dstream, 1, 1, 4096);
 383    }
 384   
 385  0 public JavaCharStream(java.io.InputStream dstream, int startline,
 386    int startcolumn, int buffersize) {
 387  0 this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
 388    }
 389   
 390  0 public JavaCharStream(java.io.InputStream dstream, int startline,
 391    int startcolumn) {
 392  0 this(dstream, startline, startcolumn, 4096);
 393    }
 394   
 395  0 public JavaCharStream(java.io.InputStream dstream) {
 396  0 this(dstream, 1, 1, 4096);
 397    }
 398   
 399  0 public void ReInit(java.io.InputStream dstream, int startline,
 400    int startcolumn, int buffersize) {
 401  0 ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
 402    }
 403   
 404  0 public void ReInit(java.io.InputStream dstream, int startline,
 405    int startcolumn) {
 406  0 ReInit(dstream, startline, startcolumn, 4096);
 407    }
 408   
 409  0 public void ReInit(java.io.InputStream dstream) {
 410  0 ReInit(dstream, 1, 1, 4096);
 411    }
 412   
 413  40904 public String GetImage() {
 414  40904 if (bufpos >= tokenBegin)
 415  40904 return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
 416    else
 417  0 return new String(buffer, tokenBegin, bufsize - tokenBegin) +
 418    new String(buffer, 0, bufpos + 1);
 419    }
 420   
 421  5 public char[] GetSuffix(int len) {
 422  5 char[] ret = new char[len];
 423   
 424  5 if ((bufpos + 1) >= len)
 425  5 System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
 426    else {
 427  0 System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
 428    len - bufpos - 1);
 429  0 System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
 430    }
 431   
 432  5 return ret;
 433    }
 434   
 435  0 public void Done() {
 436  0 nextCharBuf = null;
 437  0 buffer = null;
 438  0 bufline = null;
 439  0 bufcolumn = null;
 440    }
 441   
 442    /**
 443    * Method to adjust line and column numbers for the start of a token.<BR>
 444    */
 445  0 public void adjustBeginLineColumn(int newLine, int newCol) {
 446  0 int start = tokenBegin;
 447  0 int len;
 448   
 449  0 if (bufpos >= tokenBegin) {
 450  0 len = bufpos - tokenBegin + inBuf + 1;
 451    } else {
 452  0 len = bufsize - tokenBegin + bufpos + 1 + inBuf;
 453    }
 454   
 455  0 int i = 0, j = 0, k = 0;
 456  0 int nextColDiff = 0, columnDiff = 0;
 457   
 458  0 while (i < len &&
 459    bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) {
 460  0 bufline[j] = newLine;
 461  0 nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
 462  0 bufcolumn[j] = newCol + columnDiff;
 463  0 columnDiff = nextColDiff;
 464  0 i++;
 465    }
 466   
 467  0 if (i < len) {
 468  0 bufline[j] = newLine++;
 469  0 bufcolumn[j] = newCol + columnDiff;
 470   
 471  0 while (i++ < len) {
 472  0 if (bufline[j = start % bufsize] != bufline[++start % bufsize])
 473  0 bufline[j] = newLine++;
 474    else
 475  0 bufline[j] = newLine;
 476    }
 477    }
 478   
 479  0 line = bufline[j];
 480  0 column = bufcolumn[j];
 481    }
 482   
 483    }