class SubChainSwapMoveSelectorConfig extends MoveSelectorConfig<SubChainSwapMoveSelectorConfig> {

    public static final String XML_ELEMENT_NAME = "subChainSwapMoveSelector";

    private Class<?> entityClass = null;
    @XmlElement(name = "subChainSelector")
    private SubChainSelectorConfig subChainSelectorConfig = null;
    @XmlElement(name = "secondarySubChainSelector")
    private SubChainSelectorConfig secondarySubChainSelectorConfig = null;

    private Boolean selectReversingMoveToo = null;

    public Class<?> getEntityClass() {
        return entityClass;
    }

    public void setEntityClass(Class<?> entityClass) {
        this.entityClass = entityClass;
    }

    public SubChainSelectorConfig getSubChainSelectorConfig() {
        return subChainSelectorConfig;
    }

    public void setSubChainSelectorConfig(SubChainSelectorConfig subChainSelectorConfig) {
        this.subChainSelectorConfig = subChainSelectorConfig;
    }

    public SubChainSelectorConfig getSecondarySubChainSelectorConfig() {
        return secondarySubChainSelectorConfig;
    }

    public void setSecondarySubChainSelectorConfig(SubChainSelectorConfig secondarySubChainSelectorConfig) {
        this.secondarySubChainSelectorConfig = secondarySubChainSelectorConfig;
    }

    public Boolean getSelectReversingMoveToo() {
        return selectReversingMoveToo;
    }

    public void setSelectReversingMoveToo(Boolean selectReversingMoveToo) {
        this.selectReversingMoveToo = selectReversingMoveToo;
    }

    // ************************************************************************
    // With methods
    // ************************************************************************

    public SubChainSwapMoveSelectorConfig withEntityClass(Class<?> entityClass) {
        this.setEntityClass(entityClass);
        return this;
    }

    public SubChainSwapMoveSelectorConfig withSubChainSelectorConfig(SubChainSelectorConfig subChainSelectorConfig) {
        this.setSubChainSelectorConfig(subChainSelectorConfig);
        return this;
    }

    public SubChainSwapMoveSelectorConfig
            withSecondarySubChainSelectorConfig(SubChainSelectorConfig secondarySubChainSelectorConfig) {
        this.setSecondarySubChainSelectorConfig(secondarySubChainSelectorConfig);
        return this;
    }

    public SubChainSwapMoveSelectorConfig withSelectReversingMoveToo(Boolean selectReversingMoveToo) {
        this.setSelectReversingMoveToo(selectReversingMoveToo);
        return this;
    }

    @Override
    public SubChainSwapMoveSelectorConfig inherit(SubChainSwapMoveSelectorConfig inheritedConfig) {<FILL_FUNCTION_BODY>}

    @Override
    public SubChainSwapMoveSelectorConfig copyConfig() {
        return new SubChainSwapMoveSelectorConfig().inherit(this);
    }

    @Override
    public void visitReferencedClasses(Consumer<Class<?>> classVisitor) {
        visitCommonReferencedClasses(classVisitor);
        classVisitor.accept(entityClass);
        if (subChainSelectorConfig != null) {
            subChainSelectorConfig.visitReferencedClasses(classVisitor);
        }
        if (secondarySubChainSelectorConfig != null) {
            secondarySubChainSelectorConfig.visitReferencedClasses(classVisitor);
        }
    }

    @Override
    public String toString() {
        return getClass().getSimpleName() + "(" + subChainSelectorConfig
                + (secondarySubChainSelectorConfig == null ? "" : ", " + secondarySubChainSelectorConfig) + ")";
    }

}

        super.inherit(inheritedConfig);
        entityClass = ConfigUtils.inheritOverwritableProperty(entityClass, inheritedConfig.getEntityClass());
        subChainSelectorConfig = ConfigUtils.inheritConfig(subChainSelectorConfig, inheritedConfig.getSubChainSelectorConfig());
        secondarySubChainSelectorConfig = ConfigUtils.inheritConfig(secondarySubChainSelectorConfig,
                inheritedConfig.getSecondarySubChainSelectorConfig());
        selectReversingMoveToo = ConfigUtils.inheritOverwritableProperty(selectReversingMoveToo,
                inheritedConfig.getSelectReversingMoveToo());
        return this;
    
