001 /* 002 @license.text@ 003 */ 004 005 package biz.hammurapi.antlr; 006 007 import antlr.CommonToken; 008 import biz.hammurapi.legacy.review.SourceMarker; 009 import biz.hammurapi.util.PoliteVisitor; 010 import biz.hammurapi.util.Visitable; 011 import biz.hammurapi.util.Visitor; 012 013 014 /** 015 * 016 * @author Pavel Vlasov 017 * @version $Revision: 1.4 $ 018 */ 019 public class Token extends CommonToken implements SourceMarker, Comparable, Visitable { 020 public Token() { 021 super(); 022 } 023 024 public Token(String s) { 025 super(s); 026 } 027 028 public Token(int t, String txt) { 029 super(t,txt); 030 } 031 032 private Token nextToken; 033 private Token prevToken; 034 035 public void setNextToken(Token token) { 036 if (nextToken!=token) { 037 nextToken=token; 038 if (nextToken!=null) { 039 nextToken.prevToken=this; 040 } 041 042 if (listener!=null) { 043 listener.onNextTokenChanged(this); 044 } 045 } 046 } 047 048 public Token getNextToken() { 049 return nextToken; 050 } 051 052 public void setPrevToken(Token token) { 053 if (prevToken!=token) { 054 prevToken=token; 055 if (prevToken!=null) { 056 prevToken.nextToken=this; 057 } 058 059 if (listener!=null) { 060 listener.onPrevTokenChanged(this); 061 } 062 } 063 } 064 065 public Token getPrevToken() { 066 return prevToken; 067 } 068 069 private TokenListener listener; 070 071 /** 072 * @return Returns the listener. 073 */ 074 public TokenListener getListener() { 075 return listener; 076 } 077 078 /** 079 * @param listener The listener to set. 080 */ 081 public void setListener(TokenListener listener) { 082 this.listener = listener; 083 } 084 085 /* (non-Javadoc) 086 * @see antlr.Token#setText(java.lang.String) 087 */ 088 public void setText(String newText) { 089 super.setText(newText); 090 if (listener!=null) { 091 listener.onTextChanged(this); 092 } 093 } 094 095 private String sourceURL; 096 097 public String getSourceURL() { 098 return sourceURL; 099 } 100 101 /** 102 * Sets source URL for this and all subsequent tokens. 103 * @param sourceURL 104 */ 105 public void setSourceURL(String sourceURL) { 106 this.sourceURL=sourceURL; 107 } 108 109 public int compareTo(Object o) { 110 if (o==this) { 111 return 0; 112 } 113 114 if (o==null) { 115 return -1; 116 } 117 118 if (o instanceof Token) { 119 Token t=(Token) o; 120 if (t.getLine()==getLine()) { 121 if (t.getColumn()==getColumn()) { 122 if (getText()==null) { 123 return t.getText()==null ? 0 : 1; 124 } 125 126 return t.getText()==null ? -1 : getText().compareTo(t.getText()); 127 } 128 129 return getColumn()-t.getColumn(); 130 } 131 132 return getLine()-t.getLine(); 133 } 134 135 return hashCode() - o.hashCode(); 136 } 137 138 public boolean equals(Object obj) { 139 if (obj==this) { 140 return true; 141 } 142 143 if (obj==null) { 144 return false; 145 } 146 147 if (obj instanceof Token && getClass().equals(obj.getClass())) { 148 Token t=(Token) obj; 149 return getType() == t.getType() 150 && ((getText() == null && t.getText() == null) 151 || (getText() != null 152 && t.getText() != null 153 && getText().equals(t.getText()))); 154 } 155 156 return super.equals(obj); 157 } 158 159 public int hashCode() { 160 int ret=getType(); 161 ret^=getClass().getName().hashCode(); 162 163 if (getText()!=null) { 164 ret^=getText().hashCode(); 165 } 166 return ret; 167 } 168 169 public boolean accept(Visitor visitor) { 170 for (Token t=this; t!=null; t=t.getNextToken()) { 171 if (visitor.visit(t)) { 172 if (visitor instanceof PoliteVisitor) { 173 ((PoliteVisitor) visitor).leave(t); 174 } 175 } else { 176 return false; 177 } 178 } 179 return true; 180 } 181 182 public Integer getSourceId() { 183 return null; 184 } 185 }