docs: public static boolean areEquals(final Class<?> firstClass,
                                      final Class<?> secondClass) {
          final boolean isFirstShort = firstClass.isAssignableFrom(Short.class);
          final boolean isSecondShort = secondClass.isAssignableFrom(Short.class);
          if (isFirstShort && isSecondShort
                  || isFirstShort && secondClass.equals(short.class)
                  || firstClass.equals(short.class) && isSecondShort)
              return true;
  
          final boolean isFirstByte = firstClass.isAssignableFrom(Byte.class);
          final boolean isSecondByte = secondClass.isAssignableFrom(Byte.class);
          if (isFirstByte && isSecondByte
                  || isFirstByte && secondClass.equals(byte.class)
                  || firstClass.equals(byte.class) && isSecondByte)
              return true;
  
          final boolean isFirstInt = firstClass.isAssignableFrom(Integer.class);
          final boolean isSecondInt = secondClass.isAssignableFrom(Integer.class);
          if (isFirstInt && isSecondInt
                  || isFirstInt && secondClass.equals(int.class)
                  || firstClass.equals(int.class) && isSecondInt)
              return true;
  
          final boolean isFirstLong = firstClass.isAssignableFrom(Long.class);
          final boolean isSecondLong = secondClass.isAssignableFrom(Long.class);
          if (isFirstLong && isSecondLong
                  || isFirstLong && secondClass.equals(long.class)
                  || firstClass.equals(long.class) && isSecondLong)
              return true;
  
          final boolean isFirstDouble = firstClass.isAssignableFrom(Double.class);
          final boolean isSecondDouble = secondClass.isAssignableFrom(Double.class);
          if (isFirstDouble && isSecondDouble
                  || isFirstDouble && secondClass.equals(double.class)
                  || firstClass.equals(double.class) && isSecondDouble)
              return true;
  
          final boolean isFirstFloat = firstClass.isAssignableFrom(Float.class);
          final boolean isSecondFloat = secondClass.isAssignableFrom(Float.class);
          if (isFirstFloat && isSecondFloat
                  || isFirstFloat && secondClass.equals(float.class)
                  || firstClass.equals(float.class) && isSecondFloat)
              return true;
  
          final boolean isFirstChar = firstClass.isAssignableFrom(Character.class);
          final boolean isSecondChar = secondClass.isAssignableFrom(Character.class);
          if (isFirstChar && isSecondChar
                  || isFirstChar && secondClass.equals(char.class)
                  || firstClass.equals(char.class) && isSecondChar)
              return true;
  
          final boolean isFirstBool = firstClass.isAssignableFrom(Boolean.class);
          final boolean isSecondBool = secondClass.isAssignableFrom(Boolean.class);
          if (isFirstBool && isSecondBool
                  || isFirstChar && secondClass.equals(boolean.class)
                  || firstClass.equals(boolean.class) && isSecondChar)
              return true;
  
          return firstClass.equals(secondClass);
      }