List<PsiElement> (@Nullable final Editor editor, final DataContext dataContext) { List<PsiElement> elements = new ArrayList<>(); if (editor != null) { PsiReference reference = TargetElementUtil.findReference(editor); if (reference != null) { ContainerUtil.addIfNotNull(elements, reference.getElement()); } } if (elements.isEmpty()) { PsiElement[] psiElements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); if (psiElements != null) { Collections.addAll(elements, psiElements); } } if (elements.isEmpty()) { ContainerUtil.addIfNotNull(elements, CommonDataKeys.PSI_ELEMENT.getData(dataContext)); } if (elements.isEmpty() && editor == null) { final Project project = CommonDataKeys.PROJECT.getData(dataContext); VirtualFile[] files = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); if (project != null && files != null) { for (VirtualFile file : files) { ContainerUtil.addIfNotNull(elements, PsiManager.getInstance(project).findFile(file)); } } } return ContainerUtil.mapNotNull(elements, element -> element instanceof PsiFile && !((PsiFile)element).getViewProvider().isPhysical() ? null : adjustElement(element)); }