package test1; import org.eclipse.jdt.annotation.*; import libs.*; class A {} class B {} class C {} @NonNullByDefault public class Reconcile2 { C test(MyFunction<A,@Nullable B> f1, MyFunction<B,C> f2, A a) { return f2.compose(f1).apply(a); // actually incompatible, but we tweak compose to pretend it's compatible } void test2(Arrays lib) { @Nullable String[]@NonNull[] arr = lib.getArray(); if (arr == null) throw new NullPointerException(); // not dead code @Nullable String @NonNull[] arr2 = Arrays.array; Arrays.array[1] = null; } }