import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class ConstantHolder {
static final ConstantHolder X = new ConstantHolder();
static final ConstantHolder Y = new ConstantHolder();
static final Object[] ARRAY = new Object[10];
static final Object[] ARRAY2 = new Object[10];
ConstantHolder() {
if(X == null) {
System.out.println("X is initializing");
}
}
interface Foo {
ConstantHolder A = new ConstantHolder();
ConstantHolder B = new ConstantHolder();
}
@Nullable String str;
}
class TestNewObjects {
void test(ConstantHolder ti) {
if(ConstantHolder.X == ConstantHolder.Y) {
System.out.println("Impossible");
}
if(ConstantHolder.Foo.A != ConstantHolder.Foo.B) {
System.out.println("Always");
}
if(ti == ConstantHolder.X && ti == ConstantHolder.Y) {
System.out.println("Impossible");
}
if(ti != ConstantHolder.X || ti != ConstantHolder.Foo.A) {
System.out.println("Always");
}
if(ConstantHolder.X.str != null && ConstantHolder.X.str.isEmpty()) {
System.out.println("ok");
}
if(ConstantHolder.X.str != null && ConstantHolder.Y.str.isEmpty()) {
System.out.println("possible NPE");
}
}
Object getObject() {
return new Object();
}
void testTypes(boolean b) {
Object x = b ? getObject() : ConstantHolder.X;
if(x instanceof ConstantHolder && b) {
System.out.println("true");
}
if(!(x instanceof ConstantHolder) && b) {
System.out.println("false");
}
}
void testArray() {
if(ConstantHolder.ARRAY == ConstantHolder.ARRAY2) {
System.out.println("Impossible");
}
ConstantHolder.ARRAY[0] = Math.random() > 0.5 ? null : "foo";
if(ConstantHolder.ARRAY[0] != null) {
System.out.println(ConstantHolder.ARRAY[0].hashCode());
}
if(ConstantHolder.ARRAY2[0] != null) {
System.out.println(ConstantHolder.ARRAY[0].hashCode());
}
}
}