int (int fileOffset) { return ObjectUtils.binarySearch(0, tokens.size(), mid -> { int psiTokenIndex = mid; while (!(tokens.get(psiTokenIndex) instanceof PsiToken)) psiTokenIndex--; var tokenRange = ((PsiToken) tokens.get(psiTokenIndex)).rangeInFile; if (tokenRange.containsOffset(fileOffset)) return mid == psiTokenIndex ? 0 : 1; return tokenRange.getEndOffset() < fileOffset ? -1 : 1; }); }