JBIterable<PsiElement> (PsiElement element, boolean fwd) { SyntaxTraverser.ApiEx<PsiElement> api = fwd ? SyntaxTraverser.psiApi() : SyntaxTraverser.psiApiReversed(); api.next(element); JBIterable<PsiElement> flatSiblings = JBIterable.generate(element, api::next).skip(1); return SyntaxTraverser.syntaxTraverser(api) .withRoots(flatSiblings) .expandAndSkip(e -> api.typeOf(e) == GeneratedParserUtilBase.DUMMY_BLOCK) .traverse(); }