import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import org.checkerframework.checker.nullness.qual.*; //interface Dest<DA,DB,DC,DD,DE> { //} // //interface Inter1<I1A,I1B,I1C,I1D,I1E> extends Dest<I1A, I1A, I1C, I1D, String> {} // //interface Inter2<I2A,I2B,I2C,I2D,I2E> extends Dest<I2D,I2E,I2C,I2D,I2E> {} // //class Source<SA,SB,SC,SD,SE> extends HashMap<SA,SB> implements Inter2<SA,SB,SB,SD,SE> {} class KeyForPropagation { { List<@KeyFor("a") String> a = new ArrayList<String>(); } static { List<@KeyFor("b") String> b = new ArrayList<String>(); } List<@KeyFor("c") String> c = new ArrayList<String>(); void method() { List<@KeyFor("d") String> d = new ArrayList<String>(); } void method(Map<String, String> v) { Set<String> ks = v.keySet(); } }