@SafeVarargs
  public static @NotNull <E> ElementPattern<E> or(final ElementPattern<? extends E> @NotNull ... patterns) {
    return new ObjectPattern.Capture<>(new InitialPatternConditionPlus(Object.class) {
      @Override
      public boolean accepts(final @Nullable Object o, final ProcessingContext context) {
        for (ElementPattern<?> pattern : patterns) {
          if (pattern.accepts(o, context)) {
            return true;
          }
        }
        return false;
      }

      @Override
      public void append(final @NotNull @NonNls StringBuilder builder, final String indent) {
        boolean first = true;
        for (ElementPattern<?> pattern : patterns) {
          if (!first) {
            builder.append("\n").append(indent);
          }
          first = false;
          pattern.getCondition().append(builder, indent + "  ");
        }
      }

      @Override
      public List<ElementPattern<?>> getPatterns() {
        return Arrays.asList(patterns);
      }
    });
  }
@SafeVarargs
  public static @NotNull <E> ElementPattern<E> or(final ElementPattern<? extends E> @NotNull ... patterns)