1 31 32 package org.antlr.works.utils; 33 34 import org.antlr.analysis.DecisionProbe; 35 import org.antlr.tool.ANTLRErrorListener; 36 import org.antlr.tool.Message; 37 import org.antlr.tool.ToolMessage; 38 import org.antlr.works.editor.EditorConsole; 39 40 import java.util.LinkedList ; 41 import java.util.List ; 42 43 public class ErrorListener implements ANTLRErrorListener { 44 45 protected static ErrorListener shared = new ErrorListener(); 46 47 public List <String > infos = new LinkedList <String >(); 48 public List <Message> errors = new LinkedList <Message>(); 49 public List <Message> warnings = new LinkedList <Message>(); 50 51 public boolean printToConsole = true; 52 public ErrorListener forwardListener = null; 53 54 public static ErrorListener shared() { 55 return shared; 56 } 57 58 public void setPrintToConsole(boolean flag) { 59 this.printToConsole = flag; 60 } 61 62 public void setForwardListener(ErrorListener listener) { 63 this.forwardListener = listener; 64 } 65 66 public void clear() { 67 infos.clear(); 68 errors.clear(); 69 warnings.clear(); 70 } 71 72 public boolean hasErrors() { 73 return errors.size() > 0; 74 } 75 76 public String getFirstErrorMessage() { 77 if(hasErrors()) { 78 return errors.get(0).toString(); 79 } else { 80 return null; 81 } 82 } 83 84 public void info(String msg) { 85 infos.add(msg); 86 if(forwardListener != null) 87 forwardListener.info(msg); 88 print(msg, Console.LEVEL_NORMAL); 89 } 90 91 public void error(Message msg) { 92 errors.add(msg); 93 if(forwardListener != null) 94 forwardListener.error(msg); 95 print(msg.toString(), Console.LEVEL_ERROR); 96 } 97 98 public void warning(Message msg) { 99 warnings.add(msg); 100 if(forwardListener != null) 101 forwardListener.warning(msg); 102 print(msg.toString(), Console.LEVEL_WARNING); 103 } 104 105 public void error(ToolMessage msg) { 106 errors.add(msg); 107 if(forwardListener != null) 108 forwardListener.error(msg); 109 print(msg.toString(), Console.LEVEL_ERROR); 110 } 111 112 public void print(String msg, int level) { 113 if(!printToConsole) 114 return; 115 116 boolean previousVerbose = DecisionProbe.verbose; 117 DecisionProbe.verbose = false; 118 try { 119 EditorConsole.getCurrent().println(msg, level); 120 } catch(Exception e) { 121 e.printStackTrace(); 122 } 123 DecisionProbe.verbose = previousVerbose; 124 } 125 } 126 | Popular Tags |