in src/main/java/org/jetbrains/plugins/spotbugs/common/util/IdeaUtilImpl.java [392:424]
public static PsiElement getElementAtLine(@NotNull final PsiFile file, final int line) {
//noinspection ConstantConditions
if (file == null) {
return null;
}
final Document document = PsiDocumentManager.getInstance(file.getProject()).getDocument(file);
PsiElement element = null;
try {
if (document != null) {
final int offset = document.getLineStartOffset(line);
element = file.getViewProvider().findElementAt(offset);
if (element != null) {
if (document.getLineNumber(element.getTextOffset()) != line) {
PsiElement prevSibling = element.getPrevSibling();
if (prevSibling instanceof PsiComment && element.getParent() instanceof PsiClass || prevSibling instanceof PsiModifierList) {
element = element.getParent();
} else if (prevSibling instanceof PsiAnnotation) {
element = element.getParent().getParent();
} else {
element = element.getNextSibling();
}
} else if (element.getParent() instanceof PsiModifierList) {
element = element.getParent().getParent();
} else if (element.getPrevSibling() instanceof PsiModifierList && element.getParent() instanceof PsiClass) {
element = element.getParent();
}
}
}
} catch (@NotNull final IndexOutOfBoundsException ignore) {
}
return element instanceof PsiNameIdentifierOwner ? ((PsiNameIdentifierOwner) element).getNameIdentifier() : element;
}