diff --git a/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java b/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java index 06b104b76155..e2c200e05b09 100644 --- a/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java +++ b/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java @@ -256,6 +256,31 @@ public class PsiTreeUtil { return (T)processor.getFoundElement(); } + public static Collection findChildrenOfType(@Nullable final PsiElement element, + @NotNull final Class aClass) { + return findChildrenOfAnyType(element, aClass); + + } + + + public static Collection findChildrenOfAnyType(@Nullable final PsiElement element, + @NotNull final Class... classes) { + PsiElementProcessor.CollectElements processor = new PsiElementProcessor.CollectElements() { + @Override + public boolean execute(@NotNull T each) { + if (each == element) return true; + if (instanceOf(each, classes)) { + return super.execute(each); + } + return true; + } + }; + + processElements(element, processor); + //noinspection unchecked + return processor.getCollection(); + } + /** * Non-recursive search for element of type T amongst given {@code element} children. *