001 package org.codehaus.groovy.antlr;
002
003 import antlr.collections.AST;
004 import antlr.*;
005
006 /**
007 * We have an AST subclass so we can track source information.
008 * Very odd that ANTLR doesn't do this by default.
009 *
010 * @author Mike Spille
011 * @author Jeremy Rayner <groovy@ross-rayner.com>
012 */
013 public class GroovySourceAST extends CommonAST implements Comparable {
014 private int line;
015 private int col;
016 private int lineLast;
017 private int colLast;
018 private String snippet;
019
020 public GroovySourceAST() {
021 }
022
023 public GroovySourceAST(Token t) {
024 super(t);
025 }
026
027 public void initialize(AST ast) {
028 super.initialize(ast);
029 line = ast.getLine();
030 col = ast.getColumn();
031 }
032
033 public void initialize(Token t) {
034 super.initialize(t);
035 line = t.getLine();
036 col = t.getColumn();
037 }
038
039 public void setLast(Token last) {
040 lineLast = last.getLine();
041 colLast = last.getColumn();
042 }
043
044 public int getLineLast() {
045 return lineLast;
046 }
047
048 public void setLineLast(int lineLast) {
049 this.lineLast = lineLast;
050 }
051
052 public int getColumnLast() {
053 return colLast;
054 }
055
056 public void setColumnLast(int colLast) {
057 this.colLast = colLast;
058 }
059
060 public void setLine(int line) {
061 this.line = line;
062 }
063
064 public int getLine() {
065 return (line);
066 }
067
068 public void setColumn(int column) {
069 this.col = column;
070 }
071
072 public int getColumn() {
073 return (col);
074 }
075
076 public void setSnippet(String snippet) {
077 this.snippet = snippet;
078 }
079
080 public String getSnippet() {
081 return snippet;
082 }
083
084 public int compareTo(Object object) {
085 if (object == null) {
086 return 0;
087 }
088 if (!(object instanceof AST)) {
089 return 0;
090 }
091 AST that = (AST) object;
092
093 // todo - possibly check for line/col with values of 0 or less...
094
095 if (this.getLine() < that.getLine()) {
096 return -1;
097 }
098 if (this.getLine() > that.getLine()) {
099 return 1;
100 }
101
102 if (this.getColumn() < that.getColumn()) {
103 return -1;
104 }
105 if (this.getColumn() > that.getColumn()) {
106 return 1;
107 }
108
109 return 0;
110 }
111 }