@NotNull
  public Self ofType(@NotNull final ElementPattern pattern) {
    return with(new PatternCondition<>("ofType") {
      @Override
      public boolean accepts(@NotNull final T t, final ProcessingContext context) {
        return pattern.accepts(t.getType(), context);
      }
    });
  }
@NotNull
  public Self ofType(@NotNull final ElementPattern pattern)