package dfa;
public class InstanceofFromObjectToPrimitive {
public static void main(String[] args) {
testSimple(0);
testObjectNull();
testObjectBoolean();
testNumberInt();
testObjectInt();
testObjectDouble();
testObjectBooleanPattern();
testNumberIntPattern();
testObjectIntPattern();
testObjectNullPattern();
testObjectDoublePattern();
testObjectRecord();
testNumberRecord();
testIntegerRecord();
testIntegerRecordNotNull();
testLongRecord();
testLongRecordNotNull();
}
private static void testObjectRecord() {
ObjectRecord o = new ObjectRecord(1);
if (o instanceof ObjectRecord(int a)) {
System.out.println("int");
}
if (o instanceof ObjectRecord(byte a)) {
System.out.println("byte");
}
if (o instanceof ObjectRecord(short a)) {
System.out.println("short");
}
if (o instanceof ObjectRecord(long a)) {
System.out.println("long");
}
if (o instanceof ObjectRecord(float a)) {
System.out.println("float");
}
if (o instanceof ObjectRecord(double a)) {
System.out.println("double");
}
}
private static void testNumberRecord() {
NumberRecord o = new NumberRecord(1);
if (o instanceof NumberRecord(int a)) {
System.out.println("int");
}
if (o instanceof NumberRecord(byte a)) {
System.out.println("byte");
}
if (o instanceof NumberRecord(short a)) {
System.out.println("short");
}
if (o instanceof NumberRecord(long a)) {
System.out.println("long");
}
if (o instanceof NumberRecord(float a)) {
System.out.println("float");
}
if (o instanceof NumberRecord(double a)) {
System.out.println("double");
}
}
private static void testIntegerRecord() {
IntegerRecord o = new IntegerRecord(1);
if (o instanceof IntegerRecord(int a)) {
System.out.println("int");
}
if (o instanceof IntegerRecord(long a)) {
System.out.println("long");
}
if (o instanceof IntegerRecord(float a)) {
System.out.println("float");
}
if (o instanceof IntegerRecord(double a)) {
System.out.println("double");
}
}
private static void testLongRecord() {
LongRecord o = new LongRecord(1L);
if (o instanceof LongRecord(long a)) {
System.out.println("long");
}
if (o instanceof LongRecord(float a)) {
System.out.println("float");
}
if (o instanceof LongRecord(double a)) {
System.out.println("double");
}
}
private static void testLongRecordNotNull() {
LongRecord o = new LongRecord(1L);
if (o.o() == null) {
return;
}
if (o instanceof LongRecord(long a)) { //true
System.out.println("long");
}
if (o instanceof LongRecord(float a)) {
System.out.println("float");
}
if (o instanceof LongRecord(double a)) {
System.out.println("double");
}
}
private static void testDirectFieldAccess() {
LongRecord o = new LongRecord(1L);
if (o.o == null) {
return;
}
if (o instanceof LongRecord(long a)) { //true
System.out.println("long");
}
}
private static void testIntegerRecordNotNull() {
IntegerRecord o = new IntegerRecord(1);
if (o.o() == null) {
return;
}
if (o instanceof IntegerRecord(int a)) { //true
System.out.println("int");
}
if (o instanceof IntegerRecord(long a)) { //true
System.out.println("long");
}
if (o instanceof IntegerRecord(float a)) {
System.out.println("float");
}
if (o instanceof IntegerRecord(double a)) {//true
System.out.println("double");
}
}
record ObjectRecord(Object o) {
}
record NumberRecord(Number o) {
}
record IntegerRecord(Integer o) {
}
record LongRecord(Long o) {
}
private static void testSimple(Object i) {
if (i instanceof int) {
System.out.println(i);
}
}
public static void testObjectNull() {
Object o = null;
if (o instanceof int) { //false
System.out.println("int");
}
if (o instanceof char) { //false
System.out.println("char");
}
if (o instanceof byte) { //false
System.out.println("byte");
}
if (o instanceof short) { //false
System.out.println("short");
}
if (o instanceof long) { //false
System.out.println("long");
}
if (o instanceof float) { //false
System.out.println("float");
}
if (o instanceof double) { //false
System.out.println("double");
}
if (o instanceof boolean) { //false
System.out.println("boolean");
}
}
public static void testObjectInt() {
Object o = 1;
if (o instanceof int) { //true
System.out.println("int");
}
if (o instanceof char) { //false
System.out.println("char");
}
if (o instanceof byte) { //false
System.out.println("byte");
}
if (o instanceof short) { //false
System.out.println("short");
}
if (o instanceof long) { //false
System.out.println("long");
}
if (o instanceof float) { //false
System.out.println("float");
}
if (o instanceof double) { //false
System.out.println("double");
}
if (o instanceof boolean) { //false
System.out.println("boolean");
}
}
public static void testNumberInt() {
Number o = 1;
if (o instanceof int) { //true
System.out.println("int");
}
if (o instanceof byte) { //false
System.out.println("byte");
}
if (o instanceof short) { //false
System.out.println("short");
}
if (o instanceof long) { //false
System.out.println("long");
}
if (o instanceof float) { //false
System.out.println("float");
}
if (o instanceof double) { //false
System.out.println("double");
}
}
public static void testObjectBoolean() {
Object o = true;
if (o instanceof int) { //false
System.out.println("int");
}
if (o instanceof char) { //false
System.out.println("char");
}
if (o instanceof byte) { //false
System.out.println("byte");
}
if (o instanceof short) { //false
System.out.println("short");
}
if (o instanceof long) { //false
System.out.println("long");
}
if (o instanceof float) { //false
System.out.println("float");
}
if (o instanceof double) { //false
System.out.println("double");
}
if (o instanceof boolean) { //true
System.out.println("boolean");
}
}
public static void testObjectDouble() {
Object o = 1.0;
if (o instanceof int) { //false
System.out.println("int");
}
if (o instanceof char) { //false
System.out.println("char");
}
if (o instanceof byte) { //false
System.out.println("byte");
}
if (o instanceof short) { //false
System.out.println("short");
}
if (o instanceof long) { //false
System.out.println("long");
}
if (o instanceof float) { //false
System.out.println("float");
}
if (o instanceof double) { //true
System.out.println("double");
}
if (o instanceof boolean) { //false
System.out.println("boolean");
}
}
public static void testObjectIntPattern() {
Object o = 1;
if (o instanceof int t) { //true
System.out.println("int" + t);
}
if (o instanceof char t) { //false
System.out.println("char" + t);
}
if (o instanceof byte t) { //false
System.out.println("byte" + t);
}
if (o instanceof short t) { //false
System.out.println("short" + t);
}
if (o instanceof long t) { //false
System.out.println("long" + t);
}
if (o instanceof float t) { //false
System.out.println("float" + t);
}
if (o instanceof double t) { //false
System.out.println("double" + t);
}
if (o instanceof boolean t) { //false
System.out.println("boolean" + t);
}
}
public static void testObjectNullPattern() {
Object o = null;
if (o instanceof int t) { //false
System.out.println("int" + t);
}
if (o instanceof char t) { //false
System.out.println("char" + t);
}
if (o instanceof byte t) { //false
System.out.println("byte" + t);
}
if (o instanceof short t) { //false
System.out.println("short" + t);
}
if (o instanceof long t) { //false
System.out.println("long" + t);
}
if (o instanceof float t) { //false
System.out.println("float" + t);
}
if (o instanceof double t) { //false
System.out.println("double" + t);
}
if (o instanceof boolean t) { //false
System.out.println("boolean" + t);
}
}
public static void testNumberIntPattern() {
Number o = 1;
if (o instanceof int t) { //true
System.out.println("int" + t);
}
if (o instanceof byte t) { //false
System.out.println("byte" + t);
}
if (o instanceof short t) { //false
System.out.println("short" + t);
}
if (o instanceof long t) { //false
System.out.println("long" + t);
}
if (o instanceof float t) { //false
System.out.println("float" + t);
}
if (o instanceof double t) { //false
System.out.println("double" + t);
}
}
public static void testObjectBooleanPattern() {
Object o = true;
if (o instanceof int t) { //false
System.out.println("int" + t);
}
if (o instanceof char t) { //false
System.out.println("char" + t);
}
if (o instanceof byte t) { //false
System.out.println("byte" + t);
}
if (o instanceof short t) { //false
System.out.println("short" + t);
}
if (o instanceof long t) { //false
System.out.println("long" + t);
}
if (o instanceof float t) { //false
System.out.println("float" + t);
}
if (o instanceof double t) { //false
System.out.println("double" + t);
}
if (o instanceof boolean t) { //true
System.out.println("boolean" + t);
}
}
public static void testObjectDoublePattern() {
Object o = 1.0;
if (o instanceof int t) { //false
System.out.println("int" + t);
}
if (o instanceof char t) { //false
System.out.println("char" + t);
}
if (o instanceof byte t) { //false
System.out.println("byte" + t);
}
if (o instanceof short t) { //false
System.out.println("short" + t);
}
if (o instanceof long t) { //false
System.out.println("long" + t);
}
if (o instanceof float t) { //false
System.out.println("float" + t);
}
if (o instanceof double t) { //true
System.out.println("double" + t);
}
if (o instanceof boolean t) { //false
System.out.println("boolean" + t);
}
}
}