Refine search
/** * Append the text preserving the formatting (space symbols) between tokens */ void append(StringBuilder str, String appendStr, Token start, Token stop) { String spaces = start.getInputStream().getText(new org.antlr.v4.runtime.misc.Interval(start.getStartIndex(), stop.getStopIndex())); spaces = spaces.substring(start.getText().length(), spaces.length() - stop.getText().length()); str.append(spaces); str.append(appendStr); }
private static String getStatementString( final SingleStatementContext singleStatementContext ) { final CharStream charStream = singleStatementContext.start.getInputStream(); return charStream.getText(Interval.of( singleStatementContext.start.getStartIndex(), singleStatementContext.stop.getStopIndex() )); } }
@Override public String getText(Interval interval) { if (interval.a < 0 || interval.b < interval.a - 1) { throw new IllegalArgumentException("invalid interval"); } int bufferStartIndex = getBufferStartIndex(); if (n > 0 && data[n - 1] == Character.MAX_VALUE) { if (interval.a + interval.length() > bufferStartIndex + n) { throw new IllegalArgumentException("the interval extends past the end of the stream"); } } if (interval.a < bufferStartIndex || interval.b >= bufferStartIndex + n) { throw new UnsupportedOperationException("interval "+interval+" outside buffer: "+ bufferStartIndex+".."+(bufferStartIndex+n-1)); } // convert from absolute to local index int i = interval.a - bufferStartIndex; return new String(data, i, interval.length()); }
/** Are both ranges disjoint? I.e., no overlap? */ public boolean disjoint(Interval other) { return startsBeforeDisjoint(other) || startsAfterDisjoint(other); }
/** Return the interval with elements from this not in other; * other must not be totally enclosed (properly contained) * within this, which would result in two disjoint intervals * instead of the single one returned by this method. */ public Interval differenceNotProperlyContained(Interval other) { Interval diff = null; // other.a to left of this.a (or same) if ( other.startsBeforeNonDisjoint(this) ) { diff = Interval.of(Math.max(this.a, other.b + 1), this.b); } // other.a to right of this.a else if ( other.startsAfterNonDisjoint(this) ) { diff = Interval.of(this.a, other.a - 1); } return diff; }
if ( addition.equals(r) ) { return; if ( addition.adjacent(r) || !addition.disjoint(r) ) { Interval bigger = addition.union(r); iter.set(bigger); if ( !bigger.adjacent(next) && bigger.disjoint(next) ) { break; iter.set(bigger.union(next)); // set to 3 merged ones if ( addition.startsBeforeDisjoint(r) ) {
IntervalSet setTransitions = new IntervalSet(); for (int i = 0; i < decision.getNumberOfTransitions(); i++) { Transition epsTransition = decision.transition(i); || transition instanceof SetTransition) setTransitions.add(i); for (int i = setTransitions.getIntervals().size() - 1; i >= 0; i--) { Interval interval = setTransitions.getIntervals().get(i); if (interval.length() <= 1) { continue;
Interval theirs = theirIntervals.get(j); if ( mine.startsBeforeDisjoint(theirs) ) { else if ( theirs.startsBeforeDisjoint(mine) ) { else if ( mine.properlyContains(theirs) ) { intersection = new IntervalSet(); intersection.add(mine.intersection(theirs)); j++; else if ( theirs.properlyContains(mine) ) { intersection.add(mine.intersection(theirs)); i++; else if ( !mine.disjoint(theirs) ) { intersection.add(mine.intersection(theirs)); if ( mine.startsAfterNonDisjoint(theirs) ) { j++; else if ( theirs.startsAfterNonDisjoint(mine) ) { i++;
if (left == null || left.isNil()) { return new IntervalSet(); IntervalSet result = new IntervalSet(left); if (right == null || right.isNil()) { Interval afterCurrent = null; if (rightInterval.a > resultInterval.a) { beforeCurrent = new Interval(resultInterval.a, rightInterval.a - 1); afterCurrent = new Interval(rightInterval.b + 1, resultInterval.b);
/** Add interval; i.e., add all integers from a to b to set. * If b<a, do nothing. * Keep list in sorted order (by left range value). * If overlap, combine ranges. For example, * If this is {1..5, 10..20}, adding 6..7 yields * {1..5, 6..7, 10..20}. Adding 4..8 yields {1..8, 10..20}. */ public void add(int a, int b) { add(Interval.of(a, b)); }
Replacement previous = sorted.get(i - 1); Replacement current = sorted.get(i); if (!previous.interval.startsBeforeDisjoint(current.interval)) { throw new RuntimeException("Overlapping intervals: " + previous + " " + current);
IntervalSet setTransitions = new IntervalSet(); for (int i = 0; i < decision.getNumberOfTransitions(); i++) { Transition epsTransition = decision.transition(i); || transition instanceof SetTransition) setTransitions.add(i); for (int i = setTransitions.getIntervals().size() - 1; i >= 0; i--) { Interval interval = setTransitions.getIntervals().get(i); if (interval.length() <= 1) { continue;
Interval theirs = theirIntervals.get(j); if ( mine.startsBeforeDisjoint(theirs) ) { else if ( theirs.startsBeforeDisjoint(mine) ) { else if ( mine.properlyContains(theirs) ) { intersection = new IntervalSet(); intersection.add(mine.intersection(theirs)); j++; else if ( theirs.properlyContains(mine) ) { intersection.add(mine.intersection(theirs)); i++; else if ( !mine.disjoint(theirs) ) { intersection.add(mine.intersection(theirs)); if ( mine.startsAfterNonDisjoint(theirs) ) { j++; else if ( theirs.startsAfterNonDisjoint(mine) ) { i++;
if (left == null || left.isNil()) { return new IntervalSet(); IntervalSet result = new IntervalSet(left); if (right == null || right.isNil()) { Interval afterCurrent = null; if (rightInterval.a > resultInterval.a) { beforeCurrent = new Interval(resultInterval.a, rightInterval.a - 1); afterCurrent = new Interval(rightInterval.b + 1, resultInterval.b);
/** Add interval; i.e., add all integers from a to b to set. * If b<a, do nothing. * Keep list in sorted order (by left range value). * If overlap, combine ranges. For example, * If this is {1..5, 10..20}, adding 6..7 yields * {1..5, 6..7, 10..20}. Adding 4..8 yields {1..8, 10..20}. */ public void add(int a, int b) { add(Interval.of(a, b)); }
if ( addition.equals(r) ) { return; if ( addition.adjacent(r) || !addition.disjoint(r) ) { Interval bigger = addition.union(r); iter.set(bigger); if ( !bigger.adjacent(next) && bigger.disjoint(next) ) { break; iter.set(bigger.union(next)); // set to 3 merged ones if ( addition.startsBeforeDisjoint(r) ) {
/** Are both ranges disjoint? I.e., no overlap? */ public boolean disjoint(Interval other) { return startsBeforeDisjoint(other) || startsAfterDisjoint(other); }
Replacement previous = sorted.get(i - 1); Replacement current = sorted.get(i); if (!previous.interval.startsBeforeDisjoint(current.interval)) { throw new RuntimeException("Overlapping intervals: " + previous + " " + current);
IntervalSet setTransitions = new IntervalSet(); for (int i = 0; i < decision.getNumberOfTransitions(); i++) { Transition epsTransition = decision.transition(i); || transition instanceof SetTransition) setTransitions.add(i); for (int i = setTransitions.getIntervals().size() - 1; i >= 0; i--) { Interval interval = setTransitions.getIntervals().get(i); if (interval.length() <= 1) { continue;
/** * Get node text including spaces */ String getText(ParserRuleContext ctx) { return ctx.start.getInputStream().getText(new org.antlr.v4.runtime.misc.Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex())); }