package org.checkerframework.checker.tainting.qual; public class LocalInference { void simpleInit() { String s1 = source(); String s = s1; sink(s); } void concatInit() { String s1 = "foo" + source() + "bar"; String s = "foo" + s1 + "bar"; sink(s); } void recursive() { String s1 = source(); String s = s1; s1 = s; sink(s); } void ternary(boolean b) { String s1 = b ? source() : ""; String s = s1; sink(s); } void nestedTernary(boolean b, boolean c) { String s1 = b ? c ? "" : (source()) : ""; String s = s1; sink(s); } void blocks() { String s1; { s1 = source(); { String s = s1; sink(s); } } } void transitive(boolean b) { String s2; { s2 = b ? b ? (source() + source()) : "" : ""; } String s1 = ((s2) + (safe())); String s = s1; sink(s); } void transitiveRecursive(boolean b) { String s = ""; String s1 = s; String s2 = s1 + foo(); String s3 = s2; if (b) s = s3; sink(s); } String foo() { return ""; } @Untainted String safe() { return "safe"; } @Tainted String source() { return "tainted"; } void sink(@Untainted String s1) {} }