Object[] (final Object[] list) { Condition<PsiFile> condition = psiFile -> { if (myFilter != null && !myFilter.accept(psiFile)) { return false; } boolean accepted = myFileType == null || psiFile.getFileType() == myFileType; VirtualFile virtualFile = psiFile.getVirtualFile(); if (virtualFile != null && !accepted) { accepted = FileTypeRegistry.getInstance().isFileOfType(virtualFile, myFileType); } return accepted; }; final List<Object> result = new ArrayList<>(list.length); for (Object o : list) { final PsiFile psiFile; if (o instanceof PsiFile) { psiFile = (PsiFile)o; } else if (o instanceof PsiFileNode) { psiFile = ((PsiFileNode)o).getValue(); } else { psiFile = null; } if (psiFile != null && !condition.value(psiFile)) { continue; } else { if (o instanceof ProjectViewNode projectViewNode) { if (!projectViewNode.canHaveChildrenMatching(condition)) { continue; } } } result.add(o); } return ArrayUtil.toObjectArray(result); }