import org.checkerframework.checker.nullness.qual.*; public class Boxing { void withinOperation() { Integer i1 = 3; int i1u = i1 + 2; // valid Integer i2 = null; //:: error: (unboxing.of.nullable) int i2u = i2 + 2; // invalid Integer i3 = i1; i3.toString(); } void withinAssignment() { Integer i1 = 5; int i1u = i1; Integer i2 = null; //:: error: (unboxing.of.nullable) int i2u = i2; // invalid } void validWithinUnary() { // within blocks to stop flow Integer i1 = 1, i2 = 1, i3 = 1, i4 = 1; ++i1; i2++; } void invalidWithinUnary() { // within blocks to stop flow Integer i1 = null, i2 = null, i3 = null, i4 = null; //:: error: (unboxing.of.nullable) ++i1; // invalid //:: error: (unboxing.of.nullable) i2++; // invalid } void validCompoundAssignmentsAsVariable() { @NonNull Integer i = 0; // nonnull is needed because flow is buggy i += 1; i -= 1; @NonNull Boolean b = true; b &= true; } void invalidCompoundAssignmentsAsVariable() { Integer i = null; //:: error: (unboxing.of.nullable) i += 1; // invalid Boolean b = null; //:: error: (unboxing.of.nullable) b &= true; // invalid } void invalidCompoundAssignmentAsValue() { @NonNull Integer var = 3; Integer val = null; //:: error: (unboxing.of.nullable) var += val; Boolean b1 = null; boolean b2 = true; //:: error: (unboxing.of.nullable) b2 &= b1; // invalid } void randomValidStringOperations() { String s = null; s += null; } void equalityTest() { Integer bN = null; Integer bN1 = null; Integer bN2 = null; Integer bN3 = null; Integer bN4 = null; Integer bN5 = null; Integer bN6 = null; Integer bN7 = null; Integer b1 = 1; int u1 = 1; System.out.println(bN == bN1); // valid System.out.println(bN2 == b1); // valid System.out.println(bN3 != bN4); // valid System.out.println(bN5 != b1); // valid System.out.println(u1 == b1); System.out.println(u1 != b1); System.out.println(u1 == u1); System.out.println(u1 != u1); //:: error: (unboxing.of.nullable) System.out.println(bN6 == u1); // invalid //:: error: (unboxing.of.nullable) System.out.println(bN7 != u1); // invalid } void addition() { Integer bN = null; Integer bN1 = null; Integer bN2 = null; Integer bN3 = null; Integer b1 = 1; int u1 = 1; //:: error: (unboxing.of.nullable) System.out.println(bN + bN1); // invalid //:: error: (unboxing.of.nullable) System.out.println(bN2 + b1); // invalid System.out.println(u1 + b1); System.out.println(u1 + u1); //:: error: (unboxing.of.nullable) System.out.println(bN3 + u1); // invalid } void visitCast() { Integer bN = null; Integer bN2 = null; Integer b1 = 1; int u1 = 1; println(bN); //:: error: (unboxing.of.nullable) println((int) bN2); // invalid println(b1); println((int) b1); println(u1); println((int) u1); } void println(@Nullable Object o) {} void testObjectString() { Object o = null; o += "m"; } void testCharString() { CharSequence cs = null; cs += "m"; } }