ParsedLine (@NotNull String line, boolean searchForRParenOnlyAfterAt) { int startIdx = findAtPrefix(line); int rParenIdx = findRParenAfterLocation(line, searchForRParenOnlyAfterAt ? startIdx : 0); if (rParenIdx < 0) return null; TextRange methodName = findMethodNameCandidateBefore(line, startIdx, rParenIdx); if (methodName == null) return null; int lParenIdx = methodName.getEndOffset(); int dotIdx = methodName.getStartOffset() - 1; int moduleIdx = line.indexOf('/'); int classNameIdx; if (moduleIdx > -1 && moduleIdx < dotIdx && !line.startsWith("0x", moduleIdx + 1)) { classNameIdx = moduleIdx + 1; } else { if (startIdx >= 0) { // consider STANDALONE_AT here classNameIdx = startIdx + 1 + AT.length() + (line.charAt(startIdx) == 'a' ? 0 : 1); } else { classNameIdx = 0; } } return ParsedLine.createFromFileAndLine(new TextRange(classNameIdx, handleSpaces(line, dotIdx, -1)), trimRange(line, methodName), lParenIdx + 1, rParenIdx, line); }