Print out an error message for invalid tokens in the lexer, but add a way to suppress the errors
Suppress the lexer errors for unit tests

git-svn-id: https://smali.googlecode.com/svn/trunk@758 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex
index d5269c6..5f027d3 100644
--- a/smali/src/main/jflex/smaliLexer.flex
+++ b/smali/src/main/jflex/smaliLexer.flex
@@ -28,10 +28,17 @@
 
     private File sourceFile;
 
+    private boolean suppressErrors;
+
     public Token nextToken() {
         try {
             Token token = yylex();
             if (token instanceof InvalidToken) {
+                InvalidToken invalidToken = (InvalidToken)token;
+                if (!suppressErrors) {
+                    System.err.println(getErrorHeader(invalidToken) + " Error for input '" +
+                        invalidToken.getText() + "': " + invalidToken.getMessage());
+                }
                 lexerErrors++;
             }
             return token;
@@ -58,6 +65,10 @@
         return this.yycolumn;
     }
 
+    public void setSuppressErrors(boolean suppressErrors) {
+        this.suppressErrors = suppressErrors;
+    }
+
     public void setSourceFile(File sourceFile) {
         this.sourceFile = sourceFile;
     }
@@ -155,8 +166,8 @@
         return token;
     }
 
-    public String getErrorHeader(RecognitionException e) {
-        return getSourceName()+"["+ e.line+","+e.charPositionInLine+"]";
+    public String getErrorHeader(InvalidToken token) {
+        return getSourceName()+"["+ token.getLine()+","+token.getCharPositionInLine()+"]";
     }
 %}
 
diff --git a/smali/src/test/java/LexerTest.java b/smali/src/test/java/LexerTest.java
index d3cf5ff..ed28280 100644
--- a/smali/src/test/java/LexerTest.java
+++ b/smali/src/test/java/LexerTest.java
@@ -154,6 +154,8 @@
             Assert.fail("Could not load " + smaliFile);
         }
         smaliFlexLexer lexer = new smaliFlexLexer(smaliStream);
+        lexer.setSourceFile(new File(test + ".smali"));
+        lexer.setSuppressErrors(true);
 
         CommonTokenStream tokenStream = new CommonTokenStream(lexer);
         List tokens = tokenStream.getTokens();