Last active
August 29, 2015 14:15
-
-
Save fge/9bca465dd022852f5032 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public Map<Integer, Integer> getDepthMap(final int startLine, | |
final int wantedLines) | |
throws GrappaDebuggerException | |
{ | |
loadInputBuffer(); | |
final List<IndexRange> ranges | |
= IntStream.range(startLine, startLine + wantedLines) | |
.mapToObj(inputBuffer::getLineRange) | |
.collect(Collectors.toList()); | |
final int startIndex = ranges.get(0).start; | |
final int endIndex = ranges.get(ranges.size() - 1).end; | |
final Condition indexCondition = NODES.START_INDEX.lt(endIndex) | |
.and(NODES.END_INDEX.ge(startIndex)); | |
final Field<Integer> lineField = getLineField(startLine, ranges); | |
final Map<Integer, Integer> ret = new HashMap<>(); | |
jooq.select(lineField, DSL.max(NODES.LEVEL)) | |
.from(NODES) | |
.where(indexCondition) | |
.groupBy(lineField) | |
.forEach(r -> ret.put(r.value1(), r.value2() + 1)); | |
IntStream.range(startLine, startLine + wantedLines) | |
.forEach(line -> ret.putIfAbsent(line, 0)); | |
return ret; | |
} | |
private Field<Integer> getLineField(final int startLine, | |
final List<IndexRange> ranges) | |
{ | |
CaseConditionStep<Integer> step = DSL.decode() | |
.when(activeThisRange(ranges.get(0)), startLine); | |
final int size = ranges.size(); | |
for (int i = 1; i < size; i++) | |
step = step.when(activeThisRange(ranges.get(i)), startLine + i); | |
return step.as("line"); | |
} | |
private static Condition activeThisRange(final IndexRange range) | |
{ | |
return NODES.START_INDEX.lt(range.end) | |
.and(NODES.END_INDEX.ge(range.start)); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment