@Override public List<DbCommand> getSchemaChangeCommands(SchemaChange change, SchemaChangeContext context) { List<DbCommand> commands = new ArrayList<>(); Method method = schemaChangeMethods.get(change.getClass()); if (null == method) { method = Reflection.findMethod(this.getClass(), "createSchemaChangeCommands", SchemaChangeContext.class, change.getClass(), List.class); if (null == method) { throw new UnsupportedChangeException("Unsupported change '" + change.getClass().getSimpleName() + "'", change); } schemaChangeMethods.put(change.getClass(), method); } Reflection.invokeMethod(method, this, context, change, commands); return commands; }