1cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettipackage com.github.javaparser; 2cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 3cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettiimport static com.github.javaparser.Position.pos; 4cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 5cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti/** 6cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti * A range of characters in a source file, from "begin" to "end", including the characters at "begin" and "end". 7cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti */ 8cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassettipublic class Range { 9cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public static final Range UNKNOWN = range(Position.UNKNOWN, Position.UNKNOWN); 10cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 11cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public final Position begin; 12cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public final Position end; 13cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 14cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public Range(Position begin, Position end) { 15cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti if (begin == null) { 16cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti throw new IllegalArgumentException("begin can't be null"); 17cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 18cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti if (end == null) { 19cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti throw new IllegalArgumentException("end can't be null"); 20cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 21cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti this.begin = begin; 22cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti this.end = end; 23cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 24cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 25cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public static Range range(Position begin, Position end) { 26cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return new Range(begin, end); 27cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 28cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 29cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public static Range range(int beginLine, int beginColumn, int endLine, int endColumn) { 30cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return new Range(pos(beginLine, beginColumn), pos(endLine, endColumn)); 31cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 32cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 33cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public Range withBeginColumn(int column) { 34cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return range(begin.withColumn(column), end); 35cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 36cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 37cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public Range withBeginLine(int line) { 38cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return range(begin.withLine(line), end); 39cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 40cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 41cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public Range withEndColumn(int column) { 42cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return range(begin, end.withColumn(column)); 43cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 44cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 45cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public Range withEndLine(int line) { 46cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return range(begin, end.withLine(line)); 47cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 48cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 49cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public Range withBegin(Position begin) { 50cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return range(begin, this.end); 51cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 52cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 53cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public Range withEnd(Position end) { 54cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return range(this.begin, end); 55cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 56cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 57cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public boolean contains(Range other) { 58cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return begin.isBefore(other.begin) && end.isAfter(other.end); 59cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 60cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 61cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public boolean isBefore(Position position) { 62cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return end.isBefore(position); 63cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 64cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 65cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public boolean isAfter(Position position) { 66cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return begin.isAfter(position); 67cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 68cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 69cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti @Override 70cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public boolean equals(Object o) { 71cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti if (this == o) return true; 72cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti if (o == null || getClass() != o.getClass()) return false; 73cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 74cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti Range range = (Range) o; 75cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 76cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return begin.equals(range.begin) && end.equals(range.end); 77cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 78cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 79cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 80cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti @Override 81cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public int hashCode() { 82cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return 31 * begin.hashCode() + end.hashCode(); 83cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 84cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti 85cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti @Override 86cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti public String toString() { 87cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti return begin+"-"+end; 88cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti } 89cf23ae22c824b96a0f0255a749119ac0ca264550Federico Tomassetti} 90