ParseException.java

00001 /* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
00002 package org.objectweb.jonas_ejb.deployment.ejbql;
00003 
00016 public class ParseException extends Exception {
00017 
00030   public ParseException(Token currentTokenVal,
00031                         int[][] expectedTokenSequencesVal,
00032                         String[] tokenImageVal
00033                        )
00034   {
00035     super("");
00036     specialConstructor = true;
00037     currentToken = currentTokenVal;
00038     expectedTokenSequences = expectedTokenSequencesVal;
00039     tokenImage = tokenImageVal;
00040   }
00041 
00052   public ParseException() {
00053     super();
00054     specialConstructor = false;
00055   }
00056 
00057   public ParseException(String message) {
00058     super(message);
00059     specialConstructor = false;
00060   }
00061 
00067   protected boolean specialConstructor;
00068 
00074   public Token currentToken;
00075 
00081   public int[][] expectedTokenSequences;
00082 
00088   public String[] tokenImage;
00089 
00100   public String getMessage(String query) {
00101     if (!specialConstructor) {
00102       return super.getMessage();
00103     }
00104     String expected = "";
00105     int maxSize = 0;
00106     for (int i = 0; i < expectedTokenSequences.length; i++) {
00107       if (maxSize < expectedTokenSequences[i].length) {
00108         maxSize = expectedTokenSequences[i].length;
00109       }
00110       for (int j = 0; j < expectedTokenSequences[i].length; j++) {
00111         expected += tokenImage[expectedTokenSequences[i][j]] + " ";
00112       }
00113       if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
00114         expected += "...";
00115       }
00116       expected += eol + "    ";
00117     }
00118     String retval = "Encountered \"";
00119     Token tok = currentToken.next;
00120     for (int i = 0; i < maxSize; i++) {
00121       if (i != 0) retval += " ";
00122       if (tok.kind == 0) {
00123         retval += tokenImage[0];
00124         break;
00125       }
00126       retval += add_escapes(tok.image);
00127       tok = tok.next; 
00128     }
00129     // begin of ObjectWeb changes
00130     // retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
00131     if ((query==null) || ("".equals(query))) {
00132         retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
00133     } else {
00134         // display the part of the query that was parsed (assuming one line)
00135         retval += "\" after \""+query.substring(0,currentToken.next.beginColumn-1)+"\""+ eol;
00136         retval += "in \""+query+"\"";
00137     }
00138     // end of ObjectWeb changes
00139     retval += "." + eol;
00140     if (expectedTokenSequences.length == 1) {
00141       retval += "Was expecting:" + eol + "    ";
00142     } else {
00143       retval += "Was expecting one of:" + eol + "    ";
00144     }
00145     retval += expected;
00146     return retval;
00147   }
00148 
00152   protected String eol = System.getProperty("line.separator", "\n");
00153  
00159   protected String add_escapes(String str) {
00160       StringBuffer retval = new StringBuffer();
00161       char ch;
00162       for (int i = 0; i < str.length(); i++) {
00163         switch (str.charAt(i))
00164         {
00165            case 0 :
00166               continue;
00167            case '\b':
00168               retval.append("\\b");
00169               continue;
00170            case '\t':
00171               retval.append("\\t");
00172               continue;
00173            case '\n':
00174               retval.append("\\n");
00175               continue;
00176            case '\f':
00177               retval.append("\\f");
00178               continue;
00179            case '\r':
00180               retval.append("\\r");
00181               continue;
00182            case '\"':
00183               retval.append("\\\"");
00184               continue;
00185            case '\'':
00186               retval.append("\\\'");
00187               continue;
00188            case '\\':
00189               retval.append("\\\\");
00190               continue;
00191            default:
00192               if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
00193                  String s = "0000" + Integer.toString(ch, 16);
00194                  retval.append("\\u" + s.substring(s.length() - 4, s.length()));
00195               } else {
00196                  retval.append(ch);
00197               }
00198               continue;
00199         }
00200       }
00201       return retval.toString();
00202    }
00203 
00204 }

Generated on Tue Feb 15 15:05:46 2005 for JOnAS by  doxygen 1.3.9.1