import checkers.nullness.quals.*; public class Boxing { void withinOperation() { Integer i1 = 3; int i1u = i1 + 2; // valid Integer i2 = null; //:: (unboxing.of.nullable) int i2u = i2 + 2; // invalid } void withinAssignment() { Integer i1 = 5; int i1u = i1; Integer i2 = null; //:: (assignment.type.incompatible) 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; //:: (unboxing.of.nullable) ++i1; // invalid //:: (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; //:: (unboxing.of.nullable) i += 1; // invalid Boolean b = null; //:: (unboxing.of.nullable) b &= true; // invalid } void invalidCompoundAssignmentAsValue() { @NonNull Integer var = 3; Integer val = null; //:: (unboxing.of.nullable) var += val; Boolean b1 = null; boolean b2 = true; //:: (unboxing.of.nullable) b2 &= b1; // invalid } void randomValidStringOperations() { String s = null; s += null; } void equalityTest() { Integer bN = null; Integer b1 = 1; int u1 = 1; System.out.println(bN == bN); // valid System.out.println(bN == b1); // valid System.out.println(bN != bN); // valid System.out.println(bN != b1); // valid System.out.println(u1 == b1); System.out.println(u1 != b1); System.out.println(u1 == u1); System.out.println(u1 != u1); //:: (unboxing.of.nullable) System.out.println(bN == u1); // invalid //:: (unboxing.of.nullable) System.out.println(bN != u1); // invalid } void addition() { Integer bN = null; Integer b1 = 1; int u1 = 1; //:: (unboxing.of.nullable) System.out.println(bN + bN); // invalid //:: (unboxing.of.nullable) System.out.println(bN + b1); // invalid System.out.println(u1 + b1); System.out.println(u1 + u1); //:: (unboxing.of.nullable) System.out.println(bN + u1); // invalid } void visitCast() { Integer bN = null; Integer b1 = 1; int u1 = 1; println(bN); //:: (unboxing.of.nullable) println((int)bN); // 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"; } }