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 }