code: @Override
      public ChangeMetaData createChangeMetaData() {
          try {
              DatabaseChange databaseChange = this.getClass().getAnnotation(DatabaseChange.class);
  
              if (databaseChange == null) {
                  throw new UnexpectedLiquibaseException("No @DatabaseChange annotation for " + getClass().getName());
              }
  
              Set<ChangeParameterMetaData> params = new HashSet<>();
              for (PropertyDescriptor property : PropertyUtils.getInstance().getDescriptors(getClass())) {
                  if (isInvalidProperty(property)) {
                      continue;
                  }
                  Method readMethod = property.getReadMethod();
                  Method writeMethod = property.getWriteMethod();
                  if (readMethod == null) {
                      try {
                          readMethod = this.getClass().getMethod(
                              "is" + StringUtil.upperCaseFirst(property.getName())
                          );
                      } catch (NoSuchMethodException|SecurityException ignore) {
                          //it was worth a try
                      }
                  }
                  if ((readMethod != null) && (writeMethod != null)) {
                      DatabaseChangeProperty annotation = readMethod.getAnnotation(DatabaseChangeProperty.class);
                      if ((annotation == null) || annotation.isChangeProperty()) {
                          params.add(createChangeParameterMetadata(property.getDisplayName()));
                      }
                  }
  
              }
  
              Map<String, String> notes = new HashMap<>();
              for (DatabaseChangeNote note : databaseChange.databaseNotes()) {
                  notes.put(note.database(), note.notes());
              }
  
              return new ChangeMetaData(databaseChange.name(), databaseChange.description(), databaseChange.priority(),
                  databaseChange.appliesTo(), notes, params);
          } catch (UnexpectedLiquibaseException|IntrospectionException e) {
              throw new UnexpectedLiquibaseException(e);
          }
      }
docs: Generate the ChangeMetaData for this class. Default implementation reads from the @{@link DatabaseChange } annotation
  and calls out to {@link #createChangeParameterMetadata(String)} for each property.
  
  @throws UnexpectedLiquibaseException if no @DatabaseChange annotation on this Change class