package x; import java.util.*; import org.intellij.lang.annotations.Flow; class ListTack { void f(String s) { } void g(List l) { l.add(1, "uuu"); f(l.get(0)); } void h() { ArrayList strings = new ArrayList(); strings.add("x"); X s2 = new X(strings); s2.add("y"); List s3 = new ArrayList(); s3.addAll(s2.toCollection()); Collection s4 = new ArrayList(s3.subList(0,1)); g(new ArrayList(s4)); } class X { X (@Flow(sourceIsContainer = true, targetIsContainer = true) Collection input) {} @Flow(sourceIsContainer = true) T get() { return null;} void add(@Flow(targetIsContainer = true) T item) {} @Flow(sourceIsContainer=true, targetIsContainer = true) Collection toCollection() { return null; } } }