TreeVisitor (@Nullable PsiElement element, @Nullable VirtualFile file, @Nullable List<? super TreePath> collector) { Predicate<? super TreePath> predicate = collector == null ? null : path -> { collector.add(path); return false; }; if (element != null && element.isValid()) return new ProjectViewNodeVisitor(element, file, predicate); if (file != null) return new ProjectViewFileVisitor(file, predicate); LOG.warn(element != null ? "element invalidated: " + element : "cannot create visitor without element and/or file"); return null; }