import org.checkerframework.checker.tainting.qual.Untainted; import java.util.List; class LocalCheck { public void test(@Untainted List clean, @Untainted List cleanList2, @Untainted String t, String dirty) { sink(t); sink(clean.get(0)); List list1 = clean; List list2 = clean; update(list1); //not highlighted in current realisation, might be changed list2.add(dirty); //not highlighted in current realisation, might be changed sink(list1.get(0)); //warn sink(list2.get(0)); //warn sink(clean.get(0)); List list3 = cleanList2; sink(list3.get(0)); sink(dirty); //warn String clean2 = t; sink(t); clean2 = dirty; sink(clean2); //warn String toDirty = t; sink(toDirty); new Runnable() { @Override public void run() { sink(toDirty); } }; Runnable runnable = () -> sink(toDirty); } private void update(List list) { list.add("1"); } public void sink(@Untainted String clean) { } }