import java.util.List; class Main { void fooExtends(List list) { var x = list.get(0); x = ""; var y = list; y.add(""); } void fooSuper(List list) { var x = list.get(0); x = ""; var y = list; y.add(""); } void fooX(X x) { var v = x; v.add(""); var e = x.get(); e = ""; } void fooXArray(X x) { var v = m(x.get()); String s = v[1]; v[1] = s; var e = m(x); e[0].add(""); } void fooHierarchy(X x) { var y = x; y = new X(); y = new X(); A a = y.get(); B b = y.get(); C c = y.get(); } M[] m(M m) { return null; } } class A {} class B extends A {} class C extends B {} class X { T get() {return null;} void add(T t) {} } class RecursiveBound { class C> { } void test(C c) { var x = c; } } class RecursiveBound2 { public static > void merge(T array) { var auxArray = getGenericArrayInstance(); auxArray = array; } private static

> P getGenericArrayInstance() { return null; } }