docs: public static Class getFieldType(FieldNode field) {
          // Step 1: Analyze the field's declared type
          Class declaredType = getClassForClassNode(field.getType());
          if (declaredType != null) {
              return declaredType;
          }
  
          // Step 2: Analyze the cast type of the initial expression
          if (field.getInitialExpression() != null) {
              Class castType = getClassForClassNode(field.getInitialExpression().getType());
              if (castType != null) {
                  return castType;
              }
          }
  
          // Step 3: Look at the literal within the constant
          if (field.getInitialExpression() instanceof ConstantExpression) {
              Object constantValue = ((ConstantExpression) field.getInitialExpression()).getValue();
              if (constantValue == null) {
                  return null;
              } else if (constantValue instanceof String) {
                  return String.class;
              } else if (isBoolean(field.getInitialExpression())) {
                  return Boolean.class;
              } else if (constantValue.getClass() == Integer.class || constantValue.getClass() == Integer.TYPE) {
                  return Integer.class;
              } else if (constantValue.getClass() == Long.class || constantValue.getClass() == Long.TYPE) {
                  return Long.class;
              } else if (constantValue.getClass() == Double.class || constantValue.getClass() == Double.TYPE) {
                  return Double.class;
              } else if (constantValue.getClass() == Float.class || constantValue.getClass() == Float.TYPE) {
                  return Float.class;
              }
          }
          return null;
      }