in core/src/main/java/com/jetbrains/sa/jdi/ConcreteMethodImpl.java [236:277]
LineInfo codeIndexToLineInfo(SDE.Stratum stratum,
long codeIndex) {
if (firstIndex == -1) {
getBaseLocations();
}
/*
* Check for invalid code index.
*/
if (codeIndex < firstIndex || codeIndex > lastIndex) {
throw new InternalError(
"Location with invalid code index");
}
List<LocationImpl> lineLocations = getLocations(stratum).lineLocations;
/*
* Check for absent line numbers.
*/
if (lineLocations.size() == 0) {
return super.codeIndexToLineInfo(stratum, codeIndex);
}
Iterator<LocationImpl> iter = lineLocations.iterator();
/*
* Treat code before the beginning of the first line table
* entry as part of the first line. javac will generate
* code like this for some local classes. This "prolog"
* code contains assignments from locals in the enclosing
* scope to synthetic fields in the local class. Same for
* other language prolog code.
*/
LocationImpl bestMatch = iter.next();
while (iter.hasNext()) {
LocationImpl current = iter.next();
if (current.codeIndex() > codeIndex) {
break;
}
bestMatch = current;
}
return bestMatch.getLineInfo(stratum);
}