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 instanceof Token) {
111 Token t=(Token) o;
112 if (t.getLine()==getLine()) {
113 if (t.getColumn()==getColumn()) {
114 if (getText()==null) {
115 return t.getText()==null ? 0 : 1;
116 }
117
118 return t.getText()==null ? -1 : getText().compareTo(t.getText());
119 }
120
121 return getColumn()-t.getColumn();
122 }
123
124 return getLine()-t.getLine();
125 }
126
127 return 1;
128 }
129
130 public boolean equals(Object obj) {
131 if (obj==this) {
132 return true;
133 }
134
135 if (obj==null) {
136 return false;
137 }
138
139 if (obj instanceof Token && getClass().equals(obj.getClass())) {
140 Token t=(Token) obj;
141 return getType() == t.getType()
142 && ((getText() == null && t.getText() == null)
143 || (getText() != null
144 && t.getText() != null
145 && getText().equals(t.getText())));
146 }
147
148 return super.equals(obj);
149 }
150
151 public int hashCode() {
152 int ret=getType();
153 ret^=getClass().getName().hashCode();
154
155 if (getText()!=null) {
156 ret^=getText().hashCode();
157 }
158 return ret;
159 }
160
161 public boolean accept(Visitor visitor) {
162 for (Token t=this; t!=null; t=t.getNextToken()) {
163 if (visitor.visit(t)) {
164 if (visitor instanceof PoliteVisitor) {
165 ((PoliteVisitor) visitor).leave(t);
166 }
167 } else {
168 return false;
169 }
170 }
171 return true;
172 }
173
174 public Integer getSourceId() {
175 return null;
176 }
177 }