liquibase-core/src/main/java/liquibase/change/AbstractChange.java
@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);
        }
    }
@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);
        }
    }
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