@SafeVarargs
  public static @Unmodifiable @NotNull <T extends PsiElement> Collection<T> findChildrenOfAnyType(@Nullable PsiElement element,
                                                                                    boolean strict,
                                                                                    @NotNull Class<? extends T> @NotNull ... classes) {
    if (element == null) return Collections.emptyList();

    CollectElements<PsiElement> processor = new CollectElements<PsiElement>() {
      @Override
      public boolean execute(@NotNull PsiElement each) {
        if (strict && each == element) return true;
        if (instanceOf(each, classes)) {
          return super.execute(each);
        }
        return true;
      }
    }
@SafeVarargs
  public static @Unmodifiable @NotNull <T extends PsiElement> Collection<T> findChildrenOfAnyType(@Nullable PsiElement element,
                                                                                    boolean strict,
                                                                                    @NotNull Class<? extends T> @NotNull ... classes) {
    if (element == null) return Collections.emptyList();

    CollectElements<PsiElement> processor = new CollectElements<PsiElement>()