import java.util.Collection; import java.util.ArrayList; interface YO<<warning descr="Type parameter 'T' is never used">T</warning>> {} interface YO1 extends YO<String> {} interface YO2 extends YO<Integer> {} class ConvertibleTest { YO2 bar (YO1 s) { return <error descr="Inconvertible types; cannot cast 'YO1' to 'YO2'">(YO2) s</error>; } } //IDEA-1097 interface Interface1 {} interface Interface2 {} class Implementation implements Interface1 {} class InconvertibleTypesTest <E extends Interface2> { E thing; public E getThing() { return thing; } Implementation foo(InconvertibleTypesTest<? extends Interface1> i2) { //This is a valid cast from intersection type return (Implementation) i2.getThing(); } } class MyCollection extends ArrayList<Integer> {} class Tester { Collection<String> x(MyCollection l) { return <error descr="Inconvertible types; cannot cast 'MyCollection' to 'java.util.Collection<java.lang.String>'">(Collection<String>) l</error>; } } class IDEADEV3978 { class Constructor<T> { Class<T> getDeclaringClass() { return null; } } public static void foo(Constructor<?> constructor) { if(constructor.getDeclaringClass() == String.class) { //captured wildcard is convertible System.out.println("yep"); } } } class C2<T> { void f(T t) { if (t instanceof Object[]) return; } } class Casting { void f(Object o) { if (o instanceof int[]) return; Object obj1 = (Object)true; f(obj1); Object ob = (Number)1; f(ob); Object ob2 = (Object)1; f(ob2); } public static <T> T convert(Class<T> clazz, Object obj) { if (obj == null) return null; if (String[].class == clazz) return <warning descr="Unchecked cast: 'java.lang.String[]' to 'T'">(T) parseArray(obj)</warning>; return null; } private static String[] parseArray(Object obj) { return obj.toString().split(","); } } class CastPrimitiveToTypeParam<T> { T foo() { return <error descr="Inconvertible types; cannot cast 'int' to 'T'">(T)1</error>; } }