<methods>public non-sealed void <init>() ,public void extractLeafMoveSelectorConfigsIntoList(List<MoveSelectorConfig#RAW>) ,public org.optaplanner.core.config.heuristic.selector.common.SelectionCacheType getCacheType() ,public Class<? extends SelectionFilter#RAW> getFilterClass() ,public java.lang.Double getFixedProbabilityWeight() ,public Class<? extends SelectionProbabilityWeightFactory#RAW> getProbabilityWeightFactoryClass() ,public java.lang.Long getSelectedCountLimit() ,public org.optaplanner.core.config.heuristic.selector.common.SelectionOrder getSelectionOrder() ,public Class<? extends SelectionSorter#RAW> getSorterClass() ,public Class<? extends Comparator#RAW> getSorterComparatorClass() ,public org.optaplanner.core.config.heuristic.selector.common.decorator.SelectionSorterOrder getSorterOrder() ,public Class<? extends SelectionSorterWeightFactory#RAW> getSorterWeightFactoryClass() ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig inherit(org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig) ,public void inheritFolded(MoveSelectorConfig<?>) ,public void setCacheType(org.optaplanner.core.config.heuristic.selector.common.SelectionCacheType) ,public void setFilterClass(Class<? extends SelectionFilter#RAW>) ,public void setFixedProbabilityWeight(java.lang.Double) ,public void setProbabilityWeightFactoryClass(Class<? extends SelectionProbabilityWeightFactory#RAW>) ,public void setSelectedCountLimit(java.lang.Long) ,public void setSelectionOrder(org.optaplanner.core.config.heuristic.selector.common.SelectionOrder) ,public void setSorterClass(Class<? extends SelectionSorter#RAW>) ,public void setSorterComparatorClass(Class<? extends Comparator#RAW>) ,public void setSorterOrder(org.optaplanner.core.config.heuristic.selector.common.decorator.SelectionSorterOrder) ,public void setSorterWeightFactoryClass(Class<? extends SelectionSorterWeightFactory#RAW>) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withCacheType(org.optaplanner.core.config.heuristic.selector.common.SelectionCacheType) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withFilterClass(Class<? extends SelectionFilter#RAW>) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withFixedProbabilityWeight(java.lang.Double) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withProbabilityWeightFactoryClass(Class<? extends SelectionProbabilityWeightFactory#RAW>) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withSelectedCountLimit(java.lang.Long) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withSelectionOrder(org.optaplanner.core.config.heuristic.selector.common.SelectionOrder) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withSorterClass(Class<? extends SelectionSorter#RAW>) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withSorterComparatorClass(Class<? extends Comparator#RAW>) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withSorterOrder(org.optaplanner.core.config.heuristic.selector.common.decorator.SelectionSorterOrder) ,public org.optaplanner.core.config.heuristic.selector.move.generic.chained.SubChainSwapMoveSelectorConfig withSorterWeightFactoryClass(Class<? extends SelectionSorterWeightFactory#RAW>) <variables>protected org.optaplanner.core.config.heuristic.selector.common.SelectionCacheType cacheType,protected Class<? extends SelectionFilter#RAW> filterClass,private java.lang.Double fixedProbabilityWeight,protected Class<? extends SelectionProbabilityWeightFactory#RAW> probabilityWeightFactoryClass,protected java.lang.Long selectedCountLimit,protected org.optaplanner.core.config.heuristic.selector.common.SelectionOrder selectionOrder,protected Class<? extends SelectionSorter#RAW> sorterClass,protected Class<? extends Comparator#RAW> sorterComparatorClass,protected org.optaplanner.core.config.heuristic.selector.common.decorator.SelectionSorterOrder sorterOrder,protected Class<? extends SelectionSorterWeightFactory#RAW> sorterWeightFactoryClass