code: protected ChangeParameterMetaData createChangeParameterMetadata(String parameterName) {
  
          try {
              String displayName = parameterName.replaceAll("([A-Z])", " $1");
              displayName = displayName.substring(0, 1).toUpperCase() + displayName.substring(1);
  
              PropertyDescriptor property = null;
              for (PropertyDescriptor prop : PropertyUtils.getInstance().getDescriptors(getClass())) {
                  if (prop.getDisplayName().equals(parameterName)) {
                      property = prop;
                      break;
                  }
              }
              if (property == null) {
                  throw new UnexpectedLiquibaseException("Could not find property " + parameterName);
              }
  
              Method readMethod = property.getReadMethod();
              if (readMethod == null) {
                  readMethod = getClass().getMethod("is" + StringUtil.upperCaseFirst(property.getName()));
              }
              Type type = readMethod.getGenericReturnType();
  
              DatabaseChangeProperty changePropertyAnnotation = readMethod.getAnnotation(DatabaseChangeProperty.class);
  
              String mustEqualExisting = createMustEqualExistingMetaData(parameterName, changePropertyAnnotation);
              String description = createDescriptionMetaData(parameterName, changePropertyAnnotation);
              Map<String, Object> examples = createExampleValueMetaData(parameterName, changePropertyAnnotation);
              String since = createSinceMetaData(parameterName, changePropertyAnnotation);
              SerializationType serializationType = createSerializationTypeMetaData(
                  parameterName, changePropertyAnnotation
              );
              String[] requiredForDatabase = createRequiredDatabasesMetaData(parameterName, changePropertyAnnotation);
              String[] supportsDatabase = createSupportedDatabasesMetaData(parameterName, changePropertyAnnotation);
  
              return new ChangeParameterMetaData(this, parameterName, displayName, description, examples, since,
                  type, requiredForDatabase, supportsDatabase, mustEqualExisting, serializationType);
          } catch (IntrospectionException|UnexpectedLiquibaseException|NoSuchMethodException|SecurityException e) {
              throw new UnexpectedLiquibaseException(e);
          }
      }
docs: Called by {@link #createChangeMetaData()} to create metadata for a given parameter. It finds the method that corresponds to the parameter
  and calls the corresponding create*MetaData methods such as {@link #createRequiredDatabasesMetaData(String, DatabaseChangeProperty)} to determine the
  correct values for the ChangeParameterMetaData fields.
  
  @throws UnexpectedLiquibaseException if the passed parameter does not exist