code: @Nullable
      static ColumnMetadata buildColumnMetadata(@NotNull PropertyDescriptor propertyDescriptor,
                                                @NotNull Class clazz,
                                                @NotNull CassandraClient cassandraClient,
                                                @NotNull TableMetadata tableMetadata) {
  
          try {
              Field field = clazz.getDeclaredField(propertyDescriptor.getName());
  
              if (field.isAnnotationPresent(Column.class)) {
  
                  Column columnAnnotation = field.getDeclaredAnnotation(Column.class);
  
                  String columnName = getColumnName(propertyDescriptor, columnAnnotation);
  
                  ColumnMetadata columnMetadata = new BaseColumnMetadata(propertyDescriptor, clazz, field.getType(), columnName, tableMetadata.getColumn(columnName).getType());
  
                  if (field.isAnnotationPresent(Enumerated.class)) {
                      Enumerated enumeratedAnnotation = field.getDeclaredAnnotation(Enumerated.class);
  
                      columnMetadata = new EnumeratedMetadata(columnMetadata, enumeratedAnnotation.enumType());
                  }
                  if (field.isAnnotationPresent(UDTColumn.class)) {
                      UDTColumn udtColumnAnnotation = field.getDeclaredAnnotation(UDTColumn.class);
  
                      Class udtClassType = udtColumnAnnotation.udtType();
  
                      if (udtClassType.isAnnotationPresent(UDT.class)) {
                          UDT declaredAnnotation = (UDT) udtClassType.getDeclaredAnnotation(UDT.class);
  
                          String keyspace = StringUtils.isEmpty(declaredAnnotation.keyspace()) ? cassandraClient.getDefaultKeyspace() : declaredAnnotation.keyspace();
  
                          UserType userType = cassandraClient.getKeyspaceMetadata(keyspace)
                                                             .getUserType(declaredAnnotation.name());
  
                          Verify.verifyNotNull(userType);
  
                          columnMetadata = new UserDataTypeMetadata(udtColumnAnnotation.udtType(), userType, columnMetadata);
                      }
  
  
                  }
  
                  if (field.isAnnotationPresent(PrimaryKey.class)) {
                      PrimaryKey primaryKeyAnnotation = field.getDeclaredAnnotation(PrimaryKey.class);
                      columnMetadata = new PrimaryKeyMetadata(columnMetadata, primaryKeyAnnotation.order(), primaryKeyAnnotation.isPartitionKey());
                  }
  
  
                  return columnMetadata;
              }
          } catch (NoSuchFieldException e) {
              if (!StringUtils.equals("class", propertyDescriptor.getDisplayName())) {
                  LOGGER.warn("Can't get field", e);
              }
          }
  
          return null;
      }
docs: Build column metadata from field
  
  @param propertyDescriptor Field property descriptor
  @param clazz              Entity java class
  
  @return Column metadata or null if property is not column