void () { ReadAction.run(() -> { PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(myEditor.getDocument()); if (psiFile == null) { myPsiElements = PsiElement.EMPTY_ARRAY; return; } SelectionModel selectionModel = myEditor.getSelectionModel(); if (!selectionModel.hasSelection()) { myPsiElements = PsiElement.EMPTY_ARRAY; return; } int[] selectionStarts = selectionModel.getBlockSelectionStarts(); int[] selectionEnds = selectionModel.getBlockSelectionEnds(); final List<@NotNull PsiElement> elements = new ArrayList<>(); for (int i = 0; i < selectionStarts.length; ++i) { collectPsiElementsAtRange(psiFile, elements, selectionStarts[i], selectionEnds[i]); } myPsiElements = elements.toArray(PsiElement.EMPTY_ARRAY); }); }