code: public void register(LiquibaseDataType type) {
          try {
              List<String> names = new ArrayList<>();
              names.add(type.getName());
              names.addAll(Arrays.asList(type.getAliases()));
  
              Comparator<Class<? extends LiquibaseDataType>> comparator = (o1, o2) -> {
                  try {
                      return -1 * Integer.compare(o1.getConstructor().newInstance().getPriority(), o2.getConstructor().newInstance().getPriority());
                  } catch (Exception e) {
                      throw new UnexpectedLiquibaseException(e);
                  }
              };
  
              for (String name : names) {
                  name = name.toLowerCase(Locale.US);
                  registry.computeIfAbsent(name, k -> new ArrayList<>());
                  List<Class<? extends LiquibaseDataType>> classes = registry.get(name);
                  classes.add(type.getClass());
                  classes.sort(comparator);
              }
          } catch (Exception e) {
              throw new UnexpectedLiquibaseException(e);
          }
      }
docs: Registers an implementation of {@link LiquibaseDataType} with both its name and all aliases for the data type
  as a handler in the factory's registry. Classes implement the {@link LiquibaseDataType#getPriority()}, which will
  cause the class with the highest priority to become the primary handler for the data type.
  @param type the implementation to register