private static @NotNull <E> ObjectPattern.Capture<E> composeInitialConditions(final List<? extends InitialPatternCondition> initial) {
    return new ObjectPattern.Capture<>(new InitialPatternCondition(Object.class) {
      @Override
      public boolean accepts(final @Nullable Object o, final ProcessingContext context) {
        for (final InitialPatternCondition pattern : initial) {
          if (!pattern.accepts(o, context)) return false;
        }
        return true;
      }

      @Override
      public void append(final @NotNull @NonNls StringBuilder builder, final String indent) {
        boolean first = true;
        for (final InitialPatternCondition pattern : initial) {
          if (!first) {
            builder.append("\n").append(indent);
          }
          first = false;
          pattern.append(builder, indent + "  ");
        }
      }
    });
  }
private static @NotNull <E> ObjectPattern.Capture<E> composeInitialConditions(final List<? extends InitialPatternCondition> initial)