class A<T, S> { } class B<L> { A<L, L> foo() { return null; } void bar(B<?> b, A<?, ?> foo1) { baz(b.foo()); A<?, ?> foo = b.foo(); baz<error descr="'baz(A<capture<?>,capture<?>>)' in 'B' cannot be applied to '(A<capture<?>,capture<?>>)'">(foo)</error>; baz<error descr="'baz(A<capture<?>,capture<?>>)' in 'B' cannot be applied to '(A<capture<?>,capture<?>>)'">(foo1)</error>; } <K> void baz(A<K, K> a) { } } class C<T,S>{} class D<T> extends C<T,T> { void foo(D<?> x){ bar(x); } <T> void bar(C<T,T> x){} }