PsiElement (PsiFile psiFile, int caretOffset, @NotNull Class<? extends PsiElement> @NotNull ... toSkip) { PsiElement element; if (caretOffset < 0) { return null; } int lineStartOffset = 0; final Document document = PsiDocumentManager.getInstance(psiFile.getProject()).getDocument(psiFile); if (document != null) { int lineNumber = document.getLineNumber(caretOffset); lineStartOffset = document.getLineStartOffset(lineNumber); } do { caretOffset--; element = psiFile.findElementAt(caretOffset); } while (caretOffset >= lineStartOffset && PsiTreeUtil.instanceOf(element, toSkip)); return PsiTreeUtil.instanceOf(element, toSkip) ? null : element; }