1 package org.codehaus.groovy.syntax.parser; 2 3 import org.codehaus.groovy.syntax.Types; 4 import org.codehaus.groovy.syntax.Token; 5 6 public class UnexpectedTokenException extends ParserException { 7 private Token unexpectedToken; 8 private int[] expectedTypes; 9 private String comment; 10 11 public UnexpectedTokenException(Token token) { 12 this(token, null, null ); 13 } 14 15 public UnexpectedTokenException(Token token, int expectedType) { 16 this(token, new int[] { expectedType }); 17 } 18 19 public UnexpectedTokenException(Token token, int[] expectedTypes) { 20 this(token, expectedTypes, null ); 21 } 22 23 public UnexpectedTokenException(Token token, int[] expectedTypes, String comment) { 24 super("Unexpected token", token); 25 this.unexpectedToken = token; 26 this.expectedTypes = expectedTypes; 27 this.comment = comment; 28 } 29 30 public Token getUnexpectedToken() { 31 return this.unexpectedToken; 32 } 33 34 public int[] getExpectedTypes() { 35 return this.expectedTypes; 36 } 37 38 public String getUnexpectedTokenText( ) { 39 String text = null; 40 if( this.unexpectedToken != null ) 41 { 42 text = this.unexpectedToken.getText(); 43 } 44 45 if( text == null ) 46 { 47 text = ""; 48 } 49 50 return text; 51 } 52 53 public String getMessage() { 54 StringBuffer message = new StringBuffer (); 55 56 if( expectedTypes != null ) { 57 message.append( "expected " ); 58 59 if (this.expectedTypes.length == 1) { 60 message.append( Types.getDescription(this.expectedTypes[0]) ); 61 } 62 else { 63 message.append("one of { "); 64 65 for (int i = 0; i < expectedTypes.length; ++i) { 66 message.append( Types.getDescription(this.expectedTypes[i]) ); 67 68 if ((i + 1) < expectedTypes.length) { 69 if( expectedTypes.length > 2 ) { 70 message.append(", "); 71 } 72 else { 73 message.append(" "); 74 } 75 } 76 77 if ((i + 2) == expectedTypes.length) { 78 message.append("or "); 79 } 80 } 81 82 message.append(" }"); 83 } 84 85 message.append( "; found '" ); 86 } 87 else { 88 message.append( "could not use '" ); 89 } 90 91 message.append( getUnexpectedTokenText() ).append( "'" ); 92 if( unexpectedToken != null ) { 93 message.append(" at " + unexpectedToken.getStartLine() + ":" + unexpectedToken.getStartColumn()); 94 } 95 else { 96 message.append(" at unknown location (probably end of file)"); 97 } 98 99 if( comment != null ) { 100 message.append( "; " ); 101 message.append( comment ); 102 } 103 104 return message.toString(); 105 } 106 } 107 | Popular Tags |