class SortPrinterColumnsDecorator
    extends CustomResourceDefinitionVersionDecorator<CustomResourceDefinitionVersionFluent<?>> {

  public SortPrinterColumnsDecorator(String name, String version) {
    super(name, version);
  }

  @Override
  public void andThenVisit(CustomResourceDefinitionVersionFluent<?> version) {
    List<CustomResourceColumnDefinition> columns = version.buildAdditionalPrinterColumns();
    if (columns != null && !columns.isEmpty()) {
      columns.sort((o1, o2) -> String.CASE_INSENSITIVE_ORDER.compare(o1.getJsonPath(), o2.getJsonPath()));
    }
    version.withAdditionalPrinterColumns(columns);
  }

  @Override
  public Class<? extends Decorator>[] after() {
    return new Class[] { CustomResourceDefinitionVersionDecorator.class, AddAdditionPrinterColumnDecorator.class };
  }

  @Override
  public int hashCode() {<FILL_FUNCTION_BODY>}

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    CustomResourceDefinitionVersionDecorator other = (CustomResourceDefinitionVersionDecorator) obj;
    if (getName() == null) {
      if (other.getName() != null)
        return false;
    } else if (!getName().equals(other.getName()))
      return false;
    if (getVersion() == null) {
      if (other.getVersion() != null)
        return false;
    } else if (!getVersion().equals(other.getVersion()))
      return false;
    return true;
  }

  @Override
  public String toString() {
    return getClass().getName() + " [name:" + getName() + ", version:" + getVersion() + "]";
  }

}

    final int prime = 31;
    int result = 1;
    result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
    result = prime * result + ((getVersion() == null) ? 0 : getVersion().hashCode());
    return result;
  
<methods>public void <init>(java.lang.String, java.lang.String) ,public Class<? extends Decorator#RAW>[] after() ,public abstract void andThenVisit(CustomResourceDefinitionVersionFluent<?>) ,public Class<? extends Decorator#RAW>[] before() ,public boolean equals(java.lang.Object) ,public java.lang.String getName() ,public java.lang.String getVersion() ,public int hashCode() ,public void visit(VisitableBuilder) <variables>protected static final java.lang.String ANY,private final non-sealed java.lang.String name,private final non-sealed java.lang.String version,private final CustomResourceDefinitionVersionVisitor versionSelector,private final VersionVisitor versionVisitor