void (@NotNull MatchResult result) { UsageInfo info; if (MatchResult.MULTI_LINE_MATCH.equals(result.getName())) { int start = -1; int end = -1; PsiElement parent = result.getMatch().getParent(); for (final MatchResult matchResult : result.getChildren()) { PsiElement el = matchResult.getMatch(); final int elementStart = el.getTextRange().getStartOffset(); if (start == -1 || start > elementStart) { start = elementStart; } final int newend = elementStart + el.getTextLength(); if (newend > end) { end = newend; } } final int parentStart = parent.getTextRange().getStartOffset(); int startOffset = start - parentStart; info = new UsageInfo(parent, startOffset, end - parentStart); } else { final PsiElement match = result.getMatch(); if (!match.isPhysical()) { // e.g. lambda parameter anonymous type element return; } info = new UsageInfo(match); } final Usage usage = new UsageInfo2UsageAdapter(info); foundUsage(result, usage); processor.process(usage); ++count; }