View Javadoc

1   /* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
2   
3   /************************************************************************************************************************
4    * Copyright (c) Jonas BonŽr, Alexandre Vasseur. All rights reserved. * http://aspectwerkz.codehaus.org *
5    * ---------------------------------------------------------------------------------- * The software in this package is
6    * published under the terms of the LGPL license * a copy of which has been included with this distribution in the
7    * license.txt file. *
8    **********************************************************************************************************************/
9   package org.codehaus.aspectwerkz.annotation.expression.ast;
10  
11  public class TokenMgrError extends Error {
12      /*
13       * Ordinals for various reasons why an Error of this type can be thrown.
14       */
15  
16      /***
17       * Lexical error occured.
18       */
19      static final int LEXICAL_ERROR = 0;
20  
21      /***
22       * An attempt wass made to create a second instance of a static token manager.
23       */
24      static final int STATIC_LEXER_ERROR = 1;
25  
26      /***
27       * Tried to change to an invalid lexical state.
28       */
29      static final int INVALID_LEXICAL_STATE = 2;
30  
31      /***
32       * Detected (and bailed out of) an infinite loop in the token manager.
33       */
34      static final int LOOP_DETECTED = 3;
35  
36      /***
37       * Indicates the reason why the exception is thrown. It will have one of the above 4 values.
38       */
39      int errorCode;
40  
41      /*
42       * Constructors of various flavors follow.
43       */
44      public TokenMgrError() {
45      }
46  
47      public TokenMgrError(String message, int reason) {
48          super(message);
49          errorCode = reason;
50      }
51  
52      public TokenMgrError(boolean EOFSeen,
53                           int lexState,
54                           int errorLine,
55                           int errorColumn,
56                           String errorAfter,
57                           char curChar,
58                           int reason) {
59          this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
60      }
61  
62      /***
63       * Replaces unprintable characters by their espaced (or unicode escaped) equivalents in the given string
64       */
65      protected static final String addEscapes(String str) {
66          StringBuffer retval = new StringBuffer();
67          char ch;
68          for (int i = 0; i < str.length(); i++) {
69              switch (str.charAt(i)) {
70                  case 0:
71                      continue;
72                  case '\b':
73                      retval.append("//b");
74                      continue;
75                  case '\t':
76                      retval.append("//t");
77                      continue;
78                  case '\n':
79                      retval.append("//n");
80                      continue;
81                  case '\f':
82                      retval.append("//f");
83                      continue;
84                  case '\r':
85                      retval.append("//r");
86                      continue;
87                  case '\"':
88                      retval.append("//\"");
89                      continue;
90                  case '\'':
91                      retval.append("//\'");
92                      continue;
93                  case '//':
94                      retval.append("////");
95                      continue;
96                  default:
97                      if (((ch = str.charAt(i)) < 0x20) || (ch > 0x7e)) {
98                          String s = "0000" + Integer.toString(ch, 16);
99                          retval.append("//u" + s.substring(s.length() - 4, s.length()));
100                     } else {
101                         retval.append(ch);
102                     }
103                     continue;
104             }
105         }
106         return retval.toString();
107     }
108 
109     /***
110      * Returns a detailed message for the Error when it is thrown by the token manager to indicate a lexical error.
111      * Parameters : EOFSeen : indicates if EOF caused the lexicl error curLexState : lexical state in which this error
112      * occured errorLine : line number when the error occured errorColumn : column number when the error occured
113      * errorAfter : prefix that was seen before this error occured curchar : the offending character Note: You can
114      * customize the lexical error message by modifying this method.
115      */
116     protected static String LexicalError(boolean EOFSeen,
117                                          int lexState,
118                                          int errorLine,
119                                          int errorColumn,
120                                          String errorAfter,
121                                          char curChar) {
122         return ("Lexical error at line "
123                 + errorLine
124                 + ", column "
125                 + errorColumn
126                 + ".  Encountered: "
127                 + (EOFSeen
128                    ? "<EOF> "
129                    : (("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int) curChar + "), "))
130                 + "after : \""
131                 + addEscapes(errorAfter) + "\"");
132     }
133 
134     /***
135      * You can also modify the body of this method to customize your error messages. For example, cases like
136      * LOOP_DETECTED and INVALID_LEXICAL_STATE are not of end-users concern, so you can return something like :
137      * <p/>"Internal Error : Please file a bug report .... " <p/>from this method for such cases in the release version
138      * of your parser.
139      */
140     public String getMessage() {
141         return super.getMessage();
142     }
143 }