import java.util.*;

public class A extends ArrayList<Long> {
  Object f1 = null;
  Object f2 = new ArrayList<Long>();

  public void m1(List<Long> l, List<Integer> l2) {
    f1 = new ArrayList<Long>();
    f2 = f1;
    f2 = l;
    Object x = m2(f2, l.size());
    Object z = x;
    Object y = l.isEmpty() ? this : (Object)null;
    z = y;
    if (l.size() > 3)
      y = (Object)new ArrayList<Integer>();
    else
      y = l2;
    z = y;
  }

  private Object m2(Object o, int i) {
    if (i == 7)
      return null;
    else if (i == 8)
      return o;
    else
      return new ArrayList<Long>();
  }

  public void m3(Set<Integer> s) {
    Object r;
    for (Object x : s) {
      r = x;
    }
    for (Object x : new A[3]) {
      r = x;
    }
  }

  public Object m4(Object o) {
    if (o instanceof Long) {
      return o;
    }
    return o;
  }

  public Object m5(Object o) {
    try {
      Integer i = (Integer)o;
      Object o2 = o;
    } catch(ClassCastException cce) {
      return o;
    }
    return o;
  }

  public void m6(int[] xs) {
    Object r;
    for (Object x : xs) {
      r = x;
    }
  }

  public void m7() {
    Object x = 7;
    int i = (Integer)x;
    int j = i;
    Object x2 = (Integer)7;
    int i2 = (Integer)x2;
    int j2 = i2;
  }
}

@@ -1265,11 +1265,357 @@
  i2;%0A  %7D
+%0A%0A  public static class C %7B%0A    private Map%3CString, String%3E map;%0A    public static C empty = new C(Collections.emptyMap());%0A    private C(Map%3CString, String%3E map) %7B%0A      this.map = map;%0A    %7D%0A    public C() %7B%0A      this(new LinkedHashMap%3C%3E());%0A    %7D%0A    public void put(String k, String v) %7B%0A      map.put(k, v);%0A      empty.put(k, v);%0A    %7D%0A  %7D
 %0A%7D%0A

Add minor test case to typeflow qltest.