import java.util.Set; public class WrongGenerics { @SuppressWarnings("unchecked") <T> Set<Foo<? extends T>> foo(Set<Foo<?>> foo) { return <error descr="Inconvertible types; cannot cast 'java.util.Set<Foo<?>>' to 'java.util.Set<Foo<? extends T>>'">(Set<Foo<? extends T>>)foo</error>; } @SuppressWarnings("unchecked") <T> Set<Foo<? extends T>> bar(Set<Foo<? extends T>> foo) { return <error descr="Inconvertible types; cannot cast 'java.util.Set<Foo<? extends T>>' to 'java.util.Set<Foo<?>>'">(Set<Foo<?>>) foo</error>; } @SuppressWarnings("unchecked") <T> Foo<? extends T> bothSucceed(Foo<?> foo) { return (Foo<? extends T>) foo; } @SuppressWarnings("unchecked") <T> Foo<Foo<? extends T>> bothFail(Foo<Foo<?>> foo) { return <error descr="Inconvertible types; cannot cast 'Foo<Foo<?>>' to 'Foo<Foo<? extends T>>'">(Foo<Foo<? extends T>>) foo</error>; } @SuppressWarnings("unchecked") <T> Set<Foo<? extends T>> onlyIntelliJSucceeds(Set<Foo<?>> foo) { return <error descr="Inconvertible types; cannot cast 'java.util.Set<Foo<?>>' to 'java.util.Set<Foo<? extends T>>'">(Set<Foo<? extends T>>) foo</error>; } } class Foo<T> { }