private static boolean equal(JValueLiteral literal1, JValueLiteral literal2) { if (literal1 == null || literal2 == null) { return literal1 == literal2; } if (literal1 == literal2) { return true; } if (literal1.getClass() != literal2.getClass()) { // these are different literal types. return false; } if (literal1 instanceof JFloatLiteral) { int bits1 = Float.floatToRawIntBits(((JFloatLiteral) literal1).getValue()); int bits2 = Float.floatToRawIntBits(((JFloatLiteral) literal2).getValue()); return bits1 == bits2; } if (literal1 instanceof JDoubleLiteral) { long bits1 = Double.doubleToRawLongBits(((JDoubleLiteral) literal1).getValue()); long bits2 = Double.doubleToRawLongBits(((JDoubleLiteral) literal2).getValue()); return bits1 == bits2; } Object valueObj1 = literal1.getValueObj(); Object valueObj2 = literal2.getValueObj(); if (valueObj1 == null || valueObj2 == null) { return valueObj1 == valueObj2; } return valueObj1.equals(valueObj2); }