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";
}
}