class Test<T > {
  interface Event{}

  interface EventListener<V extends Event> {
    void handleEvent(V event);
  }

  public void addListener(EventListener<? super T> listener) {
    EventListener<? extends Event> localListener = listener;
    EventListener<? super Event>   localListener1 = <error descr="Incompatible types. Found: 'Test.EventListener<capture<? super T>>', required: 'Test.EventListener<? super Test.Event>'">listener</error>;
  }
}

class Test1 {

  public static class Entity<E extends Entity<E>> {

    public final <T, V extends EntityVisitor<? super E, T>> T handle(final V visitor) {
      return visitor.handle(this);
    }

  }

  public interface EntityVisitor<E extends Entity<E>, T> {

    T handle(Entity<? extends E> e);

  }

}