From e473fca659b023cd5dd63bc03ad496d7433eaf06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Petrovick=C3=BD?= Date: Tue, 12 Mar 2024 14:46:52 +0100 Subject: [PATCH] chore: Remove ServiceLoader use from the codebase (#705) Score Directors are now accessed directly, as we no longer have the need to be able to exclude some of them from the classpath. Joiners for CS are also accessed directly, for the same reason. Enterprise Edition no longer uses ServiceLoader and instead uses reflection. Because of this, core is no longer 3 Maven modules. core, core-impl and constraint-streams modules were all folded into core, which is now a top-level module. All the changes are either file renames to different places and packages, or changes strictly necessary to get rid of ServiceLoader. There are no unrelated changes in this PR. --- benchmark/pom.xml | 4 +- build/bom/pom.xml | 26 +-- core/constraint-streams/pom.xml | 87 -------- ...tConstraintStreamScoreDirectorFactory.java | 52 ----- ...aintStreamScoreDirectorFactoryService.java | 84 -------- .../streams/bavet/common/TupleSource.java | 4 - .../bavet/common/index/package-info.java | 6 - ...aintStreamScoreDirectorFactoryService.java | 20 -- .../streams/common/DefaultJoinerService.java | 72 ------- ...score.director.ScoreDirectorFactoryService | 1 - ...olver.core.impl.score.stream.JoinerService | 1 - .../ScoreDirectorFactoryFactoryTest.java | 38 ---- core/core-impl/pom.xml | 192 ----------------- .../director/ScoreDirectorFactoryFactory.java | 142 ------------- .../director/ScoreDirectorFactoryService.java | 44 ---- .../score/director/ScoreDirectorType.java | 9 - .../easy/EasyScoreDirectorFactoryService.java | 50 ----- ...ncrementalScoreDirectorFactoryService.java | 50 ----- .../core/impl/score/stream/JoinerService.java | 49 ----- .../core/impl/score/stream/JoinerSupport.java | 27 --- ...score.director.ScoreDirectorFactoryService | 2 - core/core/pom.xml | 50 ----- core/pom.xml | 196 ++++++++++++++++-- .../src/build/revapi-differences.json | 0 .../src/build/revapi-filter.json | 0 .../autodiscover/AutoDiscoverMemberType.java | 0 .../api/domain/common/DomainAccessType.java | 0 .../core/api/domain/common/package-info.java | 0 .../ConstraintConfiguration.java | 0 .../ConstraintConfigurationProvider.java | 0 .../constraintweight/ConstraintWeight.java | 0 .../core/api/domain/entity/PinningFilter.java | 0 .../api/domain/entity/PlanningEntity.java | 0 .../core/api/domain/entity/PlanningPin.java | 0 .../api/domain/entity/PlanningPinToIndex.java | 0 .../core/api/domain/entity/package-info.java | 0 .../api/domain/lookup/LookUpStrategyType.java | 0 .../core/api/domain/lookup/PlanningId.java | 0 .../PlanningEntityCollectionProperty.java | 0 .../solution/PlanningEntityProperty.java | 0 .../api/domain/solution/PlanningScore.java | 0 .../api/domain/solution/PlanningSolution.java | 0 .../ProblemFactCollectionProperty.java | 0 .../domain/solution/ProblemFactProperty.java | 0 .../solution/cloner/DeepPlanningClone.java | 0 .../solution/cloner/SolutionCloner.java | 0 .../domain/solution/cloner/package-info.java | 0 .../api/domain/solution/package-info.java | 0 .../valuerange/CountableValueRange.java | 0 .../api/domain/valuerange/ValueRange.java | 0 .../domain/valuerange/ValueRangeFactory.java | 0 .../domain/valuerange/ValueRangeProvider.java | 0 .../api/domain/valuerange/package-info.java | 0 .../variable/AbstractVariableListener.java | 0 .../domain/variable/AnchorShadowVariable.java | 0 .../domain/variable/CustomShadowVariable.java | 0 .../domain/variable/IndexShadowVariable.java | 0 .../InverseRelationShadowVariable.java | 0 .../domain/variable/ListVariableListener.java | 0 .../variable/NextElementShadowVariable.java | 0 .../variable/PiggybackShadowVariable.java | 0 .../domain/variable/PlanningListVariable.java | 0 .../api/domain/variable/PlanningVariable.java | 0 .../variable/PlanningVariableGraphType.java | 0 .../variable/PlanningVariableReference.java | 0 .../PreviousElementShadowVariable.java | 0 .../api/domain/variable/ShadowVariable.java | 0 .../api/domain/variable/VariableListener.java | 0 .../api/domain/variable/package-info.java | 0 .../core/api/function/PentaFunction.java | 0 .../core/api/function/PentaPredicate.java | 0 .../core/api/function/QuadFunction.java | 0 .../core/api/function/QuadPredicate.java | 0 .../core/api/function/ToIntQuadFunction.java | 0 .../core/api/function/ToIntTriFunction.java | 0 .../core/api/function/ToLongQuadFunction.java | 0 .../core/api/function/ToLongTriFunction.java | 0 .../solver/core/api/function/TriConsumer.java | 0 .../solver/core/api/function/TriFunction.java | 0 .../core/api/function/TriPredicate.java | 0 .../core/api/function/package-info.java | 0 .../core/api/score/AbstractBendableScore.java | 0 .../solver/core/api/score/AbstractScore.java | 0 .../solver/core/api/score/IBendableScore.java | 0 .../timefold/solver/core/api/score/Score.java | 0 .../core/api/score/ScoreExplanation.java | 0 .../solver/core/api/score/ScoreManager.java | 0 .../score/analysis/ConstraintAnalysis.java | 0 .../api/score/analysis/MatchAnalysis.java | 0 .../api/score/analysis/ScoreAnalysis.java | 0 .../score/buildin/bendable/BendableScore.java | 0 .../score/buildin/bendable/package-info.java | 0 .../BendableBigDecimalScore.java | 0 .../bendablebigdecimal/package-info.java | 0 .../bendablelong/BendableLongScore.java | 0 .../buildin/bendablelong/package-info.java | 0 .../hardmediumsoft/HardMediumSoftScore.java | 0 .../buildin/hardmediumsoft/package-info.java | 0 .../HardMediumSoftBigDecimalScore.java | 0 .../package-info.java | 0 .../HardMediumSoftLongScore.java | 0 .../hardmediumsoftlong/package-info.java | 0 .../score/buildin/hardsoft/HardSoftScore.java | 0 .../score/buildin/hardsoft/package-info.java | 0 .../HardSoftBigDecimalScore.java | 0 .../hardsoftbigdecimal/package-info.java | 0 .../hardsoftlong/HardSoftLongScore.java | 0 .../buildin/hardsoftlong/package-info.java | 0 .../api/score/buildin/simple/SimpleScore.java | 0 .../score/buildin/simple/package-info.java | 0 .../SimpleBigDecimalScore.java | 0 .../simplebigdecimal/package-info.java | 0 .../buildin/simplelong/SimpleLongScore.java | 0 .../buildin/simplelong/package-info.java | 0 ...tMatchAwareIncrementalScoreCalculator.java | 0 .../score/calculator/EasyScoreCalculator.java | 0 .../IncrementalScoreCalculator.java | 0 .../api/score/constraint/ConstraintMatch.java | 0 .../constraint/ConstraintMatchTotal.java | 0 .../api/score/constraint/ConstraintRef.java | 0 .../core/api/score/constraint/Indictment.java | 0 .../api/score/constraint/package-info.java | 0 .../api/score/director/ScoreDirector.java | 0 .../solver/core/api/score/package-info.java | 0 .../core/api/score/stream/Constraint.java | 0 .../api/score/stream/ConstraintBuilder.java | 0 .../score/stream/ConstraintCollectors.java | 8 +- .../api/score/stream/ConstraintFactory.java | 0 .../score/stream/ConstraintJustification.java | 0 .../api/score/stream/ConstraintProvider.java | 0 .../api/score/stream/ConstraintStream.java | 0 .../stream/ConstraintStreamImplType.java | 0 .../DefaultConstraintJustification.java | 0 .../solver/core/api/score/stream/Joiners.java | 81 +++----- .../score/stream/bi/BiConstraintBuilder.java | 0 .../stream/bi/BiConstraintCollector.java | 0 .../score/stream/bi/BiConstraintStream.java | 0 .../core/api/score/stream/bi/BiJoiner.java | 0 .../api/score/stream/bi/package-info.java | 0 .../core/api/score/stream/common/Break.java | 0 .../api/score/stream/common/Sequence.java | 0 .../score/stream/common/SequenceChain.java | 0 .../core/api/score/stream/package-info.java | 0 .../api/score/stream/penta/PentaJoiner.java | 0 .../stream/quad/QuadConstraintBuilder.java | 0 .../stream/quad/QuadConstraintCollector.java | 0 .../stream/quad/QuadConstraintStream.java | 0 .../api/score/stream/quad/QuadJoiner.java | 0 .../api/score/stream/quad/package-info.java | 0 .../stream/tri/TriConstraintBuilder.java | 0 .../stream/tri/TriConstraintCollector.java | 0 .../score/stream/tri/TriConstraintStream.java | 0 .../core/api/score/stream/tri/TriJoiner.java | 0 .../api/score/stream/tri/package-info.java | 0 .../stream/uni/UniConstraintBuilder.java | 0 .../stream/uni/UniConstraintCollector.java | 0 .../score/stream/uni/UniConstraintStream.java | 0 .../api/score/stream/uni/package-info.java | 0 .../core/api/solver/ProblemFactChange.java | 0 .../api/solver/ProblemSizeStatistics.java | 0 .../core/api/solver/RecommendedFit.java | 0 .../api/solver/ScoreAnalysisFetchPolicy.java | 0 .../core/api/solver/SolutionManager.java | 0 .../core/api/solver/SolutionUpdatePolicy.java | 0 .../solver/core/api/solver/Solver.java | 0 .../core/api/solver/SolverConfigOverride.java | 0 .../solver/core/api/solver/SolverFactory.java | 0 .../solver/core/api/solver/SolverJob.java | 0 .../core/api/solver/SolverJobBuilder.java | 0 .../solver/core/api/solver/SolverManager.java | 0 .../solver/core/api/solver/SolverStatus.java | 0 .../core/api/solver/change/ProblemChange.java | 0 .../solver/change/ProblemChangeDirector.java | 0 .../event/BestSolutionChangedEvent.java | 0 .../api/solver/event/SolverEventListener.java | 0 .../core/api/solver/event/package-info.java | 0 .../solver/core/api/solver/package-info.java | 0 .../solver/core/config/AbstractConfig.java | 0 .../ConstructionHeuristicPhaseConfig.java | 0 .../ConstructionHeuristicType.java | 0 .../ConstructionHeuristicForagerConfig.java | 0 .../ConstructionHeuristicPickEarlyType.java | 0 .../decider/forager/package-info.java | 0 .../constructionheuristic/package-info.java | 0 .../placer/EntityPlacerConfig.java | 0 .../placer/PooledEntityPlacerConfig.java | 0 .../placer/QueuedEntityPlacerConfig.java | 0 .../placer/QueuedValuePlacerConfig.java | 0 .../placer/package-info.java | 0 .../ExhaustiveSearchPhaseConfig.java | 0 .../ExhaustiveSearchType.java | 0 .../exhaustivesearch/NodeExplorationType.java | 0 .../config/exhaustivesearch/package-info.java | 0 .../heuristic/selector/SelectorConfig.java | 0 .../selector/common/SelectionCacheType.java | 0 .../selector/common/SelectionOrder.java | 0 .../decorator/SelectionSorterOrder.java | 0 .../common/decorator/package-info.java | 0 .../common/nearby/NearbySelectionConfig.java | 0 .../NearbySelectionDistributionType.java | 0 .../selector/common/nearby/package-info.java | 0 .../selector/common/package-info.java | 0 .../selector/entity/EntitySelectorConfig.java | 0 .../selector/entity/EntitySorterManner.java | 0 .../selector/entity/package-info.java | 0 .../entity/pillar/PillarSelectorConfig.java | 0 .../entity/pillar/SubPillarConfigPolicy.java | 0 .../selector/entity/pillar/package-info.java | 0 .../list/DestinationSelectorConfig.java | 0 .../selector/list/SubListSelectorConfig.java | 0 .../heuristic/selector/list/package-info.java | 0 .../selector/move/MoveSelectorConfig.java | 0 ...byAutoConfigurationMoveSelectorConfig.java | 0 .../CartesianProductMoveSelectorConfig.java | 0 .../composite/UnionMoveSelectorConfig.java | 0 .../selector/move/composite/package-info.java | 0 .../factory/MoveIteratorFactoryConfig.java | 0 .../move/factory/MoveListFactoryConfig.java | 0 .../selector/move/factory/package-info.java | 0 .../AbstractPillarMoveSelectorConfig.java | 0 .../generic/ChangeMoveSelectorConfig.java | 0 .../PillarChangeMoveSelectorConfig.java | 0 .../generic/PillarSwapMoveSelectorConfig.java | 0 .../selector/move/generic/SubPillarType.java | 0 .../move/generic/SwapMoveSelectorConfig.java | 0 .../chained/KOptMoveSelectorConfig.java | 0 .../SubChainChangeMoveSelectorConfig.java | 0 .../SubChainSwapMoveSelectorConfig.java | 0 .../TailChainSwapMoveSelectorConfig.java | 0 .../move/generic/chained/package-info.java | 0 .../list/ListChangeMoveSelectorConfig.java | 0 .../list/ListSwapMoveSelectorConfig.java | 0 .../list/SubListChangeMoveSelectorConfig.java | 0 .../list/SubListSwapMoveSelectorConfig.java | 0 .../list/kopt/KOptListMoveSelectorConfig.java | 0 .../move/generic/list/kopt/package-info.java | 0 .../move/generic/list/package-info.java | 0 .../selector/move/generic/package-info.java | 0 .../heuristic/selector/move/package-info.java | 0 .../heuristic/selector/package-info.java | 0 .../selector/value/ValueSelectorConfig.java | 0 .../selector/value/ValueSorterManner.java | 0 .../value/chained/SubChainSelectorConfig.java | 0 .../selector/value/chained/package-info.java | 0 .../selector/value/package-info.java | 0 .../localsearch/LocalSearchPhaseConfig.java | 0 .../config/localsearch/LocalSearchType.java | 0 .../decider/acceptor/AcceptorType.java | 0 .../acceptor/LocalSearchAcceptorConfig.java | 0 .../decider/acceptor/package-info.java | 0 .../StepCountingHillClimbingType.java | 0 .../package-info.java | 0 .../decider/forager/FinalistPodiumType.java | 0 .../forager/LocalSearchForagerConfig.java | 0 .../forager/LocalSearchPickEarlyType.java | 0 .../decider/forager/package-info.java | 0 .../core/config/localsearch/package-info.java | 0 .../solver/core/config/package-info.java | 0 .../PartitionedSearchPhaseConfig.java | 0 .../partitionedsearch/package-info.java | 0 .../config/phase/NoChangePhaseConfig.java | 0 .../solver/core/config/phase/PhaseConfig.java | 0 .../phase/custom/CustomPhaseConfig.java | 0 .../config/phase/custom/package-info.java | 0 .../core/config/phase/package-info.java | 0 .../score/definition/ScoreDefinitionType.java | 0 .../config/score/definition/package-info.java | 0 .../director/ScoreDirectorFactoryConfig.java | 0 .../config/score/director/package-info.java | 0 .../trend/InitializingScoreTrendLevel.java | 0 .../core/config/score/trend/package-info.java | 0 .../core/config/solver/EnvironmentMode.java | 0 .../core/config/solver/SolverConfig.java | 0 .../config/solver/SolverManagerConfig.java | 0 .../solver/monitoring/MonitoringConfig.java | 0 .../solver/monitoring/SolverMetric.java | 0 .../solver/monitoring/package-info.java | 0 .../core/config/solver/package-info.java | 0 .../core/config/solver/random/RandomType.java | 0 .../config/solver/random/package-info.java | 0 .../TerminationCompositionStyle.java | 0 .../solver/termination/TerminationConfig.java | 0 .../solver/termination/package-info.java | 0 .../solver/core/config/util/ConfigUtils.java | 0 .../TimefoldSolverEnterpriseService.java | 28 ++- .../core/impl/AbstractFromConfigFactory.java | 0 .../ConstructionHeuristicPhase.java | 0 .../DefaultConstructionHeuristicPhase.java | 0 ...aultConstructionHeuristicPhaseFactory.java | 3 +- .../decider/ConstructionHeuristicDecider.java | 0 .../AbstractConstructionHeuristicForager.java | 0 .../forager/ConstructionHeuristicForager.java | 0 .../ConstructionHeuristicForagerFactory.java | 0 .../DefaultConstructionHeuristicForager.java | 0 ...uctionHeuristicPhaseLifecycleListener.java | 0 ...euristicPhaseLifecycleListenerAdapter.java | 0 .../placer/AbstractEntityPlacer.java | 0 .../placer/AbstractEntityPlacerFactory.java | 0 .../placer/EntityPlacer.java | 0 .../placer/EntityPlacerFactory.java | 0 .../placer/Placement.java | 0 .../placer/PooledEntityPlacer.java | 0 .../placer/PooledEntityPlacerFactory.java | 0 .../placer/QueuedEntityPlacer.java | 0 .../placer/QueuedEntityPlacerFactory.java | 0 .../placer/QueuedValuePlacer.java | 0 .../placer/QueuedValuePlacerFactory.java | 0 .../scope/ConstructionHeuristicMoveScope.java | 0 .../ConstructionHeuristicPhaseScope.java | 0 .../scope/ConstructionHeuristicStepScope.java | 0 .../common/AlphabeticMemberComparator.java | 0 .../impl/domain/common/ReflectionHelper.java | 0 .../accessor/AbstractMemberAccessor.java | 0 .../common/accessor/MemberAccessor.java | 0 .../accessor/MemberAccessorFactory.java | 0 .../ReflectionBeanPropertyMemberAccessor.java | 0 .../ReflectionFieldMemberAccessor.java | 0 .../ReflectionMethodMemberAccessor.java | 0 .../gizmo/AbstractGizmoMemberAccessor.java | 0 .../AbstractReadOnlyGizmoMemberAccessor.java | 0 .../AbstractReadWriteGizmoMemberAccessor.java | 0 .../accessor/gizmo/GizmoClassLoader.java | 0 .../accessor/gizmo/GizmoFieldHandler.java | 0 .../gizmo/GizmoMemberAccessorFactory.java | 0 .../gizmo/GizmoMemberAccessorImplementor.java | 0 .../accessor/gizmo/GizmoMemberDescriptor.java | 0 .../accessor/gizmo/GizmoMemberHandler.java | 0 .../accessor/gizmo/GizmoMemberInfo.java | 0 .../accessor/gizmo/GizmoMethodHandler.java | 0 .../ConstraintConfigurationDescriptor.java | 0 .../ConstraintWeightDescriptor.java | 0 .../entity/descriptor/EntityDescriptor.java | 0 .../descriptor/PlanningPinToIndexReader.java | 0 .../lookup/ClassAndPlanningIdComparator.java | 0 .../domain/lookup/EqualsLookUpStrategy.java | 0 .../lookup/ImmutableLookUpStrategy.java | 0 .../impl/domain/lookup/LookUpManager.java | 0 .../impl/domain/lookup/LookUpStrategy.java | 0 .../domain/lookup/LookUpStrategyResolver.java | 0 .../domain/lookup/NoneLookUpStrategy.java | 0 .../lookup/PlanningIdLookUpStrategy.java | 0 .../impl/domain/policy/DescriptorPolicy.java | 0 .../score/descriptor/ScoreDescriptor.java | 0 .../cloner/ConcurrentMemoization.java | 0 .../cloner/DeepCloningFieldCloner.java | 0 .../solution/cloner/DeepCloningUtils.java | 0 .../cloner/FieldAccessingSolutionCloner.java | 0 .../solution/cloner/FieldCloningUtils.java | 0 .../cloner/ShallowCloningFieldCloner.java | 0 .../cloner/gizmo/GizmoCloningUtils.java | 0 .../cloner/gizmo/GizmoSolutionCloner.java | 0 .../gizmo/GizmoSolutionClonerFactory.java | 0 .../gizmo/GizmoSolutionClonerImplementor.java | 0 .../GizmoSolutionOrEntityDescriptor.java | 0 .../descriptor/DummyMemberAccessor.java | 0 .../descriptor/ProblemScaleTracker.java | 0 .../descriptor/SolutionDescriptor.java | 0 .../solution/mutation/MutationCounter.java | 0 .../AbstractCountableValueRange.java | 0 .../AbstractUncountableValueRange.java | 0 .../bigdecimal/BigDecimalValueRange.java | 0 .../biginteger/BigIntegerValueRange.java | 0 .../buildin/collection/ListValueRange.java | 0 .../CompositeCountableValueRange.java | 0 .../buildin/composite/EmptyValueRange.java | 0 .../NullAllowingCountableValueRange.java | 0 .../primboolean/BooleanValueRange.java | 0 .../buildin/primdouble/DoubleValueRange.java | 0 .../buildin/primint/IntValueRange.java | 0 .../buildin/primlong/LongValueRange.java | 0 .../buildin/temporal/TemporalValueRange.java | 0 ...tractFromPropertyValueRangeDescriptor.java | 0 .../AbstractValueRangeDescriptor.java | 0 .../CompositeValueRangeDescriptor.java | 0 ...EntityIndependentValueRangeDescriptor.java | 0 ...romEntityPropertyValueRangeDescriptor.java | 0 ...mSolutionPropertyValueRangeDescriptor.java | 0 .../descriptor/ValueRangeDescriptor.java | 0 .../valuerange/util/ValueRangeIterator.java | 0 .../ExternalizedListVariableStateSupply.java | 0 .../ListVariableElementStateSupply.java | 0 .../variable/ListVariableStateDemand.java | 0 .../variable/ListVariableStateSupply.java | 0 .../AnchorShadowVariableDescriptor.java | 0 .../variable/anchor/AnchorVariableDemand.java | 0 .../anchor/AnchorVariableListener.java | 0 .../variable/anchor/AnchorVariableSupply.java | 0 .../ExternalizedAnchorVariableSupply.java | 0 .../CustomShadowVariableDescriptor.java | 0 .../LegacyCustomShadowVariableDescriptor.java | 0 .../PiggybackShadowVariableDescriptor.java | 0 .../descriptor/BasicVariableDescriptor.java | 0 .../descriptor/GenuineVariableDescriptor.java | 0 .../descriptor/ListVariableDescriptor.java | 0 .../descriptor/ShadowVariableDescriptor.java | 0 .../descriptor/VariableDescriptor.java | 0 .../index/IndexShadowVariableDescriptor.java | 0 .../variable/index/IndexVariableDemand.java | 0 .../variable/index/IndexVariableListener.java | 0 .../variable/index/IndexVariableSupply.java | 0 .../CollectionInverseVariableDemand.java | 0 .../CollectionInverseVariableListener.java | 0 .../CollectionInverseVariableSupply.java | 0 ...alizedCollectionInverseVariableSupply.java | 0 ...nalizedSingletonInverseVariableSupply.java | 0 ...verseRelationShadowVariableDescriptor.java | 0 .../SingletonInverseVariableDemand.java | 0 .../SingletonInverseVariableListener.java | 0 .../SingletonInverseVariableSupply.java | 0 .../SingletonListInverseVariableDemand.java | 0 .../SingletonListInverseVariableListener.java | 0 .../listener/SourcedVariableListener.java | 0 .../listener/VariableListenerWithSources.java | 0 .../listener/support/AbstractNotifiable.java | 0 .../support/AbstractNotification.java | 0 .../support/BasicVariableNotification.java | 0 .../ElementUnassignedNotification.java | 0 .../support/EntityAddedNotification.java | 0 .../listener/support/EntityNotifiable.java | 0 .../listener/support/EntityNotification.java | 0 .../support/EntityRemovedNotification.java | 0 .../ListVariableChangedNotification.java | 0 .../ListVariableListenerNotifiable.java | 0 .../support/ListVariableNotification.java | 0 .../variable/listener/support/Notifiable.java | 0 .../listener/support/NotifiableRegistry.java | 0 .../listener/support/Notification.java | 0 .../support/VariableChangedNotification.java | 0 .../support/VariableListenerNotifiable.java | 0 .../support/VariableListenerSupport.java | 0 .../violation/ListVariableTracker.java | 0 .../violation/ShadowVariableSnapshot.java | 0 .../violation/ShadowVariablesAssert.java | 0 .../support/violation/SolutionTracker.java | 0 .../support/violation/VariableId.java | 0 .../support/violation/VariableSnapshot.java | 0 .../violation/VariableSnapshotTotal.java | 0 .../support/violation/VariableTracker.java | 0 ...xtPrevElementShadowVariableDescriptor.java | 0 .../NextElementShadowVariableDescriptor.java | 0 .../nextprev/NextElementVariableListener.java | 0 ...eviousElementShadowVariableDescriptor.java | 0 .../PreviousElementVariableListener.java | 0 ...AbstractVariableDescriptorBasedDemand.java | 0 .../impl/domain/variable/supply/Demand.java | 0 .../impl/domain/variable/supply/Supply.java | 0 .../domain/variable/supply/SupplyManager.java | 0 .../DefaultExhaustiveSearchPhase.java | 0 .../DefaultExhaustiveSearchPhaseFactory.java | 0 .../ExhaustiveSearchPhase.java | 0 .../decider/ExhaustiveSearchDecider.java | 0 ...xhaustiveSearchPhaseLifecycleListener.java | 0 .../node/ExhaustiveSearchLayer.java | 0 .../node/ExhaustiveSearchNode.java | 0 .../node/bounder/ScoreBounder.java | 0 .../node/bounder/TrendBasedScoreBounder.java | 0 .../BreadthFirstNodeComparator.java | 0 .../comparator/DepthFirstNodeComparator.java | 0 .../OptimisticBoundFirstNodeComparator.java | 0 .../OriginalOrderNodeComparator.java | 0 .../comparator/ScoreFirstNodeComparator.java | 0 .../scope/ExhaustiveSearchPhaseScope.java | 0 .../scope/ExhaustiveSearchStepScope.java | 0 .../impl/heuristic/HeuristicConfigPolicy.java | 0 .../impl/heuristic/move/AbstractMove.java | 0 .../move/AbstractSimplifiedMove.java | 0 .../impl/heuristic/move/ChangeAction.java | 0 .../impl/heuristic/move/CompositeMove.java | 0 .../ListVariableAfterAssignmentAction.java | 0 .../move/ListVariableAfterChangeAction.java | 0 .../ListVariableAfterUnassignmentAction.java | 0 .../ListVariableBeforeAssignmentAction.java | 0 .../move/ListVariableBeforeChangeAction.java | 0 .../ListVariableBeforeUnassignmentAction.java | 0 .../solver/core/impl/heuristic/move/Move.java | 0 .../impl/heuristic/move/NoChangeMove.java | 0 .../impl/heuristic/move/RecordedUndoMove.java | 0 .../heuristic/move/VariableChangeAction.java | 0 .../VariableChangeRecordingScoreDirector.java | 0 .../AbstractDemandEnabledSelector.java | 0 .../heuristic/selector/AbstractSelector.java | 0 .../selector/AbstractSelectorFactory.java | 0 .../heuristic/selector/IterableSelector.java | 0 .../selector/ListIterableSelector.java | 0 .../impl/heuristic/selector/Selector.java | 0 .../common/SelectionCacheLifecycleBridge.java | 0 .../SelectionCacheLifecycleListener.java | 0 .../decorator/ComparatorSelectionSorter.java | 0 .../decorator/CompositeSelectionFilter.java | 0 .../FairSelectorProbabilityWeightFactory.java | 0 .../common/decorator/SelectionFilter.java | 0 .../SelectionProbabilityWeightFactory.java | 0 .../common/decorator/SelectionSorter.java | 0 .../SelectionSorterWeightFactory.java | 0 .../WeightFactorySelectionSorter.java | 0 .../AbstractOriginalChangeIterator.java | 0 .../AbstractOriginalSwapIterator.java | 0 .../AbstractRandomChangeIterator.java | 0 .../iterator/AbstractRandomSwapIterator.java | 0 .../iterator/CachedListRandomIterator.java | 0 .../common/iterator/ListIterable.java | 0 .../common/iterator/SelectionIterator.java | 0 .../iterator/SelectionListIterator.java | 0 .../common/iterator/SingletonIterator.java | 0 .../iterator/UpcomingSelectionIterator.java | 0 .../UpcomingSelectionListIterator.java | 0 .../common/nearby/NearbyDistanceMeter.java | 0 .../selector/entity/EntitySelector.java | 0 .../entity/EntitySelectorFactory.java | 3 +- .../entity/FromSolutionEntitySelector.java | 0 .../AbstractCachingEntitySelector.java | 0 .../decorator/CachingEntitySelector.java | 0 .../decorator/FilteringEntitySelector.java | 0 .../entity/decorator/PinEntityFilter.java | 0 .../decorator/ProbabilityEntitySelector.java | 0 .../SelectedCountLimitEntitySelector.java | 0 .../decorator/ShufflingEntitySelector.java | 0 .../decorator/SortingEntitySelector.java | 0 .../entity/mimic/EntityMimicRecorder.java | 0 .../mimic/ManualEntityMimicRecorder.java | 0 .../mimic/MimicRecordingEntitySelector.java | 0 .../mimic/MimicReplayingEntitySelector.java | 0 .../entity/pillar/DefaultPillarSelector.java | 0 .../entity/pillar/PillarSelector.java | 0 .../entity/pillar/PillarSelectorFactory.java | 0 .../selector/list/DestinationSelector.java | 0 .../list/DestinationSelectorFactory.java | 3 +- .../list/ElementDestinationSelector.java | 0 .../selector/list/ElementLocation.java | 0 .../list/ElementLocationRandomIterator.java | 0 .../selector/list/LocationInList.java | 0 .../selector/list/RandomSubListSelector.java | 0 .../impl/heuristic/selector/list/SubList.java | 0 .../selector/list/SubListSelector.java | 0 .../selector/list/SubListSelectorFactory.java | 3 +- .../selector/list/TriangleElementFactory.java | 0 .../selector/list/TriangularNumbers.java | 0 .../selector/list/UnassignedLocation.java | 0 .../mimic/MimicRecordingSubListSelector.java | 0 .../mimic/MimicReplayingSubListSelector.java | 0 .../list/mimic/SubListMimicRecorder.java | 0 .../selector/move/AbstractMoveSelector.java | 0 .../move/AbstractMoveSelectorFactory.java | 0 .../move/DoableMoveSelectionFilter.java | 0 .../heuristic/selector/move/MoveSelector.java | 0 .../selector/move/MoveSelectorFactory.java | 0 .../AbstractCompositeMoveSelectorFactory.java | 0 .../BiasedRandomUnionMoveIterator.java | 0 .../CartesianProductMoveSelector.java | 0 .../CartesianProductMoveSelectorFactory.java | 0 .../move/composite/CompositeMoveSelector.java | 0 ...FixedSelectorProbabilityWeightFactory.java | 0 .../UniformRandomUnionMoveIterator.java | 0 .../move/composite/UnionMoveSelector.java | 0 .../composite/UnionMoveSelectorFactory.java | 0 .../AbstractCachingMoveSelector.java | 0 .../move/decorator/CachingMoveSelector.java | 0 .../move/decorator/FilteringMoveSelector.java | 0 .../decorator/ProbabilityMoveSelector.java | 0 .../SelectedCountLimitMoveSelector.java | 0 .../move/decorator/ShufflingMoveSelector.java | 0 .../move/decorator/SortingMoveSelector.java | 0 .../move/factory/MoveIteratorFactory.java | 0 .../factory/MoveIteratorFactoryFactory.java | 0 ...veIteratorFactoryToMoveSelectorBridge.java | 0 .../move/factory/MoveListFactory.java | 0 .../move/factory/MoveListFactoryFactory.java | 0 .../MoveListFactoryToMoveSelectorBridge.java | 0 .../selector/move/generic/ChangeMove.java | 0 .../move/generic/ChangeMoveSelector.java | 0 .../generic/ChangeMoveSelectorFactory.java | 0 .../move/generic/GenericMoveSelector.java | 0 .../move/generic/PillarChangeMove.java | 0 .../generic/PillarChangeMoveSelector.java | 0 .../PillarChangeMoveSelectorFactory.java | 0 .../selector/move/generic/PillarDemand.java | 0 .../selector/move/generic/PillarSwapMove.java | 0 .../move/generic/PillarSwapMoveSelector.java | 0 .../PillarSwapMoveSelectorFactory.java | 0 .../selector/move/generic/SwapMove.java | 0 .../move/generic/SwapMoveSelector.java | 0 .../move/generic/SwapMoveSelectorFactory.java | 0 .../generic/chained/ChainedChangeMove.java | 0 .../move/generic/chained/ChainedSwapMove.java | 0 .../move/generic/chained/KOptMove.java | 0 .../generic/chained/KOptMoveSelector.java | 0 .../chained/KOptMoveSelectorFactory.java | 0 .../generic/chained/SubChainChangeMove.java | 0 .../chained/SubChainChangeMoveSelector.java | 0 .../SubChainChangeMoveSelectorFactory.java | 0 .../chained/SubChainReversingChangeMove.java | 0 .../chained/SubChainReversingSwapMove.java | 0 .../generic/chained/SubChainSwapMove.java | 0 .../chained/SubChainSwapMoveSelector.java | 0 .../SubChainSwapMoveSelectorFactory.java | 0 .../generic/chained/TailChainSwapMove.java | 0 .../chained/TailChainSwapMoveSelector.java | 0 .../TailChainSwapMoveSelectorFactory.java | 0 .../move/generic/list/ListAssignMove.java | 0 .../move/generic/list/ListChangeMove.java | 0 .../generic/list/ListChangeMoveSelector.java | 0 .../list/ListChangeMoveSelectorFactory.java | 0 .../move/generic/list/ListSwapMove.java | 0 .../generic/list/ListSwapMoveSelector.java | 0 .../list/ListSwapMoveSelectorFactory.java | 0 .../move/generic/list/ListUnassignMove.java | 0 .../list/OriginalListChangeIterator.java | 0 .../list/OriginalListSwapIterator.java | 0 .../list/RandomListChangeIterator.java | 0 .../generic/list/RandomListSwapIterator.java | 0 .../list/RandomSubListChangeMoveIterator.java | 0 .../list/RandomSubListChangeMoveSelector.java | 0 .../list/RandomSubListSwapMoveSelector.java | 0 .../move/generic/list/SubListChangeMove.java | 0 .../SubListChangeMoveSelectorFactory.java | 0 .../move/generic/list/SubListConfigUtil.java | 0 .../move/generic/list/SubListSwapMove.java | 0 .../list/SubListSwapMoveSelectorFactory.java | 0 .../generic/list/SubListUnassignMove.java | 0 .../generic/list/kopt/EntityOrderInfo.java | 0 .../generic/list/kopt/FlipSublistAction.java | 0 .../list/kopt/KOptAffectedElements.java | 0 .../move/generic/list/kopt/KOptCycle.java | 0 .../generic/list/kopt/KOptDescriptor.java | 0 .../move/generic/list/kopt/KOptListMove.java | 0 .../list/kopt/KOptListMoveIterator.java | 0 .../list/kopt/KOptListMoveSelector.java | 0 .../kopt/KOptListMoveSelectorFactory.java | 0 .../move/generic/list/kopt/KOptUtils.java | 0 .../list/kopt/MultipleDelegateList.java | 0 .../generic/list/kopt/TwoOptListMove.java | 0 .../move/generic/list/kopt/package-info.java | 0 .../value/EntityIndependentValueSelector.java | 0 .../FromEntityPropertyValueSelector.java | 0 .../FromSolutionPropertyValueSelector.java | 0 .../selector/value/ValueSelector.java | 0 .../selector/value/ValueSelectorFactory.java | 3 +- .../chained/DefaultSubChainSelector.java | 0 .../selector/value/chained/SubChain.java | 0 .../value/chained/SubChainSelector.java | 0 .../chained/SubChainSelectorFactory.java | 0 .../AbstractCachingValueSelector.java | 0 ...ctInverseEntityFilteringValueSelector.java | 0 .../decorator/AssignedListValueSelector.java | 0 .../value/decorator/CachingValueSelector.java | 0 .../decorator/DowncastingValueSelector.java | 0 .../EntityDependentSortingValueSelector.java | 0 ...tityIndependentFilteringValueSelector.java | 0 ...tyIndependentInitializedValueSelector.java | 0 .../decorator/FilteringValueSelector.java | 0 .../decorator/InitializedValueSelector.java | 0 .../MovableChainedTrailingValueFilter.java | 0 .../decorator/ProbabilityValueSelector.java | 0 .../ReinitializeVariableValueSelector.java | 0 .../SelectedCountLimitValueSelector.java | 0 .../decorator/ShufflingValueSelector.java | 0 .../value/decorator/SortingValueSelector.java | 0 .../UnassignedListValueSelector.java | 0 .../mimic/MimicRecordingValueSelector.java | 0 .../mimic/MimicReplayingValueSelector.java | 0 .../value/mimic/ValueMimicRecorder.java | 0 .../io/jaxb/ElementNamespaceOverride.java | 0 .../core/impl/io/jaxb/GenericJaxbIO.java | 0 .../solver/core/impl/io/jaxb/JaxbIO.java | 0 .../core/impl/io/jaxb/SolverConfigIO.java | 0 .../TimefoldXmlSerializationException.java | 0 .../adapter/JaxbCustomPropertiesAdapter.java | 0 .../io/jaxb/adapter/JaxbDurationAdapter.java | 0 .../io/jaxb/adapter/JaxbLocaleAdapter.java | 0 .../adapter/JaxbOffsetDateTimeAdapter.java | 0 .../localsearch/DefaultLocalSearchPhase.java | 0 .../DefaultLocalSearchPhaseFactory.java | 3 +- .../impl/localsearch/LocalSearchPhase.java | 0 .../decider/LocalSearchDecider.java | 0 .../decider/acceptor/AbstractAcceptor.java | 0 .../decider/acceptor/Acceptor.java | 0 .../decider/acceptor/AcceptorFactory.java | 0 .../decider/acceptor/CompositeAcceptor.java | 0 .../greatdeluge/GreatDelugeAcceptor.java | 0 .../hillclimbing/HillClimbingAcceptor.java | 0 .../LateAcceptanceAcceptor.java | 0 .../SimulatedAnnealingAcceptor.java | 0 .../StepCountingHillClimbingAcceptor.java | 0 .../acceptor/tabu/AbstractTabuAcceptor.java | 0 .../acceptor/tabu/EntityTabuAcceptor.java | 0 .../acceptor/tabu/MoveTabuAcceptor.java | 0 .../acceptor/tabu/ValueTabuAcceptor.java | 0 .../tabu/size/AbstractTabuSizeStrategy.java | 0 .../size/EntityRatioTabuSizeStrategy.java | 0 .../tabu/size/FixedTabuSizeStrategy.java | 0 .../acceptor/tabu/size/TabuSizeStrategy.java | 0 .../forager/AbstractLocalSearchForager.java | 0 .../forager/AcceptedLocalSearchForager.java | 0 .../decider/forager/LocalSearchForager.java | 0 .../forager/LocalSearchForagerFactory.java | 0 .../finalist/AbstractFinalistPodium.java | 0 .../forager/finalist/FinalistPodium.java | 0 .../finalist/HighestScoreFinalistPodium.java | 0 ...tegicOscillationByLevelFinalistPodium.java | 0 .../LocalSearchPhaseLifecycleListener.java | 0 ...alSearchPhaseLifecycleListenerAdapter.java | 0 .../scope/LocalSearchMoveScope.java | 0 .../scope/LocalSearchPhaseScope.java | 0 .../scope/LocalSearchStepScope.java | 0 .../solver/core/impl/package-info.java | 0 .../DefaultPartitionedSearchPhaseFactory.java | 3 +- .../PartitionedSearchPhase.java | 0 .../partitioner/SolutionPartitioner.java | 0 .../solver/core/impl/phase/AbstractPhase.java | 0 .../core/impl/phase/AbstractPhaseFactory.java | 0 .../solver/core/impl/phase/NoChangePhase.java | 0 .../core/impl/phase/NoChangePhaseFactory.java | 0 .../solver/core/impl/phase/Phase.java | 0 .../solver/core/impl/phase/PhaseFactory.java | 0 .../core/impl/phase/custom/CustomPhase.java | 0 .../impl/phase/custom/CustomPhaseCommand.java | 0 .../impl/phase/custom/DefaultCustomPhase.java | 0 .../custom/DefaultCustomPhaseFactory.java | 0 .../custom/NoChangeCustomPhaseCommand.java | 0 .../phase/custom/scope/CustomPhaseScope.java | 0 .../phase/custom/scope/CustomStepScope.java | 0 .../phase/event/PhaseLifecycleListener.java | 0 .../event/PhaseLifecycleListenerAdapter.java | 0 .../phase/event/PhaseLifecycleSupport.java | 0 .../impl/phase/scope/AbstractMoveScope.java | 0 .../impl/phase/scope/AbstractPhaseScope.java | 0 .../impl/phase/scope/AbstractStepScope.java | 0 .../impl/score/DefaultScoreExplanation.java | 0 .../core/impl/score/DefaultScoreManager.java | 0 .../solver/core/impl/score/ScoreUtil.java | 0 .../BendableBigDecimalScoreDefinition.java | 0 .../buildin/BendableLongScoreDefinition.java | 0 .../buildin/BendableScoreDefinition.java | 0 ...rdMediumSoftBigDecimalScoreDefinition.java | 0 .../HardMediumSoftLongScoreDefinition.java | 0 .../HardMediumSoftScoreDefinition.java | 0 .../HardSoftBigDecimalScoreDefinition.java | 0 .../buildin/HardSoftLongScoreDefinition.java | 0 .../buildin/HardSoftScoreDefinition.java | 0 .../SimpleBigDecimalScoreDefinition.java | 0 .../buildin/SimpleLongScoreDefinition.java | 0 .../score/buildin/SimpleScoreDefinition.java | 0 .../DefaultConstraintMatchTotal.java | 0 .../score/constraint/DefaultIndictment.java | 0 .../AbstractBendableScoreDefinition.java | 0 .../definition/AbstractScoreDefinition.java | 0 .../score/definition/ScoreDefinition.java | 0 .../score/director/AbstractScoreDirector.java | 0 .../AbstractScoreDirectorFactory.java | 0 .../score/director/InnerScoreDirector.java | 0 .../director/InnerScoreDirectorFactory.java | 0 .../score/director/ScoreDirectorFactory.java | 0 .../director/ScoreDirectorFactoryFactory.java | 124 +++++++++++ .../VariableDescriptorAwareScoreDirector.java | 0 .../director/VariableDescriptorCache.java | 0 .../director/easy/EasyScoreDirector.java | 2 +- .../easy/EasyScoreDirectorFactory.java | 18 +- .../incremental/IncrementalScoreDirector.java | 2 +- .../IncrementalScoreDirectorFactory.java | 21 +- .../BavetConstraintStreamScoreDirector.java | 3 +- ...tConstraintStreamScoreDirectorFactory.java | 94 +++++++++ .../core/impl/score/stream/JoinerType.java | 0 .../score/stream}/bavet/BavetConstraint.java | 10 +- .../stream}/bavet/BavetConstraintFactory.java | 12 +- .../stream}/bavet/BavetConstraintSession.java | 11 +- .../bavet/BavetConstraintSessionFactory.java | 30 +-- .../stream}/bavet/bi/AbstractGroupBiNode.java | 10 +- .../bi/BavetAbstractBiConstraintStream.java | 95 +++++---- .../bi/BavetBiGroupBiConstraintStream.java | 12 +- .../bi/BavetBiMapBiConstraintStream.java | 8 +- .../bi/BavetConcatBiConstraintStream.java | 20 +- .../bi/BavetFilterBiConstraintStream.java | 8 +- .../BavetFlattenLastBiConstraintStream.java | 12 +- .../bi/BavetIfExistsBiConstraintStream.java | 20 +- .../bavet/bi/BavetJoinBiConstraintStream.java | 20 +- .../bi/BavetQuadGroupBiConstraintStream.java | 12 +- .../bi/BavetQuadMapBiConstraintStream.java | 8 +- .../bi/BavetScoringBiConstraintStream.java | 16 +- .../bi/BavetTriGroupBiConstraintStream.java | 12 +- .../bi/BavetTriMapBiConstraintStream.java | 8 +- .../bi/BavetUniGroupBiConstraintStream.java | 12 +- .../bi/BavetUniMapBiConstraintStream.java | 8 +- .../impl/score/stream}/bavet/bi/BiScorer.java | 10 +- .../stream}/bavet/bi/ConcatBiBiNode.java | 8 +- .../stream}/bavet/bi/ConcatBiUniNode.java | 10 +- .../stream}/bavet/bi/ConcatUniBiNode.java | 10 +- .../bavet/bi/ConditionalBiTupleLifecycle.java | 8 +- .../stream}/bavet/bi/FlattenLastBiNode.java | 8 +- .../bi/Group0Mapping1CollectorBiNode.java | 6 +- .../bi/Group0Mapping2CollectorBiNode.java | 6 +- .../bi/Group0Mapping3CollectorBiNode.java | 6 +- .../bi/Group0Mapping4CollectorBiNode.java | 6 +- .../bi/Group1Mapping0CollectorBiNode.java | 8 +- .../bi/Group1Mapping1CollectorBiNode.java | 8 +- .../bi/Group1Mapping2CollectorBiNode.java | 8 +- .../bi/Group1Mapping3CollectorBiNode.java | 10 +- .../bi/Group2Mapping0CollectorBiNode.java | 6 +- .../bi/Group2Mapping1CollectorBiNode.java | 10 +- .../bi/Group2Mapping2CollectorBiNode.java | 14 +- .../bi/Group3Mapping0CollectorBiNode.java | 8 +- .../bi/Group3Mapping1CollectorBiNode.java | 12 +- .../bi/Group4Mapping0CollectorBiNode.java | 8 +- .../bavet/bi/IndexedIfExistsBiNode.java | 16 +- .../stream}/bavet/bi/IndexedJoinBiNode.java | 14 +- .../score/stream}/bavet/bi/MapBiToBiNode.java | 8 +- .../stream}/bavet/bi/MapBiToQuadNode.java | 10 +- .../stream}/bavet/bi/MapBiToTriNode.java | 10 +- .../stream}/bavet/bi/MapBiToUniNode.java | 10 +- .../bavet/bi/UnindexedIfExistsBiNode.java | 10 +- .../stream}/bavet/bi/UnindexedJoinBiNode.java | 10 +- .../bavet/common/AbstractConcatNode.java | 25 +-- .../bavet/common/AbstractFlattenLastNode.java | 8 +- .../bavet/common/AbstractGroupNode.java | 8 +- .../bavet/common/AbstractIfExistsNode.java | 27 ++- .../common/AbstractIndexedIfExistsNode.java | 16 +- .../bavet/common/AbstractIndexedJoinNode.java | 16 +- .../bavet/common/AbstractJoinNode.java | 20 +- .../stream}/bavet/common/AbstractMapNode.java | 8 +- .../stream}/bavet/common/AbstractNode.java | 4 +- .../AbstractPropagationMetadataCarrier.java | 6 +- .../stream}/bavet/common/AbstractScorer.java | 10 +- .../common/AbstractUnindexedIfExistsNode.java | 12 +- .../common/AbstractUnindexedJoinNode.java | 12 +- .../common/BavetAbstractConstraintStream.java | 12 +- .../common/BavetConcatConstraintStream.java | 2 +- .../common/BavetIfExistsConstraintStream.java | 2 +- .../common/BavetJoinConstraintStream.java | 4 +- .../common/BavetScoringConstraintStream.java | 4 +- .../common/BavetStreamBinaryOperation.java | 4 +- .../bavet/common/DynamicPropagationQueue.java | 8 +- .../stream}/bavet/common/ExistsCounter.java | 6 +- .../score/stream}/bavet/common/Group.java | 6 +- .../bavet/common/GroupNodeConstructor.java | 6 +- .../GroupNodeConstructorWithAccumulate.java | 6 +- ...GroupNodeConstructorWithoutAccumulate.java | 6 +- .../stream}/bavet/common/NodeBuildHelper.java | 18 +- .../bavet/common/PropagationQueue.java | 4 +- .../stream}/bavet/common/Propagator.java | 4 +- .../bavet/common/StaticPropagationQueue.java | 8 +- .../stream/bavet/common/TupleSource.java | 4 + .../BavetAftBridgeBiConstraintStream.java | 12 +- .../BavetAftBridgeQuadConstraintStream.java | 12 +- .../BavetAftBridgeTriConstraintStream.java | 12 +- .../BavetAftBridgeUniConstraintStream.java | 12 +- .../BavetForeBridgeBiConstraintStream.java | 8 +- .../BavetForeBridgeQuadConstraintStream.java | 8 +- .../BavetForeBridgeTriConstraintStream.java | 8 +- .../BavetForeBridgeUniConstraintStream.java | 8 +- .../bavet/common/bridge/package-info.java | 4 +- .../bavet/common/index/ComparisonIndexer.java | 53 +++-- .../bavet/common/index/EqualsIndexer.java | 2 +- .../bavet/common/index/IndexProperties.java | 2 +- .../stream}/bavet/common/index/Indexer.java | 4 +- .../bavet/common/index/IndexerFactory.java | 163 +++++++++------ .../bavet/common/index/IndexerKey.java | 2 +- .../common/index/ManyIndexProperties.java | 2 +- .../common/index/NoneIndexProperties.java | 2 +- .../bavet/common/index/NoneIndexer.java | 2 +- .../common/index/SingleIndexProperties.java | 2 +- .../common/index/ThreeIndexProperties.java | 2 +- .../common/index/TwoIndexProperties.java | 2 +- .../bavet/common/index/package-info.java | 6 + .../stream}/bavet/common/package-info.java | 2 +- .../AbstractConditionalTupleLifecycle.java | 2 +- .../bavet/common/tuple/AbstractTuple.java | 2 +- .../tuple/AggregatedTupleLifecycle.java | 2 +- .../stream}/bavet/common/tuple/BiTuple.java | 2 +- .../common/tuple/LeftTupleLifecycle.java | 2 +- .../common/tuple/LeftTupleLifecycleImpl.java | 2 +- .../stream}/bavet/common/tuple/QuadTuple.java | 2 +- .../common/tuple/RightTupleLifecycle.java | 2 +- .../common/tuple/RightTupleLifecycleImpl.java | 2 +- .../stream}/bavet/common/tuple/TriTuple.java | 2 +- .../bavet/common/tuple/TupleLifecycle.java | 2 +- .../bavet/common/tuple/TupleState.java | 2 +- .../stream}/bavet/common/tuple/UniTuple.java | 2 +- .../bavet/quad/AbstractGroupQuadNode.java | 10 +- .../BavetAbstractQuadConstraintStream.java | 89 ++++---- .../BavetBiGroupQuadConstraintStream.java | 12 +- .../quad/BavetBiMapQuadConstraintStream.java | 8 +- .../quad/BavetConcatQuadConstraintStream.java | 24 +-- .../quad/BavetFilterQuadConstraintStream.java | 8 +- .../BavetFlattenLastQuadConstraintStream.java | 8 +- .../BavetIfExistsQuadConstraintStream.java | 20 +- .../quad/BavetJoinQuadConstraintStream.java | 22 +- .../BavetQuadGroupQuadConstraintStream.java | 12 +- .../BavetQuadMapQuadConstraintStream.java | 8 +- .../BavetScoringQuadConstraintStream.java | 16 +- .../BavetTriGroupQuadConstraintStream.java | 12 +- .../quad/BavetTriMapQuadConstraintStream.java | 8 +- .../BavetUniGroupQuadConstraintStream.java | 12 +- .../quad/BavetUniMapQuadConstraintStream.java | 8 +- .../stream}/bavet/quad/ConcatBiQuadNode.java | 10 +- .../stream}/bavet/quad/ConcatQuadBiNode.java | 10 +- .../bavet/quad/ConcatQuadQuadNode.java | 8 +- .../stream}/bavet/quad/ConcatQuadTriNode.java | 10 +- .../stream}/bavet/quad/ConcatQuadUniNode.java | 10 +- .../stream}/bavet/quad/ConcatTriQuadNode.java | 10 +- .../stream}/bavet/quad/ConcatUniQuadNode.java | 10 +- .../quad/ConditionalQuadTupleLifecycle.java | 8 +- .../bavet/quad/FlattenLastQuadNode.java | 8 +- .../quad/Group0Mapping1CollectorQuadNode.java | 6 +- .../quad/Group0Mapping2CollectorQuadNode.java | 6 +- .../quad/Group0Mapping3CollectorQuadNode.java | 6 +- .../quad/Group0Mapping4CollectorQuadNode.java | 6 +- .../quad/Group1Mapping0CollectorQuadNode.java | 8 +- .../quad/Group1Mapping1CollectorQuadNode.java | 10 +- .../quad/Group1Mapping2CollectorQuadNode.java | 10 +- .../quad/Group1Mapping3CollectorQuadNode.java | 14 +- .../quad/Group2Mapping0CollectorQuadNode.java | 8 +- .../quad/Group2Mapping1CollectorQuadNode.java | 10 +- .../quad/Group2Mapping2CollectorQuadNode.java | 14 +- .../quad/Group3Mapping0CollectorQuadNode.java | 8 +- .../quad/Group3Mapping1CollectorQuadNode.java | 12 +- .../quad/Group4Mapping0CollectorQuadNode.java | 6 +- .../bavet/quad/IndexedIfExistsQuadNode.java | 16 +- .../bavet/quad/IndexedJoinQuadNode.java | 16 +- .../stream}/bavet/quad/MapQuadToBiNode.java | 10 +- .../stream}/bavet/quad/MapQuadToQuadNode.java | 8 +- .../stream}/bavet/quad/MapQuadToTriNode.java | 10 +- .../stream}/bavet/quad/MapQuadToUniNode.java | 10 +- .../score/stream}/bavet/quad/QuadScorer.java | 10 +- .../bavet/quad/UnindexedIfExistsQuadNode.java | 10 +- .../bavet/quad/UnindexedJoinQuadNode.java | 12 +- .../bavet/tri/AbstractGroupTriNode.java | 10 +- .../tri/BavetAbstractTriConstraintStream.java | 64 +++--- .../tri/BavetBiGroupTriConstraintStream.java | 12 +- .../tri/BavetBiMapTriConstraintStream.java | 8 +- .../tri/BavetConcatTriConstraintStream.java | 22 +- .../tri/BavetFilterTriConstraintStream.java | 8 +- .../BavetFlattenLastTriConstraintStream.java | 8 +- .../tri/BavetIfExistsTriConstraintStream.java | 20 +- .../tri/BavetJoinTriConstraintStream.java | 22 +- .../BavetQuadGroupTriConstraintStream.java | 12 +- .../tri/BavetQuadMapTriConstraintStream.java | 8 +- .../tri/BavetScoringTriConstraintStream.java | 16 +- .../tri/BavetTriGroupTriConstraintStream.java | 12 +- .../tri/BavetTriMapTriConstraintStream.java | 8 +- .../tri/BavetUniGroupTriConstraintStream.java | 12 +- .../tri/BavetUniMapTriConstraintStream.java | 8 +- .../stream}/bavet/tri/ConcatBiTriNode.java | 10 +- .../stream}/bavet/tri/ConcatTriBiNode.java | 10 +- .../stream}/bavet/tri/ConcatTriTriNode.java | 8 +- .../stream}/bavet/tri/ConcatTriUniNode.java | 10 +- .../stream}/bavet/tri/ConcatUniTriNode.java | 10 +- .../tri/ConditionalTriTupleLifecycle.java | 8 +- .../stream}/bavet/tri/FlattenLastTriNode.java | 8 +- .../tri/Group0Mapping1CollectorTriNode.java | 6 +- .../tri/Group0Mapping2CollectorTriNode.java | 6 +- .../tri/Group0Mapping3CollectorTriNode.java | 6 +- .../tri/Group0Mapping4CollectorTriNode.java | 6 +- .../tri/Group1Mapping0CollectorTriNode.java | 8 +- .../tri/Group1Mapping1CollectorTriNode.java | 10 +- .../tri/Group1Mapping2CollectorTriNode.java | 10 +- .../tri/Group1Mapping3CollectorTriNode.java | 14 +- .../tri/Group2Mapping0CollectorTriNode.java | 8 +- .../tri/Group2Mapping1CollectorTriNode.java | 10 +- .../tri/Group2Mapping2CollectorTriNode.java | 14 +- .../tri/Group3Mapping0CollectorTriNode.java | 6 +- .../tri/Group3Mapping1CollectorTriNode.java | 8 +- .../tri/Group4Mapping0CollectorTriNode.java | 8 +- .../bavet/tri/IndexedIfExistsTriNode.java | 16 +- .../stream}/bavet/tri/IndexedJoinTriNode.java | 16 +- .../stream}/bavet/tri/MapTriToBiNode.java | 10 +- .../stream}/bavet/tri/MapTriToQuadNode.java | 10 +- .../stream}/bavet/tri/MapTriToTriNode.java | 8 +- .../stream}/bavet/tri/MapTriToUniNode.java | 10 +- .../score/stream}/bavet/tri/TriScorer.java | 10 +- .../bavet/tri/UnindexedIfExistsTriNode.java | 10 +- .../bavet/tri/UnindexedJoinTriNode.java | 12 +- .../bavet/uni/AbstractForEachUniNode.java | 14 +- .../bavet/uni/AbstractGroupUniNode.java | 10 +- .../uni/BavetAbstractUniConstraintStream.java | 68 +++--- .../uni/BavetBiGroupUniConstraintStream.java | 12 +- .../uni/BavetBiMapUniConstraintStream.java | 8 +- .../uni/BavetConcatUniConstraintStream.java | 16 +- .../uni/BavetFilterUniConstraintStream.java | 8 +- .../BavetFlattenLastUniConstraintStream.java | 8 +- .../uni/BavetForEachUniConstraintStream.java | 16 +- .../uni/BavetIfExistsUniConstraintStream.java | 20 +- .../BavetQuadGroupUniConstraintStream.java | 12 +- .../uni/BavetQuadMapUniConstraintStream.java | 8 +- .../uni/BavetScoringUniConstraintStream.java | 16 +- .../uni/BavetTriGroupUniConstraintStream.java | 12 +- .../uni/BavetTriMapUniConstraintStream.java | 8 +- .../uni/BavetUniGroupUniConstraintStream.java | 12 +- .../uni/BavetUniMapUniConstraintStream.java | 8 +- .../stream}/bavet/uni/ConcatUniUniNode.java | 8 +- .../uni/ConditionalUniTupleLifecycle.java | 8 +- .../stream}/bavet/uni/FlattenLastUniNode.java | 8 +- .../ForEachExcludingUnassignedUniNode.java | 6 +- .../ForEachIncludingUnassignedUniNode.java | 6 +- .../uni/Group0Mapping1CollectorUniNode.java | 6 +- .../uni/Group0Mapping2CollectorUniNode.java | 6 +- .../uni/Group0Mapping3CollectorUniNode.java | 6 +- .../uni/Group0Mapping4CollectorUniNode.java | 6 +- .../uni/Group1Mapping0CollectorUniNode.java | 6 +- .../uni/Group1Mapping1CollectorUniNode.java | 8 +- .../uni/Group1Mapping2CollectorUniNode.java | 10 +- .../uni/Group1Mapping3CollectorUniNode.java | 8 +- .../uni/Group2Mapping0CollectorUniNode.java | 8 +- .../uni/Group2Mapping1CollectorUniNode.java | 8 +- .../uni/Group2Mapping2CollectorUniNode.java | 12 +- .../uni/Group3Mapping0CollectorUniNode.java | 8 +- .../uni/Group3Mapping1CollectorUniNode.java | 8 +- .../uni/Group4Mapping0CollectorUniNode.java | 8 +- .../bavet/uni/IndexedIfExistsUniNode.java | 14 +- .../stream}/bavet/uni/MapUniToBiNode.java | 10 +- .../stream}/bavet/uni/MapUniToQuadNode.java | 10 +- .../stream}/bavet/uni/MapUniToTriNode.java | 10 +- .../stream}/bavet/uni/MapUniToUniNode.java | 8 +- .../score/stream}/bavet/uni/UniScorer.java | 10 +- .../bavet/uni/UnindexedIfExistsUniNode.java | 8 +- .../score/stream/collector}/BreakImpl.java | 2 +- .../stream/collector}/ComparableValue.java | 2 +- .../stream/collector}/ConsecutiveSetTree.java | 2 +- .../CustomCollectionUndoableActionable.java | 2 +- .../collector}/IntAverageCalculator.java | 2 +- .../stream/collector}/IntCalculator.java | 2 +- .../score/stream/collector}/IntCounter.java | 2 +- .../IntDistinctCountCalculator.java | 2 +- .../stream/collector}/IntSumCalculator.java | 2 +- .../collector}/ListUndoableActionable.java | 2 +- .../collector}/LongAverageCalculator.java | 2 +- .../stream/collector}/LongCalculator.java | 2 +- .../score/stream/collector}/LongCounter.java | 2 +- .../LongDistinctCountCalculator.java | 2 +- .../stream/collector}/LongSumCalculator.java | 2 +- .../collector}/MapUndoableActionable.java | 2 +- .../collector}/MinMaxUndoableActionable.java | 2 +- .../stream/collector}/ObjectCalculator.java | 2 +- .../ReferenceAverageCalculator.java | 2 +- .../collector}/ReferenceSumCalculator.java | 2 +- .../stream/collector}/SequenceCalculator.java | 2 +- .../score/stream/collector}/SequenceImpl.java | 2 +- .../collector}/SetUndoableActionable.java | 2 +- .../SortedSetUndoableActionable.java | 2 +- .../stream/collector}/ToMapPerKeyCounter.java | 2 +- .../collector}/ToMapResultContainer.java | 2 +- .../collector}/ToMultiMapResultContainer.java | 2 +- .../ToSimpleMapResultContainer.java | 2 +- .../stream/collector}/UndoableActionable.java | 2 +- .../collector}/bi/AndThenBiCollector.java | 2 +- .../collector}/bi/AverageIntBiCollector.java | 4 +- .../collector}/bi/AverageLongBiCollector.java | 4 +- .../bi/AverageReferenceBiCollector.java | 4 +- .../collector}/bi/ComposeFourBiCollector.java | 2 +- .../bi/ComposeThreeBiCollector.java | 2 +- .../collector}/bi/ComposeTwoBiCollector.java | 2 +- .../collector}/bi/ConditionalBiCollector.java | 2 +- ...ecutiveSequencesBiConstraintCollector.java | 4 +- .../bi/CountDistinctIntBiCollector.java | 4 +- .../bi/CountDistinctLongBiCollector.java | 4 +- .../collector}/bi/CountIntBiCollector.java | 4 +- .../collector}/bi/CountLongBiCollector.java | 4 +- .../bi/InnerBiConstraintCollectors.java | 4 +- .../bi/IntCalculatorBiCollector.java | 4 +- .../bi/LongCalculatorBiCollector.java | 4 +- .../bi/MaxComparableBiCollector.java | 4 +- .../bi/MaxComparatorBiCollector.java | 4 +- .../collector}/bi/MaxPropertyBiCollector.java | 4 +- .../bi/MinComparableBiCollector.java | 4 +- .../bi/MinComparatorBiCollector.java | 4 +- .../collector}/bi/MinPropertyBiCollector.java | 4 +- .../bi/ObjectCalculatorBiCollector.java | 4 +- .../collector}/bi/SumIntBiCollector.java | 4 +- .../collector}/bi/SumLongBiCollector.java | 4 +- .../bi/SumReferenceBiCollector.java | 4 +- .../bi/ToCollectionBiCollector.java | 4 +- .../collector}/bi/ToListBiCollector.java | 4 +- .../collector}/bi/ToMultiMapBiCollector.java | 4 +- .../collector}/bi/ToSetBiCollector.java | 4 +- .../collector}/bi/ToSimpleMapBiCollector.java | 4 +- .../bi/ToSortedSetComparatorBiCollector.java | 4 +- .../bi/UndoableActionableBiCollector.java | 4 +- .../collector}/quad/AndThenQuadCollector.java | 2 +- .../quad/AverageIntQuadCollector.java | 4 +- .../quad/AverageLongQuadCollector.java | 4 +- .../quad/AverageReferenceQuadCollector.java | 4 +- .../quad/ComposeFourQuadCollector.java | 2 +- .../quad/ComposeThreeQuadCollector.java | 2 +- .../quad/ComposeTwoQuadCollector.java | 2 +- .../quad/ConditionalQuadCollector.java | 2 +- ...utiveSequencesQuadConstraintCollector.java | 4 +- .../quad/CountDistinctIntQuadCollector.java | 4 +- .../quad/CountDistinctLongQuadCollector.java | 4 +- .../quad/CountIntQuadCollector.java | 4 +- .../quad/CountLongQuadCollector.java | 4 +- .../quad/InnerQuadConstraintCollectors.java | 4 +- .../quad/IntCalculatorQuadCollector.java | 4 +- .../quad/LongCalculatorQuadCollector.java | 4 +- .../quad/MaxComparableQuadCollector.java | 4 +- .../quad/MaxComparatorQuadCollector.java | 4 +- .../quad/MaxPropertyQuadCollector.java | 4 +- .../quad/MinComparableQuadCollector.java | 4 +- .../quad/MinComparatorQuadCollector.java | 4 +- .../quad/MinPropertyQuadCollector.java | 4 +- .../quad/ObjectCalculatorQuadCollector.java | 4 +- .../collector}/quad/SumIntQuadCollector.java | 4 +- .../collector}/quad/SumLongQuadCollector.java | 4 +- .../quad/SumReferenceQuadCollector.java | 4 +- .../quad/ToCollectionQuadCollector.java | 4 +- .../collector}/quad/ToListQuadCollector.java | 4 +- .../quad/ToMultiMapQuadCollector.java | 4 +- .../collector}/quad/ToSetQuadCollector.java | 4 +- .../quad/ToSimpleMapQuadCollector.java | 4 +- .../ToSortedSetComparatorQuadCollector.java | 4 +- .../quad/UndoableActionableQuadCollector.java | 4 +- .../collector}/tri/AndThenTriCollector.java | 2 +- .../tri/AverageIntTriCollector.java | 4 +- .../tri/AverageLongTriCollector.java | 4 +- .../tri/AverageReferenceTriCollector.java | 4 +- .../tri/ComposeFourTriCollector.java | 2 +- .../tri/ComposeThreeTriCollector.java | 2 +- .../tri/ComposeTwoTriCollector.java | 2 +- .../tri/ConditionalTriCollector.java | 2 +- ...cutiveSequencesTriConstraintCollector.java | 4 +- .../tri/CountDistinctIntTriCollector.java | 4 +- .../tri/CountDistinctLongTriCollector.java | 4 +- .../collector}/tri/CountIntTriCollector.java | 4 +- .../collector}/tri/CountLongTriCollector.java | 4 +- .../tri/InnerTriConstraintCollectors.java | 4 +- .../tri/IntCalculatorTriCollector.java | 4 +- .../tri/LongCalculatorTriCollector.java | 4 +- .../tri/MaxComparableTriCollector.java | 4 +- .../tri/MaxComparatorTriCollector.java | 4 +- .../tri/MaxPropertyTriCollector.java | 4 +- .../tri/MinComparableTriCollector.java | 4 +- .../tri/MinComparatorTriCollector.java | 4 +- .../tri/MinPropertyTriCollector.java | 4 +- .../tri/ObjectCalculatorTriCollector.java | 4 +- .../collector}/tri/SumIntTriCollector.java | 4 +- .../collector}/tri/SumLongTriCollector.java | 4 +- .../tri/SumReferenceTriCollector.java | 4 +- .../tri/ToCollectionTriCollector.java | 4 +- .../collector}/tri/ToListTriCollector.java | 4 +- .../tri/ToMultiMapTriCollector.java | 4 +- .../collector}/tri/ToSetTriCollector.java | 4 +- .../tri/ToSimpleMapTriCollector.java | 4 +- .../ToSortedSetComparatorTriCollector.java | 4 +- .../tri/UndoableActionableTriCollector.java | 4 +- .../collector}/uni/AndThenUniCollector.java | 2 +- .../uni/AverageIntUniCollector.java | 4 +- .../uni/AverageLongUniCollector.java | 4 +- .../uni/AverageReferenceUniCollector.java | 4 +- .../uni/ComposeFourUniCollector.java | 2 +- .../uni/ComposeThreeUniCollector.java | 2 +- .../uni/ComposeTwoUniCollector.java | 2 +- .../uni/ConditionalUniCollector.java | 2 +- ...cutiveSequencesUniConstraintCollector.java | 4 +- .../uni/CountDistinctIntUniCollector.java | 4 +- .../uni/CountDistinctLongUniCollector.java | 4 +- .../collector}/uni/CountIntUniCollector.java | 4 +- .../collector}/uni/CountLongUniCollector.java | 4 +- .../uni/InnerUniConstraintCollectors.java | 4 +- .../uni/IntCalculatorUniCollector.java | 4 +- .../uni/LongCalculatorUniCollector.java | 4 +- .../uni/MaxComparableUniCollector.java | 4 +- .../uni/MaxComparatorUniCollector.java | 4 +- .../uni/MaxPropertyUniCollector.java | 4 +- .../uni/MinComparableUniCollector.java | 4 +- .../uni/MinComparatorUniCollector.java | 4 +- .../uni/MinPropertyUniCollector.java | 4 +- .../uni/ObjectCalculatorUniCollector.java | 4 +- .../collector}/uni/SumIntUniCollector.java | 4 +- .../collector}/uni/SumLongUniCollector.java | 4 +- .../uni/SumReferenceUniCollector.java | 4 +- .../uni/ToCollectionUniCollector.java | 4 +- .../collector}/uni/ToListUniCollector.java | 4 +- .../uni/ToMultiMapUniCollector.java | 4 +- .../collector}/uni/ToSetUniCollector.java | 4 +- .../uni/ToSimpleMapUniCollector.java | 4 +- .../ToSortedSetComparatorUniCollector.java | 4 +- .../uni/UndoableActionableUniCollector.java | 4 +- .../stream}/common/AbstractConstraint.java | 2 +- .../common/AbstractConstraintBuilder.java | 2 +- .../common/AbstractConstraintStream.java | 2 +- ...tConstraintStreamScoreDirectorFactory.java | 4 +- .../score/stream}/common/AbstractJoiner.java | 2 +- .../stream}/common/ConstraintConstructor.java | 2 +- .../common/InnerConstraintFactory.java | 8 +- .../stream}/common/RetrievalSemantics.java | 2 +- .../score/stream}/common/ScoreImpactType.java | 2 +- .../common/bi/BiConstraintBuilderImpl.java | 6 +- .../common/bi/BiConstraintConstructor.java | 4 +- .../stream}/common/bi/BiJoinerComber.java | 2 +- .../stream}/common/bi/DefaultBiJoiner.java | 4 +- .../stream}/common/bi/FilteringBiJoiner.java | 2 +- .../common/bi/InnerBiConstraintStream.java | 8 +- .../common/inliner/AbstractScoreInliner.java | 4 +- .../BendableBigDecimalScoreContext.java | 4 +- .../BendableBigDecimalScoreInliner.java | 4 +- .../inliner/BendableLongScoreContext.java | 4 +- .../inliner/BendableLongScoreInliner.java | 4 +- .../common/inliner/BendableScoreContext.java | 4 +- .../common/inliner/BendableScoreInliner.java | 4 +- .../BigDecimalWeightedScoreImpacter.java | 2 +- .../inliner/ConstraintMatchSupplier.java | 2 +- .../HardMediumSoftBigDecimalScoreContext.java | 4 +- .../HardMediumSoftBigDecimalScoreInliner.java | 4 +- .../HardMediumSoftLongScoreContext.java | 4 +- .../HardMediumSoftLongScoreInliner.java | 4 +- .../inliner/HardMediumSoftScoreContext.java | 4 +- .../inliner/HardMediumSoftScoreInliner.java | 4 +- .../HardSoftBigDecimalScoreContext.java | 4 +- .../HardSoftBigDecimalScoreInliner.java | 4 +- .../inliner/HardSoftLongScoreContext.java | 4 +- .../inliner/HardSoftLongScoreInliner.java | 4 +- .../common/inliner/HardSoftScoreContext.java | 4 +- .../common/inliner/HardSoftScoreInliner.java | 4 +- .../inliner/IntWeightedScoreImpacter.java | 2 +- .../inliner/LongWeightedScoreImpacter.java | 2 +- .../stream}/common/inliner/ScoreContext.java | 4 +- .../inliner/SimpleBigDecimalScoreContext.java | 4 +- .../inliner/SimpleBigDecimalScoreInliner.java | 4 +- .../inliner/SimpleLongScoreContext.java | 4 +- .../inliner/SimpleLongScoreInliner.java | 4 +- .../common/inliner/SimpleScoreContext.java | 4 +- .../common/inliner/SimpleScoreInliner.java | 4 +- .../common/inliner/UndoScoreImpacter.java | 2 +- .../common/inliner/WeightedScoreImpacter.java | 2 +- .../common/penta/DefaultPentaJoiner.java | 4 +- .../common/penta/FilteringPentaJoiner.java | 2 +- .../common/penta/PentaJoinerComber.java | 2 +- .../common/quad/DefaultQuadJoiner.java | 4 +- .../common/quad/FilteringQuadJoiner.java | 2 +- .../quad/InnerQuadConstraintStream.java | 4 +- .../quad/QuadConstraintBuilderImpl.java | 6 +- .../quad/QuadConstraintConstructor.java | 4 +- .../stream}/common/quad/QuadJoinerComber.java | 2 +- .../stream}/common/tri/DefaultTriJoiner.java | 4 +- .../common/tri/FilteringTriJoiner.java | 2 +- .../common/tri/InnerTriConstraintStream.java | 6 +- .../common/tri/TriConstraintBuilderImpl.java | 6 +- .../common/tri/TriConstraintConstructor.java | 4 +- .../stream}/common/tri/TriJoinerComber.java | 2 +- .../common/uni/InnerUniConstraintStream.java | 8 +- .../common/uni/UniConstraintBuilderImpl.java | 6 +- .../common/uni/UniConstraintConstructor.java | 4 +- .../score/trend/InitializingScoreTrend.java | 0 .../core/impl/solver/AbstractSolver.java | 0 .../BestSolutionContainingProblemChanges.java | 0 .../core/impl/solver/BestSolutionHolder.java | 0 .../core/impl/solver/ClassInstanceCache.java | 0 .../core/impl/solver/ConsumerSupport.java | 0 .../impl/solver/DefaultRecommendedFit.java | 0 .../impl/solver/DefaultSolutionManager.java | 0 .../core/impl/solver/DefaultSolver.java | 0 .../impl/solver/DefaultSolverFactory.java | 3 +- .../core/impl/solver/DefaultSolverJob.java | 0 .../impl/solver/DefaultSolverJobBuilder.java | 0 .../impl/solver/DefaultSolverManager.java | 0 .../solver/core/impl/solver/FitProcessor.java | 0 .../solver/core/impl/solver/Fitter.java | 0 .../change/DefaultProblemChangeDirector.java | 0 .../solver/change/ProblemChangeAdapter.java | 0 .../solver/event/AbstractEventSupport.java | 0 .../impl/solver/event/SolverEventSupport.java | 0 .../solver/event/SolverLifecycleListener.java | 0 .../event/SolverLifecycleListenerAdapter.java | 0 .../UndoScoreCorruptionException.java | 0 .../solver/random/DefaultRandomFactory.java | 0 .../impl/solver/random/RandomFactory.java | 0 .../core/impl/solver/random/RandomUtils.java | 0 .../solver/recaller/BestSolutionRecaller.java | 0 .../recaller/BestSolutionRecallerFactory.java | 0 .../core/impl/solver/scope/SolverScope.java | 0 .../AbstractCompositeTermination.java | 0 .../termination/AbstractTermination.java | 0 .../termination/AndCompositeTermination.java | 0 .../termination/BasicPlumbingTermination.java | 0 .../BestScoreFeasibleTermination.java | 0 .../termination/BestScoreTermination.java | 0 .../ChildThreadPlumbingTermination.java | 0 .../termination/OrCompositeTermination.java | 0 .../PhaseToSolverTerminationBridge.java | 0 .../ScoreCalculationCountTermination.java | 0 .../termination/StepCountTermination.java | 0 .../impl/solver/termination/Termination.java | 0 .../termination/TerminationFactory.java | 0 .../TimeMillisSpentTermination.java | 0 .../UnimprovedStepCountTermination.java | 0 ...ntScoreDifferenceThresholdTermination.java | 0 .../UnimprovedTimeMillisSpentTermination.java | 0 .../impl/solver/thread/ChildThreadType.java | 0 .../thread/DefaultSolverThreadFactory.java | 0 .../core/impl/solver/thread/ThreadUtils.java | 0 .../impl/statistic/BestScoreStatistic.java | 0 .../BestSolutionMutationCountStatistic.java | 0 .../impl/statistic/MemoryUseStatistic.java | 0 .../PickedMoveBestScoreDiffStatistic.java | 0 .../PickedMoveStepScoreDiffStatistic.java | 0 .../impl/statistic/SolverScopeStatistic.java | 0 .../core/impl/statistic/SolverStatistic.java | 0 .../statistic/StatelessSolverStatistic.java | 0 .../core/impl/util/CollectionUtils.java | 0 .../core/impl/util/ConstantLambdaUtils.java | 0 .../core/impl/util/ElementAwareList.java | 0 .../core/impl/util/ElementAwareListEntry.java | 0 .../impl/util/ListBasedScalingOrderedSet.java | 0 .../solver/core/impl/util/MathUtils.java | 0 .../core/impl/util/MemoizingSupply.java | 0 .../solver/core/impl/util/MutableInt.java | 0 .../solver/core/impl/util/MutableLong.java | 0 .../solver/core/impl/util/MutablePair.java | 0 .../core/impl/util/MutableReference.java | 0 .../timefold/solver/core/impl/util/Pair.java | 0 .../solver/core/impl/util/Quadruple.java | 0 .../solver/core/impl/util/Triple.java | 0 .../core/impl/io/jaxb/removeNamespaces.xslt | 0 .../src/main/resources/solver.xsd | 0 .../cloner/CustomSolutionClonerTest.java | 0 .../AnonymousValueRangeFactoryTest.java | 0 .../valuerange/ValueRangeFactoryTest.java | 0 .../core/api/score/ScoreManagerTest.java | 0 .../api/score/analysis/ScoreAnalysisTest.java | 0 .../api/score/buildin/AbstractScoreTest.java | 0 .../buildin/bendable/BendableScoreTest.java | 0 .../BendableBigDecimalScoreTest.java | 0 .../bendablelong/BendableLongScoreTest.java | 0 .../HardMediumSoftScoreTest.java | 0 .../HardMediumSoftBigDecimalScoreTest.java | 0 .../HardMediumSoftLongScoreTest.java | 0 .../buildin/hardsoft/HardSoftScoreTest.java | 0 .../HardSoftBigDecimalScoreTest.java | 0 .../hardsoftlong/HardSoftLongScoreTest.java | 0 .../score/buildin/simple/SimpleScoreTest.java | 0 .../SimpleBigDecimalScoreTest.java | 0 .../simplelong/SimpleLongScoreTest.java | 0 .../score/constraint/ConstraintMatchTest.java | 0 .../core/api/solver/DivertingClassLoader.java | 0 .../api/solver/ProblemSizeStatisticsTest.java | 0 .../core/api/solver/SolutionManagerTest.java | 0 .../core/api/solver/SolverFactoryTest.java | 0 .../core/api/solver/SolverManagerTest.java | 0 .../pillar/SubPillarConfigPolicyTest.java | 0 .../selector/move/MoveSelectorConfigTest.java | 0 .../PillarSwapMoveSelectorConfigTest.java | 0 .../LocalSearchPhaseConfigTest.java | 0 .../phase/custom/CustomPhaseConfigTest.java | 0 .../config/solver/EnvironmentModeTest.java | 0 .../core/config/solver/SolverConfigTest.java | 0 .../termination/TerminationConfigTest.java | 0 .../solver/testutil/MockThreadFactory.java | 0 ...ractTestdataDifferentValuesCalculator.java | 0 ...ataCorruptedDifferentValuesCalculator.java | 0 .../TestdataDifferentValuesCalculator.java | 0 .../corruptedmove/AbstractTestdataMove.java | 0 .../TestdataCorruptedEntityUndoMove.java | 0 .../TestdataCorruptedUndoMove.java | 0 ...aCorruptedUndoMoveTotalMappingFactory.java | 0 ...estdataCorruptedEntityUndoMoveFactory.java | 0 .../TestdataCorruptedUndoMoveFactory.java | 0 ...orruptedUndoShadowEasyScoreCalculator.java | 0 .../CorruptedUndoShadowEntity.java | 0 .../CorruptedUndoShadowSolution.java | 0 .../CorruptedUndoShadowValue.java | 0 .../CorruptedUndoShadowVariableListener.java | 0 .../core/config/util/ConfigUtilsTest.java | 0 .../TimefoldSolverEnterpriseServiceTest.java | 4 +- ...DefaultConstructionHeuristicPhaseTest.java | 0 ...faultConstructionHeuristicForagerTest.java | 0 .../placer/entity/PlacementAssertions.java | 0 .../entity/PooledEntityPlacerFactoryTest.java | 0 .../placer/entity/PooledEntityPlacerTest.java | 0 .../entity/QueuedEntityPlacerFactoryTest.java | 0 .../placer/entity/QueuedEntityPlacerTest.java | 0 .../entity/QueuedValuePlacerFactoryTest.java | 0 .../placer/entity/QueuedValuePlacerTest.java | 0 .../accessor/MemberAccessorFactoryTest.java | 0 ...lectionBeanPropertyMemberAccessorTest.java | 0 .../ReflectionFieldMemberAccessorTest.java | 0 .../gizmo/GizmoMemberAccessorFactoryTest.java | 0 .../GizmoMemberAccessorImplementorTest.java | 0 .../gizmo/GizmoMemberDescriptorTest.java | 0 .../ConstraintWeightDescriptorTest.java | 0 .../descriptor/EntityDescriptorTest.java | 0 .../domain/lookup/AbstractLookupTest.java | 0 .../ClassAndPlanningIdComparatorTest.java | 0 .../impl/domain/lookup/LookUpManagerTest.java | 0 .../lookup/LookUpStrategyEqualityTest.java | 0 .../lookup/LookUpStrategyIdOrFailTest.java | 0 .../lookup/LookUpStrategyIdOrNoneTest.java | 0 .../lookup/LookUpStrategyImmutableTest.java | 0 .../domain/lookup/LookUpStrategyNoneTest.java | 0 .../score/descriptor/ScoreDescriptorTest.java | 0 .../cloner/AbstractSolutionClonerTest.java | 0 .../FieldAccessingSolutionClonerTest.java | 0 .../cloner/gizmo/GizmoSolutionClonerTest.java | 0 .../descriptor/SolutionDescriptorTest.java | 0 .../mutation/MutationCounterTest.java | 0 .../bigdecimal/BigDecimalValueRangeTest.java | 0 .../biginteger/BigIntegerValueRangeTest.java | 0 .../collection/ListValueRangeTest.java | 0 .../CompositeCountableValueRangeTest.java | 0 .../composite/EmptyValueRangeTest.java | 0 .../NullAllowingCountableValueRangeTest.java | 0 .../primboolean/BooleanValueRangeTest.java | 0 .../primdouble/DoubleValueRangeTest.java | 0 .../buildin/primint/IntValueRangeTest.java | 0 .../buildin/primlong/LongValueRangeTest.java | 0 .../temporal/TemporalValueRangeTest.java | 0 ...ternalizedListVariableStateSupplyTest.java | 0 .../variable/ListVariableListenerTest.java | 0 .../anchor/AnchorVariableListenerTest.java | 0 .../ExternalizedAnchorVariableSupplyTest.java | 0 .../custom/CustomVariableListenerTest.java | 0 .../GenuineVariableDescriptorTest.java | 0 .../ListVariableDescriptorTest.java | 0 .../index/IndexVariableListenerTest.java | 0 ...CollectionInverseVariableListenerTest.java | 0 ...edCollectionInverseVariableSupplyTest.java | 0 ...zedSingletonInverseVariableSupplyTest.java | 0 .../SingletonInverseVariableListenerTest.java | 0 ...gletonListInverseVariableListenerTest.java | 0 .../support/VariableListenerSupportTest.java | 0 .../violation/AllVariablesAssertTest.java | 0 .../violation/ListVariableTrackerTest.java | 0 .../violation/NormalVariableTrackerTest.java | 0 .../violation/ShadowVariablesAssertTest.java | 0 .../violation/SolutionTrackerTest.java | 0 .../BlackBoxExhaustiveSearchPhaseTest.java | 0 .../impl/exhaustivesearch/BruteForceTest.java | 0 .../DefaultExhaustiveSearchPhaseTest.java | 0 .../AbstractNodeComparatorTest.java | 0 .../BreadthFirstNodeComparatorTest.java | 0 .../DepthFirstNodeComparatorTest.java | 0 ...ptimisticBoundFirstNodeComparatorTest.java | 0 .../ScoreFirstNodeComparatorTest.java | 0 .../scope/ExhaustiveSearchPhaseScopeTest.java | 0 .../HeuristicConfigPolicyTestUtils.java | 0 .../heuristic/move/CompositeMoveTest.java | 0 .../core/impl/heuristic/move/DummyMove.java | 0 .../impl/heuristic/move/NoChangeMoveTest.java | 0 .../heuristic/move/NotDoableDummyMove.java | 0 .../heuristic/selector/SelectorTestUtils.java | 0 .../ComparatorSelectionSorterTest.java | 0 .../WeightFactorySelectionSorterTest.java | 0 .../entity/EntitySelectorFactoryTest.java | 0 .../FromSolutionEntitySelectorTest.java | 0 .../decorator/CachingEntitySelectorTest.java | 0 .../FilteringEntitySelectorTest.java | 0 .../ProbabilityEntitySelectorTest.java | 0 .../SelectedCountLimitEntitySelectorTest.java | 0 .../ShufflingEntitySelectorTest.java | 0 .../decorator/SortingEntitySelectorTest.java | 0 .../MimicReplayingEntitySelectorTest.java | 0 .../pillar/DefaultPillarSelectorTest.java | 0 .../list/ElementDestinationSelectorTest.java | 0 .../list/RandomSubListSelectorTest.java | 0 .../list/SubListSelectorFactoryTest.java | 0 .../heuristic/selector/list/SubListTest.java | 0 .../list/TriangleElementFactoryTest.java | 0 .../selector/list/TriangularNumbersTest.java | 0 .../move/MoveSelectorFactoryTest.java | 0 .../CartesianProductMoveSelectorTest.java | 0 .../move/composite/UnionMoveSelectorTest.java | 0 .../decorator/CachingMoveSelectorTest.java | 0 .../decorator/FilteringMoveSelectorTest.java | 0 .../ProbabilityMoveSelectorTest.java | 0 .../SelectedCountLimitMoveSelectorTest.java | 0 .../decorator/ShufflingMoveSelectorTest.java | 0 .../decorator/SortingMoveSelectorTest.java | 0 .../ChangeMoveSelectorFactoryTest.java | 0 .../move/generic/ChangeMoveSelectorTest.java | 0 .../selector/move/generic/ChangeMoveTest.java | 0 .../move/generic/PillarChangeMoveTest.java | 0 .../move/generic/PillarDemandTest.java | 0 .../move/generic/PillarSwapMoveTest.java | 0 .../generic/SwapMoveSelectorFactoryTest.java | 0 .../move/generic/SwapMoveSelectorTest.java | 0 .../selector/move/generic/SwapMoveTest.java | 0 .../chained/ChainedChangeMoveTest.java | 0 .../generic/chained/ChainedSwapMoveTest.java | 0 .../move/generic/chained/KOptMoveTest.java | 0 ...SubChainChangeMoveSelectorFactoryTest.java | 0 .../SubChainChangeMoveSelectorTest.java | 0 .../chained/SubChainChangeMoveTest.java | 0 .../SubChainReversingChangeMoveTest.java | 0 .../SubChainReversingSwapMoveTest.java | 0 .../SubChainSwapMoveSelectorFactoryTest.java | 0 .../generic/chained/SubChainSwapMoveTest.java | 0 .../chained/TailChainSwapMoveTest.java | 0 .../move/generic/list/ListAssignMoveTest.java | 0 .../ListChangeMoveSelectorFactoryTest.java | 0 .../list/ListChangeMoveSelectorTest.java | 0 .../move/generic/list/ListChangeMoveTest.java | 0 .../list/ListSwapMoveSelectorFactoryTest.java | 0 .../list/ListSwapMoveSelectorTest.java | 0 .../move/generic/list/ListSwapMoveTest.java | 0 .../generic/list/ListUnassignMoveTest.java | 0 .../list/OriginalListChangeIteratorTest.java | 0 .../list/OriginalListSwapIteratorTest.java | 0 .../list/RandomListChangeIteratorTest.java | 0 .../list/RandomListSwapIteratorTest.java | 0 .../RandomSubListChangeMoveSelectorTest.java | 0 .../RandomSubListSwapMoveSelectorTest.java | 0 .../SubListChangeMoveSelectorFactoryTest.java | 0 .../generic/list/SubListChangeMoveTest.java | 0 .../SubListSwapMoveSelectorFactoryTest.java | 0 .../generic/list/SubListSwapMoveTest.java | 0 .../list/kopt/KOptListMoveIteratorTest.java | 0 .../generic/list/kopt/KOptListMoveTest.java | 0 .../move/generic/list/kopt/KOptUtilsTest.java | 0 .../list/kopt/MultipleDelegateListTest.java | 0 .../generic/list/kopt/TwoOptListMoveTest.java | 0 .../value/ValueSelectorFactoryTest.java | 0 .../chained/DefaultSubChainSelectorTest.java | 0 .../chained/SubChainSelectorFactoryTest.java | 0 .../decorator/CachingValueSelectorTest.java | 0 ...IndependentFilteringValueSelectorTest.java | 0 .../decorator/FilteringValueSelectorTest.java | 0 .../InitializedValueSelectorTest.java | 0 ...MovableChainedTrailingValueFilterTest.java | 0 ...ReinitializeVariableValueSelectorTest.java | 0 .../SelectedCountLimitValueSelectorTest.java | 0 .../decorator/SortingValueSelectorTest.java | 0 .../UnassignedListValueSelectorTest.java | 0 .../value/mimic/ManualValueMimicRecorder.java | 0 .../MimicReplayingValueSelectorTest.java | 0 .../core/impl/io/jaxb/GenericJaxbIOTest.java | 0 .../JaxbCustomPropertiesAdapterTest.java | 0 .../jaxb/adapter/JaxbDurationAdapterTest.java | 0 .../JaxbOffsetDateTimeAdapterTest.java | 0 .../DefaultLocalSearchPhaseTest.java | 0 .../acceptor/AbstractAcceptorTest.java | 0 .../decider/acceptor/AcceptorFactoryTest.java | 0 .../composite/CompositeAcceptorTest.java | 0 .../greatdeluge/GreatDelugeAcceptorTest.java | 0 .../HillClimbingAcceptorTest.java | 0 .../LateAcceptanceAcceptorTest.java | 0 .../SimulatedAnnealingAcceptorTest.java | 0 .../StepCountingHillClimbingAcceptorTest.java | 0 .../acceptor/tabu/EntityTabuAcceptorTest.java | 0 .../acceptor/tabu/ValueTabuAcceptorTest.java | 0 .../size/EntityRatioTabuSizeStrategyTest.java | 0 .../tabu/size/FixedTabuSizeStrategyTest.java | 0 .../AcceptedLocalSearchForagerTest.java | 0 ...cOscillationByLevelFinalistPodiumTest.java | 0 .../core/impl/phase/NoChangePhaseTest.java | 0 .../core/impl/phase/PhaseLifecycleTest.java | 0 .../DummySimpleScoreEasyScoreCalculator.java | 0 ...BendableBigDecimalScoreDefinitionTest.java | 0 .../BendableLongScoreDefinitionTest.java | 0 .../buildin/BendableScoreDefinitionTest.java | 0 ...diumSoftBigDecimalScoreDefinitionTest.java | 0 ...HardMediumSoftLongScoreDefinitionTest.java | 0 .../HardMediumSoftScoreDefinitionTest.java | 0 ...HardSoftBigDecimalScoreDefinitionTest.java | 0 .../HardSoftLongScoreDefinitionTest.java | 0 .../buildin/HardSoftScoreDefinitionTest.java | 0 .../SimpleBigDecimalScoreDefinitionTest.java | 0 .../SimpleLongScoreDefinitionTest.java | 0 .../buildin/SimpleScoreDefinitionTest.java | 0 .../DefaultConstraintMatchTotalTest.java | 0 .../constraint/DefaultIndictmentTest.java | 0 .../AbstractScoreDirectorSemanticsTest.java | 0 .../ScoreDirectorFactoryFactoryTest.java | 17 +- .../easy/EasyScoreDirectorFactoryTest.java | 0 .../easy/EasyScoreDirectorSemanticsTest.java | 12 +- .../director/easy/EasyScoreDirectorTest.java | 0 ...IncrementalScoreDirectorSemanticsTest.java | 9 +- .../IncrementalScoreDirectorTest.java | 8 +- ...treamsBavetScoreDirectorSemanticsTest.java | 11 +- ...etAdvancedGroupByConstraintStreamTest.java | 4 +- .../BavetConstraintStreamImplSupport.java | 5 +- .../bavet/BavetFactChangePropagationTest.java | 4 +- .../stream}/bavet/BavetRegressionTest.java | 4 +- .../bavet/BavetSolutionManagerTest.java | 4 +- ...avetBiConstraintStreamNodeSharingTest.java | 6 +- .../bavet/bi/BavetBiConstraintStreamTest.java | 6 +- .../common/index/AbstractIndexerTest.java | 2 +- .../index/EqualsAndComparisonIndexerTest.java | 6 +- .../bavet/common/index/EqualsIndexerTest.java | 15 +- .../bavet/common/index/NoneIndexerTest.java | 4 +- ...etQuadConstraintStreamNodeSharingTest.java | 6 +- .../quad/BavetQuadConstraintStreamTest.java | 6 +- ...vetTriConstraintStreamNodeSharingTest.java | 6 +- .../tri/BavetTriConstraintStreamTest.java | 6 +- ...vetUniConstraintStreamNodeSharingTest.java | 6 +- .../uni/BavetUniConstraintStreamTest.java | 6 +- .../bavet/uni/FlattenLastUniNodeTest.java | 10 +- .../AbstractConstraintCollectorsTest.java | 2 +- .../collector}/ConsecutiveSetTreeTest.java | 2 +- .../score/stream/collector}/IterableList.java | 2 +- .../bi/InnerBiConstraintCollectorsTest.java | 4 +- .../InnerQuadConstraintCollectorsTest.java | 4 +- .../tri/InnerTriConstraintCollectorsTest.java | 4 +- .../uni/InnerUniConstraintCollectorsTest.java | 4 +- ...ctAdvancedGroupByConstraintStreamTest.java | 2 +- .../common/AbstractConstraintStreamTest.java | 2 +- .../AbstractFactChangePropagationTest.java | 2 +- .../common/AbstractSolutionManagerTest.java | 2 +- .../ConstraintStreamFunctionalTest.java | 2 +- .../common/ConstraintStreamImplSupport.java | 2 +- .../ConstraintStreamNodeSharingTest.java | 2 +- .../common/ConstraintStreamTestExtension.java | 2 +- .../score/stream}/common/JoinerTypeTest.java | 2 +- .../score/stream}/common/JoinersTest.java | 10 +- ...ractBiConstraintStreamNodeSharingTest.java | 8 +- .../bi/AbstractBiConstraintStreamTest.java | 8 +- .../inliner/AbstractScoreInlinerTest.java | 8 +- .../BendableBigDecimalScoreInlinerTest.java | 2 +- .../inliner/BendableLongScoreInlinerTest.java | 2 +- .../inliner/BendableScoreInlinerTest.java | 2 +- ...dMediumSoftBigDecimalScoreInlinerTest.java | 2 +- .../HardMediumSoftLongScoreInlinerTest.java | 2 +- .../HardMediumSoftScoreInlinerTest.java | 2 +- .../HardSoftBigDecimalScoreInlinerTest.java | 2 +- .../inliner/HardSoftLongScoreInlinerTest.java | 2 +- .../inliner/HardSoftScoreInlinerTest.java | 2 +- .../SimpleBigDecimalScoreInlinerTest.java | 2 +- .../inliner/SimpleLongScoreInlinerTest.java | 2 +- .../inliner/SimpleScoreInlinerTest.java | 2 +- ...ctQuadConstraintStreamNodeSharingTest.java | 8 +- .../AbstractQuadConstraintStreamTest.java | 8 +- ...actTriConstraintStreamNodeSharingTest.java | 8 +- .../tri/AbstractTriConstraintStreamTest.java | 8 +- ...actUniConstraintStreamNodeSharingTest.java | 8 +- .../uni/AbstractUniConstraintStreamTest.java | 8 +- .../trend/InitializingScoreTrendTest.java | 0 ...nassignedValuesListVariableSolverTest.java | 0 .../impl/solver/BestSolutionHolderTest.java | 0 .../core/impl/solver/ConsumerSupportTest.java | 0 .../impl/solver/DefaultSolverFactoryTest.java | 0 .../core/impl/solver/DefaultSolverTest.java | 0 .../DefaultProblemChangeDirectorTest.java | 0 .../impl/solver/random/RandomUtilsTest.java | 0 .../recaller/BestSolutionRecallerTest.java | 0 .../AndCompositeTerminationTest.java | 0 .../BasicPlumbingTerminationTest.java | 0 .../BestScoreFeasibleTerminationTest.java | 0 .../termination/BestScoreTerminationTest.java | 0 .../OrCompositeTerminationTest.java | 0 .../ScoreCalculationCountTerminationTest.java | 0 .../termination/StepCountTerminationTest.java | 0 .../termination/TerminationFactoryTest.java | 0 .../TimeMillisSpentTerminationTest.java | 0 .../UnimprovedStepCountTerminationTest.java | 0 ...oreDifferenceThresholdTerminationTest.java | 0 ...mprovedTimeMillisSpentTerminationTest.java | 0 .../domain/DummyVariableListener.java | 0 .../domain/TestdataConstraintProvider.java | 0 .../domain/TestdataEasyScoreCalculator.java | 0 .../impl/testdata/domain/TestdataEntity.java | 0 .../TestdataIncrementalScoreCalculator.java | 0 .../impl/testdata/domain/TestdataObject.java | 0 .../testdata/domain/TestdataSolution.java | 0 .../impl/testdata/domain/TestdataValue.java | 0 ...taAllowsUnassignedEasyScoreCalculator.java | 0 .../TestdataAllowsUnassignedEntity.java | 0 ...sUnassignedIncrementalScoreCalculator.java | 0 .../TestdataAllowsUnassignedSolution.java | 0 .../backlinked/TestdataBacklinkedEntity.java | 0 .../TestdataBacklinkedSolution.java | 0 .../domain/chained/TestdataChainedAnchor.java | 0 .../domain/chained/TestdataChainedEntity.java | 0 .../domain/chained/TestdataChainedObject.java | 0 .../chained/TestdataChainedSolution.java | 0 .../TestdataChainedBrownEntity.java | 0 .../TestdataChainedGreenEntity.java | 0 .../TestdataChainedMultiEntityAnchor.java | 0 ...estdataChainedMultiEntityChainElement.java | 0 .../TestdataChainedMultiEntitySolution.java | 0 .../TestdataShadowingChainedAnchor.java | 0 .../TestdataShadowingChainedEntity.java | 0 ...wingChainedIncrementalScoreCalculator.java | 0 .../TestdataShadowingChainedObject.java | 0 .../TestdataShadowingChainedSolution.java | 0 .../TestdataCorrectlyClonedSolution.java | 0 .../TestdataEntitiesNotClonedSolution.java | 0 .../TestdataScoreNotClonedSolution.java | 0 .../TestdataScoreNotEqualSolution.java | 0 .../AnnotatedTestdataVariousTypes.java | 0 .../TestdataDeepCloningEntity.java | 0 .../TestdataDeepCloningSolution.java | 0 .../deepcloning/TestdataVariousTypes.java | 0 ...stdataFieldAnnotatedDeepCloningEntity.java | 0 ...dataFieldAnnotatedDeepCloningSolution.java | 0 .../clone/lookup/TestdataObjectEnum.java | 0 .../clone/lookup/TestdataObjectEquals.java | 0 .../TestdataObjectEqualsNoHashCode.java | 0 .../lookup/TestdataObjectEqualsSubclass.java | 0 .../clone/lookup/TestdataObjectIntegerId.java | 0 .../TestdataObjectIntegerIdSubclass.java | 0 .../lookup/TestdataObjectMultipleIds.java | 0 .../clone/lookup/TestdataObjectNoId.java | 0 .../lookup/TestdataObjectPrimitiveIntId.java | 0 .../collection/TestdataArrayBasedEntity.java | 0 .../TestdataArrayBasedSolution.java | 0 ...estdataEntityCollectionPropertyEntity.java | 0 ...tdataEntityCollectionPropertySolution.java | 0 .../collection/TestdataSetBasedEntity.java | 0 .../collection/TestdataSetBasedSolution.java | 0 .../comparable/TestdataCodeComparator.java | 0 .../TestdataDifficultyComparingEntity.java | 0 .../TestdataDifficultyComparingSolution.java | 0 .../TestdataConstraintConfiguration.java | 0 ...stdataConstraintConfigurationSolution.java | 0 ...traintWeighIncrementalScoreCalculator.java | 0 ...ataConstraintWeightConstraintProvider.java | 0 ...taConstraintWeightEasyScoreCalculator.java | 0 ...stdataExtendedConstraintConfiguration.java | 0 ...tendedConstraintConfigurationSolution.java | 0 .../TestdataAnnotatedExtendedEntity.java | 0 .../TestdataAnnotatedExtendedSolution.java | 0 .../TestdataUnannotatedExtendedEntity.java | 0 .../TestdataUnannotatedExtendedSolution.java | 0 .../TestdataExtendedEntitySolution.java | 0 .../TestdataExtendedThirdPartyEntity.java | 0 .../TestdataExtendedThirdPartySolution.java | 0 .../TestdataThirdPartyEntityPojo.java | 0 .../TestdataThirdPartySolutionPojo.java | 0 .../TestdataExtendedShadowEntity.java | 0 ...ataExtendedShadowExtendedShadowEntity.java | 0 .../TestdataExtendedShadowShadowEntity.java | 0 .../TestdataExtendedShadowSolution.java | 0 .../TestdataExtendedShadowVariable.java | 0 ...estdataExtendedShadowVariableListener.java | 0 .../domain/gizmo/GizmoTestdataEntity.java | 0 .../domain/list/TestDistanceMeter.java | 0 .../domain/list/TestdataListEntity.java | 0 .../domain/list/TestdataListSolution.java | 0 .../domain/list/TestdataListUtils.java | 0 .../domain/list/TestdataListValue.java | 0 ...stAllowsUnassignedValuesDistanceMeter.java | 0 ...nassignedValuesListConstraintProvider.java | 0 ...assignedValuesListEasyScoreCalculator.java | 0 ...tdataAllowsUnassignedValuesListEntity.java | 0 ...dValuesListIncrementalScoreCalculator.java | 0 ...ataAllowsUnassignedValuesListSolution.java | 0 ...stdataAllowsUnassignedValuesListValue.java | 0 ...nassignedValuesListConstraintProvider.java | 0 ...tdataPinnedUnassignedValuesListEntity.java | 0 ...ataPinnedUnassignedValuesListSolution.java | 0 ...stdataPinnedUnassignedValuesListValue.java | 0 .../TestdataListEntityExternalized.java | 0 .../TestdataListSolutionExternalized.java | 0 .../TestdataListValueExternalized.java | 0 .../mixed/TestdataMixedVariablesEntity.java | 0 .../mixed/TestdataMixedVariablesSolution.java | 0 .../TestdataPinnedListConstraintProvider.java | 0 ...TestdataPinnedListEasyScoreCalculator.java | 0 .../list/pinned/TestdataPinnedListEntity.java | 0 ...aPinnedListIncrementalScoreCalculator.java | 0 .../pinned/TestdataPinnedListSolution.java | 0 .../list/pinned/TestdataPinnedListValue.java | 0 .../TestdataPinnedWithIndexDistanceMeter.java | 0 ...ndexListCMAIncrementalScoreCalculator.java | 0 ...PinnedWithIndexListConstraintProvider.java | 0 ...innedWithIndexListEasyScoreCalculator.java | 0 .../TestdataPinnedWithIndexListEntity.java | 0 ...thIndexListIncrementalScoreCalculator.java | 0 .../TestdataPinnedWithIndexListSolution.java | 0 .../TestdataPinnedWithIndexListValue.java | 0 .../TestdataPinnedNoShadowsListEntity.java | 0 .../TestdataPinnedNoShadowsListSolution.java | 0 .../TestdataPinnedNoShadowsListValue.java | 0 .../TestdataListEntityWithShadowHistory.java | 0 ...TestdataListSolutionWithShadowHistory.java | 0 .../TestdataListValueWithShadowHistory.java | 0 ...adowHistoryIncrementalScoreCalculator.java | 0 .../TestdataListEntityProvidingEntity.java | 0 .../TestdataListEntityProvidingSolution.java | 0 ...TestdataListEntityWithArrayValueRange.java | 0 ...stdataListSolutionWithArrayValueRange.java | 0 .../multientity/TestdataHerdEntity.java | 0 .../multientity/TestdataLeadEntity.java | 0 .../TestdataMultiEntitySolution.java | 0 .../multivar/TestdataMultiVarEntity.java | 0 .../multivar/TestdataMultiVarSolution.java | 0 ...ataMultivarIncrementalScoreCalculator.java | 0 .../domain/multivar/TestdataOtherValue.java | 0 .../domain/pinned/TestdataPinnedEntity.java | 0 .../domain/pinned/TestdataPinnedSolution.java | 0 .../domain/pinned/TestdataPinningFilter.java | 0 .../TestdataChainedEntityPinningFilter.java | 0 .../chained/TestdataPinnedChainedEntity.java | 0 .../TestdataPinnedChainedSolution.java | 0 .../TestdataExtendedPinnedEntity.java | 0 .../TestdataExtendedPinnedSolution.java | 0 .../TestdataExtendedPinningFilter.java | 0 .../TestdataStringPlanningIdEntity.java | 0 .../TestdataStringPlanningIdSolution.java | 0 .../domain/record/TestdataRecordEntity.java | 0 .../domain/record/TestdataRecordSolution.java | 0 .../domain/record/TestdataRecordValue.java | 0 .../TestdataAccessModifierSolution.java | 0 .../TestdataVisibilityModifierSolution.java | 0 .../field/TestdataFieldAnnotatedEntity.java | 0 .../field/TestdataFieldAnnotatedSolution.java | 0 .../generic/TestdataGenericEntity.java | 0 .../generic/TestdataGenericSolution.java | 0 .../reflect/generic/TestdataGenericValue.java | 0 ...stdataBendableBigDecimalScoreSolution.java | 0 .../TestdataBendableLongScoreSolution.java | 0 .../score/TestdataBendableScoreSolution.java | 0 ...HardMediumSoftBigDecimalScoreSolution.java | 0 ...stdataHardMediumSoftLongScoreSolution.java | 0 .../TestdataHardMediumSoftScoreSolution.java | 0 ...stdataHardSoftBigDecimalScoreSolution.java | 0 .../TestdataHardSoftLongScoreSolution.java | 0 .../score/TestdataHardSoftScoreSolution.java | 0 ...TestdataSimpleBigDecimalScoreSolution.java | 0 .../TestdataSimpleLongScoreSolution.java | 0 .../score/lavish/TestdataLavishEntity.java | 0 .../lavish/TestdataLavishEntityGroup.java | 0 .../score/lavish/TestdataLavishExtra.java | 0 .../score/lavish/TestdataLavishSolution.java | 0 .../score/lavish/TestdataLavishValue.java | 0 .../lavish/TestdataLavishValueGroup.java | 0 .../domain/shadow/TestdataShadowedEntity.java | 0 ...ataShadowedIncrementalScoreCalculator.java | 0 .../shadow/TestdataShadowedSolution.java | 0 .../TestdataCorruptedShadowedEntity.java | 0 .../TestdataCorruptedShadowedSolution.java | 0 .../TestdataSevenNonCyclicShadowedEntity.java | 0 ...estdataSevenNonCyclicShadowedSolution.java | 0 ...estdataCyclicReferencedShadowedEntity.java | 0 ...tdataCyclicReferencedShadowedSolution.java | 0 .../invalid/TestdataCyclicShadowedEntity.java | 0 .../TestdataCyclicShadowedSolution.java | 0 .../TestdataExtendedShadowedChildEntity.java | 0 .../TestdataExtendedShadowedParentEntity.java | 0 .../TestdataExtendedShadowedSolution.java | 0 .../TestdataInverseRelationEntity.java | 0 .../TestdataInverseRelationSolution.java | 0 .../TestdataInverseRelationValue.java | 0 .../TestdataManyToManyShadowedEntity.java | 0 ...aManyToManyShadowedEntityUniqueEvents.java | 0 .../TestdataManyToManyShadowedSolution.java | 0 .../TestdataShadowVariableOrderEntity.java | 0 .../TestdataShadowVariableOrderSolution.java | 0 .../TestdataWrongBasicShadowEntity.java | 0 .../TestdataWrongListShadowEntity.java | 0 ...TestdataNoProblemFactPropertySolution.java | 0 .../TestdataProblemFactPropertySolution.java | 0 ...ProblemFactCollectionPropertySolution.java | 0 .../TestdataWildcardSolution.java | 0 ...dataAutoDiscoverFieldOverrideSolution.java | 0 .../TestdataAutoDiscoverFieldSolution.java | 0 ...ataAutoDiscoverGetterOverrideSolution.java | 0 .../TestdataAutoDiscoverGetterSolution.java | 0 ...AutoDiscoverUnannotatedEntitySolution.java | 0 ...ataExtendedAutoDiscoverGetterSolution.java | 0 ...nningEntityCollectionPropertySolution.java | 0 ...uplicatePlanningScorePropertySolution.java | 0 ...ProblemFactCollectionPropertySolution.java | 0 .../TestdataMissingScorePropertySolution.java | 0 ...ollectionPropertyWithArgumentSolution.java | 0 ...nningEntityCollectionPropertySolution.java | 0 .../TestdataUnknownFactTypeSolution.java | 0 .../TestdataUnsupportedWildcardSolution.java | 0 .../valuerange/TestdataValueRangeEntity.java | 0 .../TestdataValueRangeSolution.java | 0 .../TestdataAnonymousArraySolution.java | 0 .../TestdataAnonymousListSolution.java | 0 .../TestdataAnonymousValueRangeEntity.java | 0 .../TestdataAnonymousValueRangeSolution.java | 0 .../TestdataEntityProvidingEntity.java | 0 .../TestdataEntityProvidingSolution.java | 0 .../impl/testdata/util/CodeAssertable.java | 0 .../util/CodeAssertableArrayList.java | 0 .../impl/testdata/util/PlannerAssert.java | 0 .../impl/testdata/util/PlannerTestUtils.java | 0 .../core/impl/testutil/TestMeterRegistry.java | 0 .../solver/core/impl/testutil/TestRandom.java | 0 .../core/impl/util/ElementAwareListTest.java | 0 .../util/ListBasedScalingOrderedSetTest.java | 0 .../solver/core/impl/util/MathUtilsTest.java | 0 .../solver/core/impl/util/MutableIntTest.java | 0 .../core/impl/util/MutableLongTest.java | 0 .../classloaderTestdataSolverConfig.xml | 0 .../core/api/solver/invalidSolverConfig.xml | 0 .../testdataOverconstrainedSolverConfig.xml | 0 .../solver/testdataShadowedSolverConfig.xml | 0 .../core/api/solver/testdataSolverConfig.xml | 0 ...SolverConfigWithNonexistentCustomPhase.xml | 0 .../solver/testSolverConfigWithNamespace.xml | 0 .../testSolverConfigWithoutNamespace.xml | 0 .../config/solver/testdataSolverConfig.xml | 0 .../test/resources/junit-platform.properties | 0 .../src/test/resources/logback-test.xml | 0 .../org.mockito.plugins.MockMaker | 0 .../upgrade-to-latest-version.adoc | 28 +++ examples/pom.xml | 15 +- migration/pom.xml | 2 +- persistence/common/pom.xml | 6 +- .../src/test/resources/logback-test.xml | 2 +- persistence/jackson/pom.xml | 4 +- .../stream/common/SequenceRoundTripTest.java | 2 +- .../src/test/resources/logback-test.xml | 2 +- persistence/jaxb/pom.xml | 4 +- .../jaxb/src/test/resources/logback-test.xml | 2 +- persistence/jpa/pom.xml | 2 +- .../jpa/src/test/resources/logback-test.xml | 2 +- persistence/jsonb/pom.xml | 4 +- .../jsonb/src/test/resources/logback-test.xml | 2 +- .../quarkus/deployment/pom.xml | 2 +- .../quarkus/deployment/TimefoldProcessor.java | 30 +-- .../src/test/resources/logback-test.xml | 2 +- .../TimefoldDevUIPropertiesRPCService.java | 2 +- .../spring-boot-autoconfigure/pom.xml | 3 +- .../TimefoldSolverBannerBean.java | 2 +- test/pom.xml | 9 +- .../AbstractConstraintVerification.java | 2 +- .../stream/ConfiguredConstraintVerifier.java | 2 +- .../DefaultMultiConstraintVerification.java | 2 +- .../DefaultSingleConstraintAssertion.java | 6 +- .../DefaultSingleConstraintVerification.java | 2 +- .../stream/ScoreDirectorFactoryCache.java | 42 +--- .../stream/SessionBasedAssertionBuilder.java | 4 +- test/src/test/resources/logback-test.xml | 2 +- 1913 files changed, 2553 insertions(+), 3173 deletions(-) delete mode 100644 core/constraint-streams/pom.xml delete mode 100644 core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactory.java delete mode 100644 core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactoryService.java delete mode 100644 core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/TupleSource.java delete mode 100644 core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/package-info.java delete mode 100644 core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/AbstractConstraintStreamScoreDirectorFactoryService.java delete mode 100644 core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/DefaultJoinerService.java delete mode 100644 core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService delete mode 100644 core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.stream.JoinerService delete mode 100644 core/constraint-streams/src/test/java/ai/timefold/solver/constraint/streams/bavet/ScoreDirectorFactoryFactoryTest.java delete mode 100644 core/core-impl/pom.xml delete mode 100644 core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java delete mode 100644 core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryService.java delete mode 100644 core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorType.java delete mode 100644 core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactoryService.java delete mode 100644 core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactoryService.java delete mode 100644 core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerService.java delete mode 100644 core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerSupport.java delete mode 100644 core/core-impl/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService delete mode 100644 core/core/pom.xml rename core/{core-impl => }/src/build/revapi-differences.json (100%) rename core/{core-impl => }/src/build/revapi-filter.json (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/autodiscover/AutoDiscoverMemberType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/common/DomainAccessType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/common/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfiguration.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfigurationProvider.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintWeight.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/entity/PinningFilter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningEntity.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPin.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPinToIndex.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/entity/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/lookup/LookUpStrategyType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/lookup/PlanningId.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityCollectionProperty.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityProperty.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningSolution.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactCollectionProperty.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactProperty.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/DeepPlanningClone.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/SolutionCloner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/solution/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/valuerange/CountableValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeProvider.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/valuerange/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/AbstractVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/AnchorShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/CustomShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/IndexShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/InverseRelationShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/ListVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/NextElementShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/PiggybackShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningListVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableGraphType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableReference.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/PreviousElementShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/ShadowVariable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/VariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/domain/variable/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/PentaFunction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/PentaPredicate.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/QuadFunction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/QuadPredicate.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/ToIntQuadFunction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/ToIntTriFunction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/ToLongQuadFunction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/ToLongTriFunction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/TriConsumer.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/TriFunction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/TriPredicate.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/function/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/AbstractBendableScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/AbstractScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/IBendableScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/Score.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/ScoreExplanation.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/ScoreManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/analysis/ConstraintAnalysis.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/analysis/MatchAnalysis.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/analysis/ScoreAnalysis.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/BendableScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/BendableBigDecimalScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/BendableLongScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/HardMediumSoftScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/HardMediumSoftBigDecimalScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/HardMediumSoftLongScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/HardSoftScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/HardSoftBigDecimalScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/HardSoftLongScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/SimpleScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/SimpleBigDecimalScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/SimpleLongScore.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchAwareIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/calculator/EasyScoreCalculator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/calculator/IncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatch.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatchTotal.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintRef.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/constraint/Indictment.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/constraint/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/director/ScoreDirector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/Constraint.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintBuilder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintCollectors.java (99%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintJustification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintProvider.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStream.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStreamImplType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/DefaultConstraintJustification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/Joiners.java (90%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintBuilder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintCollector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintStream.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiJoiner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/bi/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/common/Break.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/common/Sequence.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/common/SequenceChain.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/penta/PentaJoiner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintBuilder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintCollector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintStream.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadJoiner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/quad/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintBuilder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintCollector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintStream.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriJoiner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/tri/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintBuilder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintCollector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintStream.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/score/stream/uni/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/ProblemFactChange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/ProblemSizeStatistics.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/RecommendedFit.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/ScoreAnalysisFetchPolicy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolutionManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolutionUpdatePolicy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/Solver.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolverConfigOverride.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolverFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolverJob.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolverJobBuilder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolverManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/SolverStatus.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChangeDirector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/event/BestSolutionChangedEvent.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/event/SolverEventListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/event/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/api/solver/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/AbstractConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicPhaseConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicForagerConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicPickEarlyType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/EntityPlacerConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/PooledEntityPlacerConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedEntityPlacerConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedValuePlacerConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchPhaseConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/NodeExplorationType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/SelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionCacheType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionOrder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/SelectionSorterOrder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionDistributionType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySorterManner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/PillarSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/SubPillarConfigPolicy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/DestinationSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/SubListSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/MoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/NearbyAutoConfigurationMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/CartesianProductMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/UnionMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveIteratorFactoryConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveListFactoryConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/AbstractPillarMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/ChangeMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarChangeMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarSwapMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SubPillarType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SwapMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/KOptMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainSwapMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/TailChainSwapMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListChangeMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListSwapMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListChangeMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListSwapMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/KOptListMoveSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSorterManner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/SubChainSelectorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchPhaseConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/AcceptorType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/LocalSearchAcceptorConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/FinalistPodiumType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchForagerConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchPickEarlyType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/localsearch/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/partitionedsearch/PartitionedSearchPhaseConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/partitionedsearch/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/phase/NoChangePhaseConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/phase/PhaseConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/phase/custom/CustomPhaseConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/phase/custom/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/phase/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/score/definition/ScoreDefinitionType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/score/definition/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/score/director/ScoreDirectorFactoryConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/score/director/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/score/trend/InitializingScoreTrendLevel.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/score/trend/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/EnvironmentMode.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/SolverConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/SolverManagerConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/monitoring/MonitoringConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/monitoring/SolverMetric.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/monitoring/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/random/RandomType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/random/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationCompositionStyle.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationConfig.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/solver/termination/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/config/util/ConfigUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java (87%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/AbstractFromConfigFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/ConstructionHeuristicPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseFactory.java (98%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/ConstructionHeuristicDecider.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/AbstractConstructionHeuristicForager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForagerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/DefaultConstructionHeuristicForager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListenerAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacer.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacer.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/Placement.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacer.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacer.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacer.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicMoveScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicPhaseScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicStepScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/AlphabeticMemberComparator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/ReflectionHelper.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/AbstractMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionBeanPropertyMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionFieldMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionMethodMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractGizmoMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadOnlyGizmoMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadWriteGizmoMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoClassLoader.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoFieldHandler.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorImplementor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberHandler.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberInfo.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMethodHandler.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintConfigurationDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintWeightDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/EntityDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/PlanningPinToIndexReader.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ClassAndPlanningIdComparator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/EqualsLookUpStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ImmutableLookUpStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyResolver.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/NoneLookUpStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/lookup/PlanningIdLookUpStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/policy/DescriptorPolicy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/score/descriptor/ScoreDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ConcurrentMemoization.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningFieldCloner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldAccessingSolutionCloner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldCloningUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ShallowCloningFieldCloner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoCloningUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionCloner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerImplementor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionOrEntityDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/DummyMemberAccessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/ProblemScaleTracker.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/solution/mutation/MutationCounter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractCountableValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractUncountableValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/bigdecimal/BigDecimalValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/biginteger/BigIntegerValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/collection/ListValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/CompositeCountableValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/EmptyValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/NullAllowingCountableValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primboolean/BooleanValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primdouble/DoubleValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primint/IntValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primlong/LongValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/temporal/TemporalValueRange.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractFromPropertyValueRangeDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractValueRangeDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/CompositeValueRangeDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/EntityIndependentValueRangeDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromEntityPropertyValueRangeDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromSolutionPropertyValueRangeDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/ValueRangeDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/util/ValueRangeIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/ExternalizedListVariableStateSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableElementStateSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/ExternalizedAnchorVariableSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/CustomShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/LegacyCustomShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/PiggybackShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/BasicVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/GenuineVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ListVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/VariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedCollectionInverseVariableSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedSingletonInverseVariableSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/InverseRelationShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/SourcedVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/VariableListenerWithSources.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotifiable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/BasicVariableNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ElementUnassignedNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityAddedNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotifiable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityRemovedNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableChangedNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableListenerNotifiable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notifiable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/NotifiableRegistry.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableChangedNotification.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerNotifiable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerSupport.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ListVariableTracker.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariableSnapshot.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariablesAssert.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/SolutionTracker.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableId.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshot.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshotTotal.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableTracker.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/AbstractNextPrevElementShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementShadowVariableDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementVariableListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/AbstractVariableDescriptorBasedDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Demand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Supply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/SupplyManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhaseFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/ExhaustiveSearchPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/decider/ExhaustiveSearchDecider.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/event/ExhaustiveSearchPhaseLifecycleListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchLayer.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchNode.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/ScoreBounder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/TrendBasedScoreBounder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/BreadthFirstNodeComparator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/DepthFirstNodeComparator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OptimisticBoundFirstNodeComparator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OriginalOrderNodeComparator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/ScoreFirstNodeComparator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchPhaseScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchStepScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/HeuristicConfigPolicy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractSimplifiedMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ChangeAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/CompositeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterAssignmentAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterChangeAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterUnassignmentAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeAssignmentAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeChangeAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeUnassignmentAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/Move.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/NoChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/RecordedUndoMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeRecordingScoreDirector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractDemandEnabledSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/IterableSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/ListIterableSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/Selector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleBridge.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/ComparatorSelectionSorter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/CompositeSelectionFilter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/FairSelectorProbabilityWeightFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionFilter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionProbabilityWeightFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorterWeightFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/WeightFactorySelectionSorter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalChangeIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalSwapIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomChangeIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomSwapIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/CachedListRandomIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/ListIterable.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionListIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SingletonIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionListIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/nearby/NearbyDistanceMeter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactory.java (99%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/FromSolutionEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/AbstractCachingEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/CachingEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/FilteringEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/PinEntityFilter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ProbabilityEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SelectedCountLimitEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ShufflingEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SortingEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/EntityMimicRecorder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/ManualEntityMimicRecorder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicRecordingEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicReplayingEntitySelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/DefaultPillarSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelectorFactory.java (97%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementDestinationSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocation.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocationRandomIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/LocationInList.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/RandomSubListSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubList.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactory.java (98%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/TriangleElementFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/TriangularNumbers.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/UnassignedLocation.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/mimic/MimicRecordingSubListSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/mimic/MimicReplayingSubListSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/mimic/SubListMimicRecorder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/AbstractMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/AbstractMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/DoableMoveSelectionFilter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/MoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/MoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/AbstractCompositeMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/BiasedRandomUnionMoveIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/CartesianProductMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/CartesianProductMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/CompositeMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/FixedSelectorProbabilityWeightFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/UniformRandomUnionMoveIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/UnionMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/UnionMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/AbstractCachingMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/CachingMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/FilteringMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/ProbabilityMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/SelectedCountLimitMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/ShufflingMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/SortingMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/factory/MoveIteratorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/factory/MoveIteratorFactoryFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/factory/MoveIteratorFactoryToMoveSelectorBridge.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/factory/MoveListFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/factory/MoveListFactoryFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/factory/MoveListFactoryToMoveSelectorBridge.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/ChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/ChangeMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/ChangeMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/GenericMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarChangeMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarChangeMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarDemand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarSwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarSwapMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarSwapMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/SwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/SwapMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/SwapMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/ChainedChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/ChainedSwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/KOptMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/KOptMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/KOptMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainReversingChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainReversingSwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/TailChainSwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/TailChainSwapMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/TailChainSwapMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListAssignMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListChangeMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListChangeMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListSwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListSwapMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListSwapMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListUnassignMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/OriginalListChangeIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/OriginalListSwapIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomListChangeIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomListSwapIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomSubListChangeMoveIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomSubListChangeMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomSubListSwapMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListConfigUtil.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListUnassignMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/EntityOrderInfo.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/FlipSublistAction.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptAffectedElements.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptCycle.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptDescriptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptListMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptListMoveIterator.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptListMoveSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptListMoveSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/MultipleDelegateList.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/TwoOptListMove.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/EntityIndependentValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/FromEntityPropertyValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/FromSolutionPropertyValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/ValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/ValueSelectorFactory.java (99%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/DefaultSubChainSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChain.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractCachingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractInverseEntityFilteringValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AssignedListValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/CachingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/DowncastingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityDependentSortingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentFilteringValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentInitializedValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/FilteringValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/InitializedValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/MovableChainedTrailingValueFilter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ProbabilityValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ReinitializeVariableValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SelectedCountLimitValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ShufflingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SortingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/UnassignedListValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicRecordingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicReplayingValueSelector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/ValueMimicRecorder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/ElementNamespaceOverride.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/GenericJaxbIO.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/JaxbIO.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/SolverConfigIO.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/TimefoldXmlSerializationException.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbCustomPropertiesAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbDurationAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbLocaleAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbOffsetDateTimeAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java (99%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/LocalSearchPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/LocalSearchDecider.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AbstractAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/Acceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AcceptorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/CompositeAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/hillclimbing/HillClimbingAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/lateacceptance/LateAcceptanceAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/AbstractTabuAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/EntityTabuAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/MoveTabuAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/ValueTabuAcceptor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/AbstractTabuSizeStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/EntityRatioTabuSizeStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/FixedTabuSizeStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/TabuSizeStrategy.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AbstractLocalSearchForager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AcceptedLocalSearchForager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForagerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/AbstractFinalistPodium.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/FinalistPodium.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/HighestScoreFinalistPodium.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/StrategicOscillationByLevelFinalistPodium.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListenerAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchMoveScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchPhaseScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchStepScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/package-info.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/DefaultPartitionedSearchPhaseFactory.java (89%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/PartitionedSearchPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/partitioner/SolutionPartitioner.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhaseFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhaseFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/Phase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/PhaseFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhaseCommand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhase.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhaseFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/custom/NoChangeCustomPhaseCommand.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomPhaseScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomStepScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListenerAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleSupport.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractMoveScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractPhaseScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractStepScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreExplanation.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/ScoreUtil.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableBigDecimalScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableLongScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftBigDecimalScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftLongScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftBigDecimalScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftLongScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleBigDecimalScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleLongScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultConstraintMatchTotal.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultIndictment.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractBendableScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/definition/ScoreDefinition.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirectorFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactory.java (100%) create mode 100644 core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorAwareScoreDirector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorCache.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java (98%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactory.java (57%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirector.java (99%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java (57%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet => src/main/java/ai/timefold/solver/core/impl/score/director/stream}/BavetConstraintStreamScoreDirector.java (98%) create mode 100644 core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirectorFactory.java rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerType.java (100%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetConstraint.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetConstraintFactory.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetConstraintSession.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetConstraintSessionFactory.java (86%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/AbstractGroupBiNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetAbstractBiConstraintStream.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetBiGroupBiConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetBiMapBiConstraintStream.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetConcatBiConstraintStream.java (86%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetFilterBiConstraintStream.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetFlattenLastBiConstraintStream.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetIfExistsBiConstraintStream.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetJoinBiConstraintStream.java (86%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetQuadGroupBiConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetQuadMapBiConstraintStream.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetScoringBiConstraintStream.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetTriGroupBiConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetTriMapBiConstraintStream.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetUniGroupBiConstraintStream.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetUniMapBiConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BiScorer.java (67%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/ConcatBiBiNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/ConcatBiUniNode.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/ConcatUniBiNode.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/ConditionalBiTupleLifecycle.java (61%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/FlattenLastBiNode.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group0Mapping1CollectorBiNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group0Mapping2CollectorBiNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group0Mapping3CollectorBiNode.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group0Mapping4CollectorBiNode.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group1Mapping0CollectorBiNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group1Mapping1CollectorBiNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group1Mapping2CollectorBiNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group1Mapping3CollectorBiNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group2Mapping0CollectorBiNode.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group2Mapping1CollectorBiNode.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group2Mapping2CollectorBiNode.java (70%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group3Mapping0CollectorBiNode.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group3Mapping1CollectorBiNode.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/Group4Mapping0CollectorBiNode.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/IndexedIfExistsBiNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/IndexedJoinBiNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/MapBiToBiNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/MapBiToQuadNode.java (84%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/MapBiToTriNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/MapBiToUniNode.java (73%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/UnindexedIfExistsBiNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/UnindexedJoinBiNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractConcatNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractFlattenLastNode.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractGroupNode.java (97%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractIfExistsNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractIndexedIfExistsNode.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractIndexedJoinNode.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractJoinNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractMapNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractNode.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractPropagationMetadataCarrier.java (69%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractScorer.java (86%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractUnindexedIfExistsNode.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/AbstractUnindexedJoinNode.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/BavetAbstractConstraintStream.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/BavetConcatConstraintStream.java (66%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/BavetIfExistsConstraintStream.java (63%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/BavetJoinConstraintStream.java (72%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/BavetScoringConstraintStream.java (65%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/BavetStreamBinaryOperation.java (68%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/DynamicPropagationQueue.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/ExistsCounter.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/Group.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/GroupNodeConstructor.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/GroupNodeConstructorWithAccumulate.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/GroupNodeConstructorWithoutAccumulate.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/NodeBuildHelper.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/PropagationQueue.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/Propagator.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/StaticPropagationQueue.java (93%) create mode 100644 core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/TupleSource.java rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetAftBridgeBiConstraintStream.java (74%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetAftBridgeQuadConstraintStream.java (74%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetAftBridgeTriConstraintStream.java (74%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetAftBridgeUniConstraintStream.java (74%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetForeBridgeBiConstraintStream.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetForeBridgeQuadConstraintStream.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetForeBridgeTriConstraintStream.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/BavetForeBridgeUniConstraintStream.java (72%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/bridge/package-info.java (67%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/ComparisonIndexer.java (64%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/EqualsIndexer.java (97%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/IndexProperties.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/Indexer.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/IndexerFactory.java (74%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/IndexerKey.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/ManyIndexProperties.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/NoneIndexProperties.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/NoneIndexer.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/SingleIndexProperties.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/ThreeIndexProperties.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/TwoIndexProperties.java (84%) create mode 100644 core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/package-info.java rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/package-info.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/AbstractConditionalTupleLifecycle.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/AbstractTuple.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/AggregatedTupleLifecycle.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/BiTuple.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/LeftTupleLifecycle.java (72%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/LeftTupleLifecycleImpl.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/QuadTuple.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/RightTupleLifecycle.java (72%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/RightTupleLifecycleImpl.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/TriTuple.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/TupleLifecycle.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/TupleState.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/tuple/UniTuple.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/AbstractGroupQuadNode.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetAbstractQuadConstraintStream.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetBiGroupQuadConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetBiMapQuadConstraintStream.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetConcatQuadConstraintStream.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetFilterQuadConstraintStream.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetFlattenLastQuadConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetIfExistsQuadConstraintStream.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetJoinQuadConstraintStream.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetQuadGroupQuadConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetQuadMapQuadConstraintStream.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetScoringQuadConstraintStream.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetTriGroupQuadConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetTriMapQuadConstraintStream.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetUniGroupQuadConstraintStream.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetUniMapQuadConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConcatBiQuadNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConcatQuadBiNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConcatQuadQuadNode.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConcatQuadTriNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConcatQuadUniNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConcatTriQuadNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConcatUniQuadNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/ConditionalQuadTupleLifecycle.java (65%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/FlattenLastQuadNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group0Mapping1CollectorQuadNode.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group0Mapping2CollectorQuadNode.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group0Mapping3CollectorQuadNode.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group0Mapping4CollectorQuadNode.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group1Mapping0CollectorQuadNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group1Mapping1CollectorQuadNode.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group1Mapping2CollectorQuadNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group1Mapping3CollectorQuadNode.java (70%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group2Mapping0CollectorQuadNode.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group2Mapping1CollectorQuadNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group2Mapping2CollectorQuadNode.java (71%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group3Mapping0CollectorQuadNode.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group3Mapping1CollectorQuadNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/Group4Mapping0CollectorQuadNode.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/IndexedIfExistsQuadNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/IndexedJoinQuadNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/MapQuadToBiNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/MapQuadToQuadNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/MapQuadToTriNode.java (84%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/MapQuadToUniNode.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/QuadScorer.java (69%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/UnindexedIfExistsQuadNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/UnindexedJoinQuadNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/AbstractGroupTriNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetAbstractTriConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetBiGroupTriConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetBiMapTriConstraintStream.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetConcatTriConstraintStream.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetFilterTriConstraintStream.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetFlattenLastTriConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetIfExistsTriConstraintStream.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetJoinTriConstraintStream.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetQuadGroupTriConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetQuadMapTriConstraintStream.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetScoringTriConstraintStream.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetTriGroupTriConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetTriMapTriConstraintStream.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetUniGroupTriConstraintStream.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetUniMapTriConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/ConcatBiTriNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/ConcatTriBiNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/ConcatTriTriNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/ConcatTriUniNode.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/ConcatUniTriNode.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/ConditionalTriTupleLifecycle.java (63%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/FlattenLastTriNode.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group0Mapping1CollectorTriNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group0Mapping2CollectorTriNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group0Mapping3CollectorTriNode.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group0Mapping4CollectorTriNode.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group1Mapping0CollectorTriNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group1Mapping1CollectorTriNode.java (74%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group1Mapping2CollectorTriNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group1Mapping3CollectorTriNode.java (72%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group2Mapping0CollectorTriNode.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group2Mapping1CollectorTriNode.java (76%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group2Mapping2CollectorTriNode.java (71%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group3Mapping0CollectorTriNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group3Mapping1CollectorTriNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/Group4Mapping0CollectorTriNode.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/IndexedIfExistsTriNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/IndexedJoinTriNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/MapTriToBiNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/MapTriToQuadNode.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/MapTriToTriNode.java (86%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/MapTriToUniNode.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/TriScorer.java (68%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/UnindexedIfExistsTriNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/UnindexedJoinTriNode.java (79%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/AbstractForEachUniNode.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/AbstractGroupUniNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetAbstractUniConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetBiGroupUniConstraintStream.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetBiMapUniConstraintStream.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetConcatUniConstraintStream.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetFilterUniConstraintStream.java (87%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetFlattenLastUniConstraintStream.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetForEachUniConstraintStream.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetIfExistsUniConstraintStream.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetQuadGroupUniConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetQuadMapUniConstraintStream.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetScoringUniConstraintStream.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetTriGroupUniConstraintStream.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetTriMapUniConstraintStream.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetUniGroupUniConstraintStream.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetUniMapUniConstraintStream.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/ConcatUniUniNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/ConditionalUniTupleLifecycle.java (59%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/FlattenLastUniNode.java (74%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/ForEachExcludingUnassignedUniNode.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/ForEachIncludingUnassignedUniNode.java (73%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group0Mapping1CollectorUniNode.java (82%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group0Mapping2CollectorUniNode.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group0Mapping3CollectorUniNode.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group0Mapping4CollectorUniNode.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group1Mapping0CollectorUniNode.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group1Mapping1CollectorUniNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group1Mapping2CollectorUniNode.java (78%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group1Mapping3CollectorUniNode.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group2Mapping0CollectorUniNode.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group2Mapping1CollectorUniNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group2Mapping2CollectorUniNode.java (73%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group3Mapping0CollectorUniNode.java (84%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group3Mapping1CollectorUniNode.java (81%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/Group4Mapping0CollectorUniNode.java (86%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/IndexedIfExistsUniNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/MapUniToBiNode.java (77%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/MapUniToQuadNode.java (83%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/MapUniToTriNode.java (80%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/MapUniToUniNode.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/UniScorer.java (66%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/UnindexedIfExistsUniNode.java (81%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/BreakImpl.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ComparableValue.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ConsecutiveSetTree.java (99%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/CustomCollectionUndoableActionable.java (94%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/IntAverageCalculator.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/IntCalculator.java (74%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/IntCounter.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/IntDistinctCountCalculator.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/IntSumCalculator.java (84%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ListUndoableActionable.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/LongAverageCalculator.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/LongCalculator.java (75%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/LongCounter.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/LongDistinctCountCalculator.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/LongSumCalculator.java (84%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/MapUndoableActionable.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/MinMaxUndoableActionable.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ObjectCalculator.java (83%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ReferenceAverageCalculator.java (97%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ReferenceSumCalculator.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/SequenceCalculator.java (94%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/SequenceImpl.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/SetUndoableActionable.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/SortedSetUndoableActionable.java (94%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ToMapPerKeyCounter.java (95%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ToMapResultContainer.java (83%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ToMultiMapResultContainer.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/ToSimpleMapResultContainer.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/UndoableActionable.java (83%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/AndThenBiCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/AverageIntBiCollector.java (74%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/AverageLongBiCollector.java (74%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/AverageReferenceBiCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ComposeFourBiCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ComposeThreeBiCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ComposeTwoBiCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ConditionalBiCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ConsecutiveSequencesBiConstraintCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/CountDistinctIntBiCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/CountDistinctLongBiCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/CountIntBiCollector.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/CountLongBiCollector.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/InnerBiConstraintCollectors.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/IntCalculatorBiCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/LongCalculatorBiCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/MaxComparableBiCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/MaxComparatorBiCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/MaxPropertyBiCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/MinComparableBiCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/MinComparatorBiCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/MinPropertyBiCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ObjectCalculatorBiCollector.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/SumIntBiCollector.java (73%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/SumLongBiCollector.java (73%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/SumReferenceBiCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ToCollectionBiCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ToListBiCollector.java (77%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ToMultiMapBiCollector.java (93%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ToSetBiCollector.java (77%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ToSimpleMapBiCollector.java (93%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/ToSortedSetComparatorBiCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/UndoableActionableBiCollector.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/AndThenQuadCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/AverageIntQuadCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/AverageLongQuadCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/AverageReferenceQuadCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ComposeFourQuadCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ComposeThreeQuadCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ComposeTwoQuadCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ConditionalQuadCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ConsecutiveSequencesQuadConstraintCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/CountDistinctIntQuadCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/CountDistinctLongQuadCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/CountIntQuadCollector.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/CountLongQuadCollector.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/InnerQuadConstraintCollectors.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/IntCalculatorQuadCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/LongCalculatorQuadCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/MaxComparableQuadCollector.java (80%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/MaxComparatorQuadCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/MaxPropertyQuadCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/MinComparableQuadCollector.java (80%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/MinComparatorQuadCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/MinPropertyQuadCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ObjectCalculatorQuadCollector.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/SumIntQuadCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/SumLongQuadCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/SumReferenceQuadCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ToCollectionQuadCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ToListQuadCollector.java (79%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ToMultiMapQuadCollector.java (94%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ToSetQuadCollector.java (79%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ToSimpleMapQuadCollector.java (94%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/ToSortedSetComparatorQuadCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/UndoableActionableQuadCollector.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/AndThenTriCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/AverageIntTriCollector.java (75%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/AverageLongTriCollector.java (75%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/AverageReferenceTriCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ComposeFourTriCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ComposeThreeTriCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ComposeTwoTriCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ConditionalTriCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ConsecutiveSequencesTriConstraintCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/CountDistinctIntTriCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/CountDistinctLongTriCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/CountIntTriCollector.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/CountLongTriCollector.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/InnerTriConstraintCollectors.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/IntCalculatorTriCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/LongCalculatorTriCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/MaxComparableTriCollector.java (79%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/MaxComparatorTriCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/MaxPropertyTriCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/MinComparableTriCollector.java (79%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/MinComparatorTriCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/MinPropertyTriCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ObjectCalculatorTriCollector.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/SumIntTriCollector.java (75%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/SumLongTriCollector.java (75%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/SumReferenceTriCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ToCollectionTriCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ToListTriCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ToMultiMapTriCollector.java (94%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ToSetTriCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ToSimpleMapTriCollector.java (94%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/ToSortedSetComparatorTriCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/UndoableActionableTriCollector.java (92%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/AndThenUniCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/AverageIntUniCollector.java (73%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/AverageLongUniCollector.java (73%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/AverageReferenceUniCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ComposeFourUniCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ComposeThreeUniCollector.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ComposeTwoUniCollector.java (97%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ConditionalUniCollector.java (96%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ConsecutiveSequencesUniConstraintCollector.java (88%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/CountDistinctIntUniCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/CountDistinctLongUniCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/CountIntUniCollector.java (87%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/CountLongUniCollector.java (87%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/InnerUniConstraintCollectors.java (98%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/IntCalculatorUniCollector.java (90%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/LongCalculatorUniCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/MaxComparableUniCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/MaxComparatorUniCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/MaxPropertyUniCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/MinComparableUniCollector.java (78%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/MinComparatorUniCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/MinPropertyUniCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ObjectCalculatorUniCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/SumIntUniCollector.java (72%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/SumLongUniCollector.java (72%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/SumReferenceUniCollector.java (91%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ToCollectionUniCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ToListUniCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ToMultiMapUniCollector.java (93%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ToSetUniCollector.java (76%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ToSimpleMapUniCollector.java (93%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/ToSortedSetComparatorUniCollector.java (89%) rename core/{core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream => src/main/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/UndoableActionableUniCollector.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractConstraint.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractConstraintBuilder.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractConstraintStream.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractConstraintStreamScoreDirectorFactory.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractJoiner.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/ConstraintConstructor.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/InnerConstraintFactory.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/RetrievalSemantics.java (97%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/ScoreImpactType.java (54%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/bi/BiConstraintBuilderImpl.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/bi/BiConstraintConstructor.java (73%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/bi/BiJoinerComber.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/bi/DefaultBiJoiner.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/bi/FilteringBiJoiner.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/bi/InnerBiConstraintStream.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/AbstractScoreInliner.java (99%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableBigDecimalScoreContext.java (97%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableBigDecimalScoreInliner.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableLongScoreContext.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableLongScoreInliner.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableScoreContext.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableScoreInliner.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BigDecimalWeightedScoreImpacter.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/ConstraintMatchSupplier.java (99%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftBigDecimalScoreContext.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftBigDecimalScoreInliner.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftLongScoreContext.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftLongScoreInliner.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftScoreContext.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftScoreInliner.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftBigDecimalScoreContext.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftBigDecimalScoreInliner.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftLongScoreContext.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftLongScoreInliner.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftScoreContext.java (93%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftScoreInliner.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/IntWeightedScoreImpacter.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/LongWeightedScoreImpacter.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/ScoreContext.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleBigDecimalScoreContext.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleBigDecimalScoreInliner.java (89%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleLongScoreContext.java (86%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleLongScoreInliner.java (90%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleScoreContext.java (85%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleScoreInliner.java (88%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/UndoScoreImpacter.java (54%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/WeightedScoreImpacter.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/penta/DefaultPentaJoiner.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/penta/FilteringPentaJoiner.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/penta/PentaJoinerComber.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/quad/DefaultQuadJoiner.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/quad/FilteringQuadJoiner.java (95%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/quad/InnerQuadConstraintStream.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/quad/QuadConstraintBuilderImpl.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/quad/QuadConstraintConstructor.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/quad/QuadJoinerComber.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/tri/DefaultTriJoiner.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/tri/FilteringTriJoiner.java (94%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/tri/InnerTriConstraintStream.java (97%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/tri/TriConstraintBuilderImpl.java (92%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/tri/TriConstraintConstructor.java (75%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/tri/TriJoinerComber.java (98%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/uni/InnerUniConstraintStream.java (96%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/uni/UniConstraintBuilderImpl.java (91%) rename core/{constraint-streams/src/main/java/ai/timefold/solver/constraint/streams => src/main/java/ai/timefold/solver/core/impl/score/stream}/common/uni/UniConstraintConstructor.java (71%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/score/trend/InitializingScoreTrend.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/AbstractSolver.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/BestSolutionContainingProblemChanges.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/BestSolutionHolder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/ClassInstanceCache.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/ConsumerSupport.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/DefaultRecommendedFit.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/DefaultSolutionManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/DefaultSolver.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/DefaultSolverFactory.java (99%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/DefaultSolverJob.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/DefaultSolverJobBuilder.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/DefaultSolverManager.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/FitProcessor.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/Fitter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/change/DefaultProblemChangeDirector.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/change/ProblemChangeAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/event/AbstractEventSupport.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/event/SolverEventSupport.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/event/SolverLifecycleListener.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/event/SolverLifecycleListenerAdapter.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/exception/UndoScoreCorruptionException.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/random/DefaultRandomFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/random/RandomFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/random/RandomUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/recaller/BestSolutionRecaller.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/recaller/BestSolutionRecallerFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/scope/SolverScope.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/AbstractCompositeTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/AbstractTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/AndCompositeTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/BasicPlumbingTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/BestScoreFeasibleTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/BestScoreTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/ChildThreadPlumbingTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/OrCompositeTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/PhaseToSolverTerminationBridge.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/ScoreCalculationCountTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/StepCountTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/Termination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/TerminationFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/TimeMillisSpentTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/UnimprovedStepCountTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/UnimprovedTimeMillisSpentScoreDifferenceThresholdTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/termination/UnimprovedTimeMillisSpentTermination.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/thread/ChildThreadType.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/thread/DefaultSolverThreadFactory.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/solver/thread/ThreadUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/BestScoreStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/BestSolutionMutationCountStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/MemoryUseStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/PickedMoveBestScoreDiffStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/PickedMoveStepScoreDiffStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/SolverScopeStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/SolverStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/statistic/StatelessSolverStatistic.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/CollectionUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/ConstantLambdaUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/ElementAwareList.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/ElementAwareListEntry.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/ListBasedScalingOrderedSet.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/MathUtils.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/MemoizingSupply.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/MutableInt.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/MutableLong.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/MutablePair.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/MutableReference.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/Pair.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/Quadruple.java (100%) rename core/{core-impl => }/src/main/java/ai/timefold/solver/core/impl/util/Triple.java (100%) rename core/{core-impl => }/src/main/resources/ai/timefold/solver/core/impl/io/jaxb/removeNamespaces.xslt (100%) rename core/{core-impl => }/src/main/resources/solver.xsd (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/domain/solution/cloner/CustomSolutionClonerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/domain/valuerange/AnonymousValueRangeFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/ScoreManagerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/analysis/ScoreAnalysisTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/AbstractScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/bendable/BendableScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/BendableBigDecimalScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/bendablelong/BendableLongScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/HardMediumSoftScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/HardMediumSoftBigDecimalScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/HardMediumSoftLongScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/hardsoft/HardSoftScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/HardSoftBigDecimalScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/HardSoftLongScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/simple/SimpleScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/SimpleBigDecimalScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/buildin/simplelong/SimpleLongScoreTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatchTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/solver/DivertingClassLoader.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/solver/ProblemSizeStatisticsTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/solver/SolutionManagerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/solver/SolverFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/api/solver/SolverManagerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/SubPillarConfigPolicyTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/heuristic/selector/move/MoveSelectorConfigTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarSwapMoveSelectorConfigTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/localsearch/LocalSearchPhaseConfigTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/phase/custom/CustomPhaseConfigTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/EnvironmentModeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/SolverConfigTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/termination/TerminationConfigTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/MockThreadFactory.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/calculator/AbstractTestdataDifferentValuesCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/calculator/TestdataCorruptedDifferentValuesCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/calculator/TestdataDifferentValuesCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedmove/AbstractTestdataMove.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedmove/TestdataCorruptedEntityUndoMove.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedmove/TestdataCorruptedUndoMove.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedmove/factory/AbstractTestdataCorruptedUndoMoveTotalMappingFactory.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedmove/factory/TestdataCorruptedEntityUndoMoveFactory.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedmove/factory/TestdataCorruptedUndoMoveFactory.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedundoshadow/CorruptedUndoShadowEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedundoshadow/CorruptedUndoShadowEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedundoshadow/CorruptedUndoShadowSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedundoshadow/CorruptedUndoShadowValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/solver/testutil/corruptedundoshadow/CorruptedUndoShadowVariableListener.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/config/util/ConfigUtilsTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseServiceTest.java (73%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/DefaultConstructionHeuristicForagerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/placer/entity/PlacementAssertions.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/placer/entity/PooledEntityPlacerFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/placer/entity/PooledEntityPlacerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/placer/entity/QueuedEntityPlacerFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/placer/entity/QueuedEntityPlacerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/placer/entity/QueuedValuePlacerFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/constructionheuristic/placer/entity/QueuedValuePlacerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionBeanPropertyMemberAccessorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionFieldMemberAccessorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorImplementorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberDescriptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintWeightDescriptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/entity/descriptor/EntityDescriptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/AbstractLookupTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/ClassAndPlanningIdComparatorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/LookUpManagerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyEqualityTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyIdOrFailTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyIdOrNoneTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyImmutableTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyNoneTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/score/descriptor/ScoreDescriptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/solution/cloner/AbstractSolutionClonerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldAccessingSolutionClonerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/solution/mutation/MutationCounterTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/bigdecimal/BigDecimalValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/biginteger/BigIntegerValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/collection/ListValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/CompositeCountableValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/EmptyValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/NullAllowingCountableValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primboolean/BooleanValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primdouble/DoubleValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primint/IntValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primlong/LongValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/temporal/TemporalValueRangeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/ExternalizedListVariableStateSupplyTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/ListVariableListenerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableListenerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/anchor/ExternalizedAnchorVariableSupplyTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/custom/CustomVariableListenerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/descriptor/GenuineVariableDescriptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ListVariableDescriptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableListenerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableListenerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedCollectionInverseVariableSupplyTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedSingletonInverseVariableSupplyTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableListenerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableListenerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerSupportTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/AllVariablesAssertTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ListVariableTrackerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/NormalVariableTrackerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariablesAssertTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/SolutionTrackerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/BlackBoxExhaustiveSearchPhaseTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/BruteForceTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhaseTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/AbstractNodeComparatorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/BreadthFirstNodeComparatorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/DepthFirstNodeComparatorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OptimisticBoundFirstNodeComparatorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/ScoreFirstNodeComparatorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchPhaseScopeTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/HeuristicConfigPolicyTestUtils.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/move/CompositeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/move/DummyMove.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/move/NoChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/move/NotDoableDummyMove.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/SelectorTestUtils.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/ComparatorSelectionSorterTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/WeightFactorySelectionSorterTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/FromSolutionEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/CachingEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/FilteringEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ProbabilityEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SelectedCountLimitEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ShufflingEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SortingEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicReplayingEntitySelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/DefaultPillarSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementDestinationSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/list/RandomSubListSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/list/TriangleElementFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/list/TriangularNumbersTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/MoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/CartesianProductMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/composite/UnionMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/CachingMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/FilteringMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/ProbabilityMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/SelectedCountLimitMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/ShufflingMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/decorator/SortingMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/ChangeMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/ChangeMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/ChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarDemandTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/PillarSwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/SwapMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/SwapMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/SwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/ChainedChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/ChainedSwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/KOptMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainReversingChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainReversingSwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/SubChainSwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/chained/TailChainSwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListAssignMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListChangeMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListChangeMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListSwapMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListSwapMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListSwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/ListUnassignMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/OriginalListChangeIteratorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/OriginalListSwapIteratorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomListChangeIteratorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomListSwapIteratorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomSubListChangeMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/RandomSubListSwapMoveSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListChangeMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMoveSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/SubListSwapMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptListMoveIteratorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptListMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/KOptUtilsTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/MultipleDelegateListTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/move/generic/list/kopt/TwoOptListMoveTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/ValueSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/DefaultSubChainSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/CachingValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentFilteringValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/FilteringValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/InitializedValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/MovableChainedTrailingValueFilterTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ReinitializeVariableValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SelectedCountLimitValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SortingValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/UnassignedListValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/ManualValueMimicRecorder.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicReplayingValueSelectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/io/jaxb/GenericJaxbIOTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbCustomPropertiesAdapterTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbDurationAdapterTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbOffsetDateTimeAdapterTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AbstractAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AcceptorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/composite/CompositeAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/hillclimbing/HillClimbingAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/lateacceptance/LateAcceptanceAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/EntityTabuAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/ValueTabuAcceptorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/EntityRatioTabuSizeStrategyTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/FixedTabuSizeStrategyTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AcceptedLocalSearchForagerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/StrategicOscillationByLevelFinalistPodiumTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/phase/NoChangePhaseTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/phase/PhaseLifecycleTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/DummySimpleScoreEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/BendableBigDecimalScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/BendableLongScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/BendableScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftBigDecimalScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftLongScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/HardSoftBigDecimalScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/HardSoftLongScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/HardSoftScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/SimpleBigDecimalScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/SimpleLongScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/buildin/SimpleScoreDefinitionTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/constraint/DefaultConstraintMatchTotalTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/constraint/DefaultIndictmentTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirectorSemanticsTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactoryTest.java (89%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorSemanticsTest.java (93%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorSemanticsTest.java (91%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorTest.java (96%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams/bavet => src/test/java/ai/timefold/solver/core/impl/score/director/stream}/ConstraintStreamsBavetScoreDirectorSemanticsTest.java (90%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetAdvancedGroupByConstraintStreamTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetConstraintStreamImplSupport.java (86%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetFactChangePropagationTest.java (64%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetRegressionTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/BavetSolutionManagerTest.java (88%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetBiConstraintStreamNodeSharingTest.java (52%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/bi/BavetBiConstraintStreamTest.java (50%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/AbstractIndexerTest.java (93%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/EqualsAndComparisonIndexerTest.java (92%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/EqualsIndexerTest.java (80%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/common/index/NoneIndexerTest.java (94%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetQuadConstraintStreamNodeSharingTest.java (52%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/quad/BavetQuadConstraintStreamTest.java (50%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetTriConstraintStreamNodeSharingTest.java (52%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/tri/BavetTriConstraintStreamTest.java (50%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetUniConstraintStreamNodeSharingTest.java (52%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/BavetUniConstraintStreamTest.java (50%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/bavet/uni/FlattenLastUniNodeTest.java (94%) rename core/{core-impl/src/test/java/ai/timefold/solver/core/impl/score/stream => src/test/java/ai/timefold/solver/core/impl/score/stream/collector}/AbstractConstraintCollectorsTest.java (97%) rename core/{core-impl/src/test/java/ai/timefold/solver/core/impl/score/stream => src/test/java/ai/timefold/solver/core/impl/score/stream/collector}/ConsecutiveSetTreeTest.java (99%) rename core/{core-impl/src/test/java/ai/timefold/solver/core/impl/score/stream => src/test/java/ai/timefold/solver/core/impl/score/stream/collector}/IterableList.java (94%) rename core/{core-impl/src/test/java/ai/timefold/solver/core/impl/score/stream => src/test/java/ai/timefold/solver/core/impl/score/stream/collector}/bi/InnerBiConstraintCollectorsTest.java (99%) rename core/{core-impl/src/test/java/ai/timefold/solver/core/impl/score/stream => src/test/java/ai/timefold/solver/core/impl/score/stream/collector}/quad/InnerQuadConstraintCollectorsTest.java (99%) rename core/{core-impl/src/test/java/ai/timefold/solver/core/impl/score/stream => src/test/java/ai/timefold/solver/core/impl/score/stream/collector}/tri/InnerTriConstraintCollectorsTest.java (99%) rename core/{core-impl/src/test/java/ai/timefold/solver/core/impl/score/stream => src/test/java/ai/timefold/solver/core/impl/score/stream/collector}/uni/InnerUniConstraintCollectorsTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractAdvancedGroupByConstraintStreamTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractConstraintStreamTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractFactChangePropagationTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/AbstractSolutionManagerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/ConstraintStreamFunctionalTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/ConstraintStreamImplSupport.java (92%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/ConstraintStreamNodeSharingTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/ConstraintStreamTestExtension.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/JoinerTypeTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/JoinersTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/bi/AbstractBiConstraintStreamNodeSharingTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/bi/AbstractBiConstraintStreamTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/AbstractScoreInlinerTest.java (92%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableBigDecimalScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableLongScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/BendableScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftBigDecimalScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftLongScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardMediumSoftScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftBigDecimalScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftLongScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/HardSoftScoreInlinerTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleBigDecimalScoreInlinerTest.java (97%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleLongScoreInlinerTest.java (96%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/inliner/SimpleScoreInlinerTest.java (96%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/quad/AbstractQuadConstraintStreamNodeSharingTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/quad/AbstractQuadConstraintStreamTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/tri/AbstractTriConstraintStreamNodeSharingTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/tri/AbstractTriConstraintStreamTest.java (99%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/uni/AbstractUniConstraintStreamNodeSharingTest.java (98%) rename core/{constraint-streams/src/test/java/ai/timefold/solver/constraint/streams => src/test/java/ai/timefold/solver/core/impl/score/stream}/common/uni/AbstractUniConstraintStreamTest.java (99%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/score/trend/InitializingScoreTrendTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/AllowsUnassignedValuesListVariableSolverTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/BestSolutionHolderTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/ConsumerSupportTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/DefaultSolverFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/DefaultSolverTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/change/DefaultProblemChangeDirectorTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/random/RandomUtilsTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/recaller/BestSolutionRecallerTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/AndCompositeTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/BasicPlumbingTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/BestScoreFeasibleTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/BestScoreTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/OrCompositeTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/ScoreCalculationCountTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/StepCountTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/TerminationFactoryTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/TimeMillisSpentTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/UnimprovedStepCountTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/UnimprovedTimeMillisSpentScoreDifferenceThresholdTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/solver/termination/UnimprovedTimeMillisSpentTerminationTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/DummyVariableListener.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/TestdataConstraintProvider.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/TestdataEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/TestdataEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/TestdataIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/TestdataObject.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/TestdataSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/TestdataValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/allows_unassigned/TestdataAllowsUnassignedEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/allows_unassigned/TestdataAllowsUnassignedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/allows_unassigned/TestdataAllowsUnassignedIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/allows_unassigned/TestdataAllowsUnassignedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/backlinked/TestdataBacklinkedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/backlinked/TestdataBacklinkedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/TestdataChainedAnchor.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/TestdataChainedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/TestdataChainedObject.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/TestdataChainedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/multientity/TestdataChainedBrownEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/multientity/TestdataChainedGreenEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/multientity/TestdataChainedMultiEntityAnchor.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/multientity/TestdataChainedMultiEntityChainElement.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/multientity/TestdataChainedMultiEntitySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/shadow/TestdataShadowingChainedAnchor.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/shadow/TestdataShadowingChainedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/shadow/TestdataShadowingChainedIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/shadow/TestdataShadowingChainedObject.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/chained/shadow/TestdataShadowingChainedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/customcloner/TestdataCorrectlyClonedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/customcloner/TestdataEntitiesNotClonedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/customcloner/TestdataScoreNotClonedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/customcloner/TestdataScoreNotEqualSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/deepcloning/AnnotatedTestdataVariousTypes.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/deepcloning/TestdataDeepCloningEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/deepcloning/TestdataDeepCloningSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/deepcloning/TestdataVariousTypes.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/deepcloning/field/TestdataFieldAnnotatedDeepCloningEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/deepcloning/field/TestdataFieldAnnotatedDeepCloningSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectEnum.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectEquals.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectEqualsNoHashCode.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectEqualsSubclass.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectIntegerId.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectIntegerIdSubclass.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectMultipleIds.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectNoId.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/clone/lookup/TestdataObjectPrimitiveIntId.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/collection/TestdataArrayBasedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/collection/TestdataArrayBasedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/collection/TestdataEntityCollectionPropertyEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/collection/TestdataEntityCollectionPropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/collection/TestdataSetBasedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/collection/TestdataSetBasedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/comparable/TestdataCodeComparator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/comparable/TestdataDifficultyComparingEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/comparable/TestdataDifficultyComparingSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/constraintconfiguration/TestdataConstraintConfiguration.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/constraintconfiguration/TestdataConstraintConfigurationSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/constraintconfiguration/TestdataConstraintWeighIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/constraintconfiguration/TestdataConstraintWeightConstraintProvider.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/constraintconfiguration/TestdataConstraintWeightEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/constraintconfiguration/extended/TestdataExtendedConstraintConfiguration.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/constraintconfiguration/extended/TestdataExtendedConstraintConfigurationSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/TestdataAnnotatedExtendedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/TestdataAnnotatedExtendedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/TestdataUnannotatedExtendedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/TestdataUnannotatedExtendedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/entity/TestdataExtendedEntitySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/thirdparty/TestdataExtendedThirdPartyEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/thirdparty/TestdataExtendedThirdPartySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/thirdparty/TestdataThirdPartyEntityPojo.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extended/thirdparty/TestdataThirdPartySolutionPojo.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extendedshadow/TestdataExtendedShadowEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extendedshadow/TestdataExtendedShadowExtendedShadowEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extendedshadow/TestdataExtendedShadowShadowEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extendedshadow/TestdataExtendedShadowSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extendedshadow/TestdataExtendedShadowVariable.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/extendedshadow/TestdataExtendedShadowVariableListener.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/gizmo/GizmoTestdataEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/TestDistanceMeter.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/TestdataListEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/TestdataListSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/TestdataListUtils.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/TestdataListValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/TestAllowsUnassignedValuesDistanceMeter.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/TestdataAllowsUnassignedValuesListConstraintProvider.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/TestdataAllowsUnassignedValuesListEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/TestdataAllowsUnassignedValuesListEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/TestdataAllowsUnassignedValuesListIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/TestdataAllowsUnassignedValuesListSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/TestdataAllowsUnassignedValuesListValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/pinned/TestdataPinnedUnassignedValuesListConstraintProvider.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/pinned/TestdataPinnedUnassignedValuesListEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/pinned/TestdataPinnedUnassignedValuesListSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/allows_unassigned/pinned/TestdataPinnedUnassignedValuesListValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/externalized/TestdataListEntityExternalized.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/externalized/TestdataListSolutionExternalized.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/externalized/TestdataListValueExternalized.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/mixed/TestdataMixedVariablesEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/mixed/TestdataMixedVariablesSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/TestdataPinnedListConstraintProvider.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/TestdataPinnedListEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/TestdataPinnedListEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/TestdataPinnedListIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/TestdataPinnedListSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/TestdataPinnedListValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexDistanceMeter.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexListCMAIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexListConstraintProvider.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexListEasyScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexListEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexListIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexListSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/index/TestdataPinnedWithIndexListValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/noshadows/TestdataPinnedNoShadowsListEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/noshadows/TestdataPinnedNoShadowsListSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/pinned/noshadows/TestdataPinnedNoShadowsListValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/shadow_history/TestdataListEntityWithShadowHistory.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/shadow_history/TestdataListSolutionWithShadowHistory.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/shadow_history/TestdataListValueWithShadowHistory.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/shadow_history/TestdataListWithShadowHistoryIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/valuerange/TestdataListEntityProvidingEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/valuerange/TestdataListEntityProvidingSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/valuerange/TestdataListEntityWithArrayValueRange.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/list/valuerange/TestdataListSolutionWithArrayValueRange.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/multientity/TestdataHerdEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/multientity/TestdataLeadEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/multientity/TestdataMultiEntitySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/multivar/TestdataMultiVarEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/multivar/TestdataMultiVarSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/multivar/TestdataMultivarIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/multivar/TestdataOtherValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/TestdataPinnedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/TestdataPinnedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/TestdataPinningFilter.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/chained/TestdataChainedEntityPinningFilter.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/chained/TestdataPinnedChainedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/chained/TestdataPinnedChainedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/extended/TestdataExtendedPinnedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/extended/TestdataExtendedPinnedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/pinned/extended/TestdataExtendedPinningFilter.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/planningid/TestdataStringPlanningIdEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/planningid/TestdataStringPlanningIdSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/record/TestdataRecordEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/record/TestdataRecordSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/record/TestdataRecordValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/reflect/accessmodifier/TestdataAccessModifierSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/reflect/accessmodifier/TestdataVisibilityModifierSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/reflect/field/TestdataFieldAnnotatedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/reflect/field/TestdataFieldAnnotatedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/reflect/generic/TestdataGenericEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/reflect/generic/TestdataGenericSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/reflect/generic/TestdataGenericValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataBendableBigDecimalScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataBendableLongScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataBendableScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataHardMediumSoftBigDecimalScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataHardMediumSoftLongScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataHardMediumSoftScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataHardSoftBigDecimalScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataHardSoftLongScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataHardSoftScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataSimpleBigDecimalScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/TestdataSimpleLongScoreSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/lavish/TestdataLavishEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/lavish/TestdataLavishEntityGroup.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/lavish/TestdataLavishExtra.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/lavish/TestdataLavishSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/lavish/TestdataLavishValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/score/lavish/TestdataLavishValueGroup.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/TestdataShadowedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/TestdataShadowedIncrementalScoreCalculator.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/TestdataShadowedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/corrupted/TestdataCorruptedShadowedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/corrupted/TestdataCorruptedShadowedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/cyclic/TestdataSevenNonCyclicShadowedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/cyclic/TestdataSevenNonCyclicShadowedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/cyclic/invalid/TestdataCyclicReferencedShadowedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/cyclic/invalid/TestdataCyclicReferencedShadowedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/cyclic/invalid/TestdataCyclicShadowedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/cyclic/invalid/TestdataCyclicShadowedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/extended/TestdataExtendedShadowedChildEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/extended/TestdataExtendedShadowedParentEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/extended/TestdataExtendedShadowedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/inverserelation/TestdataInverseRelationEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/inverserelation/TestdataInverseRelationSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/inverserelation/TestdataInverseRelationValue.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/manytomany/TestdataManyToManyShadowedEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/manytomany/TestdataManyToManyShadowedEntityUniqueEvents.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/manytomany/TestdataManyToManyShadowedSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/order/TestdataShadowVariableOrderEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/order/TestdataShadowVariableOrderSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/wrong_listener/TestdataWrongBasicShadowEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/shadow/wrong_listener/TestdataWrongListShadowEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/TestdataNoProblemFactPropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/TestdataProblemFactPropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/TestdataReadMethodProblemFactCollectionPropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/TestdataWildcardSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/autodiscover/TestdataAutoDiscoverFieldOverrideSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/autodiscover/TestdataAutoDiscoverFieldSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/autodiscover/TestdataAutoDiscoverGetterOverrideSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/autodiscover/TestdataAutoDiscoverGetterSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/autodiscover/TestdataAutoDiscoverUnannotatedEntitySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/autodiscover/TestdataExtendedAutoDiscoverGetterSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataDuplicatePlanningEntityCollectionPropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataDuplicatePlanningScorePropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataDuplicateProblemFactCollectionPropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataMissingScorePropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataProblemFactCollectionPropertyWithArgumentSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataProblemFactIsPlanningEntityCollectionPropertySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataUnknownFactTypeSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/solutionproperties/invalid/TestdataUnsupportedWildcardSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/TestdataValueRangeEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/TestdataValueRangeSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/anonymous/TestdataAnonymousArraySolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/anonymous/TestdataAnonymousListSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/anonymous/TestdataAnonymousValueRangeEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/anonymous/TestdataAnonymousValueRangeSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/entityproviding/TestdataEntityProvidingEntity.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/domain/valuerange/entityproviding/TestdataEntityProvidingSolution.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/util/CodeAssertable.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/util/CodeAssertableArrayList.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/util/PlannerAssert.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testdata/util/PlannerTestUtils.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testutil/TestMeterRegistry.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/testutil/TestRandom.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/util/ElementAwareListTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/util/ListBasedScalingOrderedSetTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/util/MathUtilsTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/util/MutableIntTest.java (100%) rename core/{core-impl => }/src/test/java/ai/timefold/solver/core/impl/util/MutableLongTest.java (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/api/solver/classloaderTestdataSolverConfig.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/api/solver/invalidSolverConfig.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/api/solver/testdataOverconstrainedSolverConfig.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/api/solver/testdataShadowedSolverConfig.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/api/solver/testdataSolverConfig.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/config/phase/custom/testSolverConfigWithNonexistentCustomPhase.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/config/solver/testSolverConfigWithNamespace.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/config/solver/testSolverConfigWithoutNamespace.xml (100%) rename core/{core-impl => }/src/test/resources/ai/timefold/solver/core/config/solver/testdataSolverConfig.xml (100%) rename core/{core-impl => }/src/test/resources/junit-platform.properties (100%) rename core/{core-impl => }/src/test/resources/logback-test.xml (100%) rename core/{core-impl => }/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker (100%) diff --git a/benchmark/pom.xml b/benchmark/pom.xml index 5c7b48bf80..a6a301eaa1 100644 --- a/benchmark/pom.xml +++ b/benchmark/pom.xml @@ -42,7 +42,7 @@ ai.timefold.solver - timefold-solver-core-impl + timefold-solver-core test-jar test @@ -238,11 +238,9 @@ maven-dependency-plugin - ai.timefold.solver:timefold-solver-core-impl:jar org.webjars:*:jar - ai.timefold.solver:timefold-solver-core:jar org.webjars:*:jar diff --git a/build/bom/pom.xml b/build/bom/pom.xml index 994908c393..0ef27d9962 100644 --- a/build/bom/pom.xml +++ b/build/bom/pom.xml @@ -38,35 +38,13 @@ ai.timefold.solver - timefold-solver-core-impl - ${version.ai.timefold.solver} - - - ai.timefold.solver - timefold-solver-core-impl - ${version.ai.timefold.solver} - sources - - - ai.timefold.solver - timefold-solver-core-impl - test-jar - ${version.ai.timefold.solver} - - - ai.timefold.solver - timefold-solver-constraint-streams - ${version.ai.timefold.solver} - - - ai.timefold.solver - timefold-solver-constraint-streams + timefold-solver-core ${version.ai.timefold.solver} sources ai.timefold.solver - timefold-solver-constraint-streams + timefold-solver-core test-jar ${version.ai.timefold.solver} diff --git a/core/constraint-streams/pom.xml b/core/constraint-streams/pom.xml deleted file mode 100644 index ef55d39610..0000000000 --- a/core/constraint-streams/pom.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - ai.timefold.solver - timefold-solver-core-parent - 999-SNAPSHOT - - 4.0.0 - - timefold-solver-constraint-streams - - Timefold Solver core: Constraint streams - - Timefold solves planning problems. - This lightweight, embeddable planning engine implements powerful and scalable algorithms - to optimize business resource scheduling and planning. - - This module contains the implementation of Constraint streams. - - https://timefold.ai - - - ai.timefold.solver.constraint.streams - - - - - ai.timefold.solver - timefold-solver-core-impl - - - - - - org.apache.commons - commons-lang3 - test - - - - ch.qos.logback - logback-classic - test - - - - - ai.timefold.solver - timefold-solver-core-impl - test-jar - test - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.junit.jupiter - junit-jupiter-params - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - org.mockito - mockito-junit-jupiter - test - - - - diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactory.java b/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactory.java deleted file mode 100644 index cacd96c457..0000000000 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -package ai.timefold.solver.constraint.streams.bavet; - -import java.util.Arrays; -import java.util.List; - -import ai.timefold.solver.constraint.streams.common.AbstractConstraintStreamScoreDirectorFactory; -import ai.timefold.solver.constraint.streams.common.inliner.AbstractScoreInliner; -import ai.timefold.solver.core.api.score.Score; -import ai.timefold.solver.core.api.score.stream.Constraint; -import ai.timefold.solver.core.api.score.stream.ConstraintProvider; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; - -public final class BavetConstraintStreamScoreDirectorFactory> - extends AbstractConstraintStreamScoreDirectorFactory { - - private final BavetConstraintSessionFactory constraintSessionFactory; - private final List> constraintList; - - public BavetConstraintStreamScoreDirectorFactory(SolutionDescriptor solutionDescriptor, - ConstraintProvider constraintProvider, EnvironmentMode environmentMode) { - super(solutionDescriptor); - BavetConstraintFactory constraintFactory = new BavetConstraintFactory<>(solutionDescriptor, environmentMode); - constraintList = constraintFactory.buildConstraints(constraintProvider); - constraintSessionFactory = new BavetConstraintSessionFactory<>(solutionDescriptor, constraintList); - } - - @Override - public BavetConstraintStreamScoreDirector buildScoreDirector(boolean lookUpEnabled, - boolean constraintMatchEnabledPreference, boolean expectShadowVariablesInCorrectState) { - return new BavetConstraintStreamScoreDirector<>(this, lookUpEnabled, constraintMatchEnabledPreference, - expectShadowVariablesInCorrectState); - } - - public BavetConstraintSession newSession(Solution_ workingSolution, boolean constraintMatchEnabled) { - return constraintSessionFactory.buildSession(workingSolution, constraintMatchEnabled); - } - - @Override - public AbstractScoreInliner fireAndForget(Object... facts) { - BavetConstraintSession session = newSession(null, true); - Arrays.stream(facts).forEach(session::insert); - session.calculateScore(0); - return session.getScoreInliner(); - } - - @Override - public Constraint[] getConstraints() { - return constraintList.toArray(new Constraint[0]); - } - -} diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactoryService.java b/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactoryService.java deleted file mode 100644 index 242abbb61b..0000000000 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirectorFactoryService.java +++ /dev/null @@ -1,84 +0,0 @@ -package ai.timefold.solver.constraint.streams.bavet; - -import static ai.timefold.solver.core.api.score.stream.ConstraintStreamImplType.BAVET; - -import java.util.Objects; -import java.util.function.Supplier; - -import ai.timefold.solver.constraint.streams.common.AbstractConstraintStreamScoreDirectorFactory; -import ai.timefold.solver.constraint.streams.common.AbstractConstraintStreamScoreDirectorFactoryService; -import ai.timefold.solver.core.api.score.Score; -import ai.timefold.solver.core.api.score.stream.ConstraintFactory; -import ai.timefold.solver.core.api.score.stream.ConstraintProvider; -import ai.timefold.solver.core.api.score.stream.ConstraintStreamImplType; -import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.config.util.ConfigUtils; -import ai.timefold.solver.core.enterprise.TimefoldSolverEnterpriseService; -import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; -import ai.timefold.solver.core.impl.score.director.AbstractScoreDirectorFactory; -import ai.timefold.solver.core.impl.score.director.ScoreDirectorType; - -public final class BavetConstraintStreamScoreDirectorFactoryService> - extends AbstractConstraintStreamScoreDirectorFactoryService { - - @Override - public ScoreDirectorType getSupportedScoreDirectorType() { - return ScoreDirectorType.CONSTRAINT_STREAMS; - } - - @Override - public Supplier> buildScoreDirectorFactory(ClassLoader classLoader, - SolutionDescriptor solutionDescriptor, ScoreDirectorFactoryConfig config, - EnvironmentMode environmentMode) { - ConstraintStreamImplType constraintStreamImplType_ = - Objects.requireNonNullElse(config.getConstraintStreamImplType(), ConstraintStreamImplType.BAVET); - if (constraintStreamImplType_ != BAVET) { - return null; - } - if (config.getConstraintProviderClass() != null) { - if (!ConstraintProvider.class.isAssignableFrom(config.getConstraintProviderClass())) { - throw new IllegalArgumentException( - "The constraintProviderClass (" + config.getConstraintProviderClass() - + ") does not implement " + ConstraintProvider.class.getSimpleName() + "."); - } - final Class constraintProviderClass; - if (Boolean.TRUE.equals(config.getConstraintStreamAutomaticNodeSharing())) { - TimefoldSolverEnterpriseService enterpriseService = - TimefoldSolverEnterpriseService - .loadOrFail(TimefoldSolverEnterpriseService.Feature.AUTOMATIC_NODE_SHARING); - constraintProviderClass = - enterpriseService.buildLambdaSharedConstraintProvider(config.getConstraintProviderClass()); - } else { - constraintProviderClass = config.getConstraintProviderClass(); - } - return () -> { - ConstraintProvider constraintProvider = ConfigUtils.newInstance(config, - "constraintProviderClass", constraintProviderClass); - ConfigUtils.applyCustomProperties(constraintProvider, "constraintProviderClass", - config.getConstraintProviderCustomProperties(), "constraintProviderCustomProperties"); - return buildScoreDirectorFactory(solutionDescriptor, constraintProvider, environmentMode); - }; - } else { - if (config.getConstraintProviderCustomProperties() != null) { - throw new IllegalStateException("If there is no constraintProviderClass (" + config.getConstraintProviderClass() - + "), then there can be no constraintProviderCustomProperties (" - + config.getConstraintProviderCustomProperties() + ") either."); - } - return null; - } - } - - @Override - public AbstractConstraintStreamScoreDirectorFactory buildScoreDirectorFactory( - SolutionDescriptor solutionDescriptor, ConstraintProvider constraintProvider, - EnvironmentMode environmentMode) { - return new BavetConstraintStreamScoreDirectorFactory<>(solutionDescriptor, constraintProvider, environmentMode); - } - - @Override - public ConstraintFactory buildConstraintFactory(SolutionDescriptor solutionDescriptor, - EnvironmentMode environmentMode) { - return new BavetConstraintFactory<>(solutionDescriptor, environmentMode); - } -} diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/TupleSource.java b/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/TupleSource.java deleted file mode 100644 index 2b6a0b0e1c..0000000000 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/TupleSource.java +++ /dev/null @@ -1,4 +0,0 @@ -package ai.timefold.solver.constraint.streams.bavet.common; - -public interface TupleSource { -} diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/package-info.java b/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/package-info.java deleted file mode 100644 index d6bfe4c566..0000000000 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * This package contains code that deals with indexing of tuples. - * The entry point is {@link ai.timefold.solver.constraint.streams.bavet.common.index.IndexerFactory}, - * which also contains a description of the entire mechanism. - */ -package ai.timefold.solver.constraint.streams.bavet.common.index; \ No newline at end of file diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/AbstractConstraintStreamScoreDirectorFactoryService.java b/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/AbstractConstraintStreamScoreDirectorFactoryService.java deleted file mode 100644 index e8b200daf9..0000000000 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/AbstractConstraintStreamScoreDirectorFactoryService.java +++ /dev/null @@ -1,20 +0,0 @@ -package ai.timefold.solver.constraint.streams.common; - -import ai.timefold.solver.core.api.score.Score; -import ai.timefold.solver.core.api.score.stream.ConstraintFactory; -import ai.timefold.solver.core.api.score.stream.ConstraintProvider; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; -import ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService; - -public abstract class AbstractConstraintStreamScoreDirectorFactoryService> - implements ScoreDirectorFactoryService { - - public abstract AbstractConstraintStreamScoreDirectorFactory buildScoreDirectorFactory( - SolutionDescriptor solutionDescriptor, ConstraintProvider constraintProvider, - EnvironmentMode environmentMode); - - public abstract ConstraintFactory buildConstraintFactory(SolutionDescriptor solutionDescriptor, - EnvironmentMode environmentMode); - -} diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/DefaultJoinerService.java b/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/DefaultJoinerService.java deleted file mode 100644 index 86a9d7b9e3..0000000000 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/common/DefaultJoinerService.java +++ /dev/null @@ -1,72 +0,0 @@ -package ai.timefold.solver.constraint.streams.common; - -import java.util.function.BiFunction; -import java.util.function.BiPredicate; -import java.util.function.Function; - -import ai.timefold.solver.constraint.streams.common.bi.DefaultBiJoiner; -import ai.timefold.solver.constraint.streams.common.bi.FilteringBiJoiner; -import ai.timefold.solver.constraint.streams.common.penta.DefaultPentaJoiner; -import ai.timefold.solver.constraint.streams.common.penta.FilteringPentaJoiner; -import ai.timefold.solver.constraint.streams.common.quad.DefaultQuadJoiner; -import ai.timefold.solver.constraint.streams.common.quad.FilteringQuadJoiner; -import ai.timefold.solver.constraint.streams.common.tri.DefaultTriJoiner; -import ai.timefold.solver.constraint.streams.common.tri.FilteringTriJoiner; -import ai.timefold.solver.core.api.function.PentaPredicate; -import ai.timefold.solver.core.api.function.QuadFunction; -import ai.timefold.solver.core.api.function.QuadPredicate; -import ai.timefold.solver.core.api.function.TriFunction; -import ai.timefold.solver.core.api.function.TriPredicate; -import ai.timefold.solver.core.api.score.stream.bi.BiJoiner; -import ai.timefold.solver.core.api.score.stream.penta.PentaJoiner; -import ai.timefold.solver.core.api.score.stream.quad.QuadJoiner; -import ai.timefold.solver.core.api.score.stream.tri.TriJoiner; -import ai.timefold.solver.core.impl.score.stream.JoinerService; -import ai.timefold.solver.core.impl.score.stream.JoinerType; - -public final class DefaultJoinerService implements JoinerService { - - @Override - public BiJoiner newBiJoiner(BiPredicate filter) { - return new FilteringBiJoiner<>(filter); - } - - @Override - public BiJoiner newBiJoiner(Function leftMapping, JoinerType joinerType, - Function rightMapping) { - return new DefaultBiJoiner<>(leftMapping, joinerType, rightMapping); - } - - @Override - public TriJoiner newTriJoiner(TriPredicate filter) { - return new FilteringTriJoiner<>(filter); - } - - @Override - public TriJoiner newTriJoiner(BiFunction leftMapping, JoinerType joinerType, - Function rightMapping) { - return new DefaultTriJoiner<>(leftMapping, joinerType, rightMapping); - } - - @Override - public QuadJoiner newQuadJoiner(QuadPredicate filter) { - return new FilteringQuadJoiner<>(filter); - } - - @Override - public QuadJoiner newQuadJoiner(TriFunction leftMapping, - JoinerType joinerType, Function rightMapping) { - return new DefaultQuadJoiner<>(leftMapping, joinerType, rightMapping); - } - - @Override - public PentaJoiner newPentaJoiner(PentaPredicate filter) { - return new FilteringPentaJoiner<>(filter); - } - - @Override - public PentaJoiner newPentaJoiner(QuadFunction leftMapping, - JoinerType joinerType, Function rightMapping) { - return new DefaultPentaJoiner<>(leftMapping, joinerType, rightMapping); - } -} diff --git a/core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService b/core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService deleted file mode 100644 index 7e64934570..0000000000 --- a/core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService +++ /dev/null @@ -1 +0,0 @@ -ai.timefold.solver.constraint.streams.bavet.BavetConstraintStreamScoreDirectorFactoryService diff --git a/core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.stream.JoinerService b/core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.stream.JoinerService deleted file mode 100644 index 884f332adf..0000000000 --- a/core/constraint-streams/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.stream.JoinerService +++ /dev/null @@ -1 +0,0 @@ -ai.timefold.solver.constraint.streams.common.DefaultJoinerService diff --git a/core/constraint-streams/src/test/java/ai/timefold/solver/constraint/streams/bavet/ScoreDirectorFactoryFactoryTest.java b/core/constraint-streams/src/test/java/ai/timefold/solver/constraint/streams/bavet/ScoreDirectorFactoryFactoryTest.java deleted file mode 100644 index dd6e6e6e17..0000000000 --- a/core/constraint-streams/src/test/java/ai/timefold/solver/constraint/streams/bavet/ScoreDirectorFactoryFactoryTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package ai.timefold.solver.constraint.streams.bavet; - -import static org.assertj.core.api.Assertions.assertThat; - -import ai.timefold.solver.constraint.streams.common.AbstractConstraintStreamScoreDirectorFactory; -import ai.timefold.solver.core.api.score.buildin.simple.SimpleScore; -import ai.timefold.solver.core.api.score.stream.Constraint; -import ai.timefold.solver.core.api.score.stream.ConstraintFactory; -import ai.timefold.solver.core.api.score.stream.ConstraintProvider; -import ai.timefold.solver.core.api.score.stream.ConstraintStreamImplType; -import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.impl.testdata.domain.TestdataSolution; - -import org.junit.jupiter.api.Test; - -class ScoreDirectorFactoryFactoryTest { - - @Test - void constraintStreamsBavet() { - ScoreDirectorFactoryConfig config = new ScoreDirectorFactoryConfig() - .withConstraintProviderClass(TestdataConstraintProvider.class) - .withConstraintStreamImplType(ConstraintStreamImplType.BAVET); - AbstractConstraintStreamScoreDirectorFactory scoreDirectorFactory = - (AbstractConstraintStreamScoreDirectorFactory) new BavetConstraintStreamScoreDirectorFactoryService() - .buildScoreDirectorFactory(null, TestdataSolution.buildSolutionDescriptor(), config, - EnvironmentMode.REPRODUCIBLE) - .get(); - assertThat(scoreDirectorFactory).isInstanceOf(BavetConstraintStreamScoreDirectorFactory.class); - } - - public static class TestdataConstraintProvider implements ConstraintProvider { - @Override - public Constraint[] defineConstraints(ConstraintFactory constraintFactory) { - return new Constraint[0]; - } - } -} diff --git a/core/core-impl/pom.xml b/core/core-impl/pom.xml deleted file mode 100644 index 1d57d15655..0000000000 --- a/core/core-impl/pom.xml +++ /dev/null @@ -1,192 +0,0 @@ - - - - 4.0.0 - - ai.timefold.solver - timefold-solver-core-parent - 999-SNAPSHOT - - - timefold-solver-core-impl - - Timefold Solver core implementation - - Timefold solves planning problems. - This lightweight, embeddable planning engine implements powerful and scalable algorithms - to optimize business resource scheduling and planning. - - This module contains the planning engine itself. - - https://timefold.ai - - - ai.timefold.solver.core.impl - - - - - - - io.quarkus.gizmo - gizmo - true - - - org.ow2.asm - asm - true - - - - - - org.apache.commons - commons-lang3 - test - - - org.apache.commons - commons-math3 - - - commons-io - commons-io - test - - - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - test - - - - - io.micrometer - micrometer-core - - - - - jakarta.xml.bind - jakarta.xml.bind-api - - - org.glassfish.jaxb - jaxb-runtime - runtime - - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.junit.jupiter - junit-jupiter-params - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.revapi - revapi-maven-plugin - - - org.codehaus.mojo - jaxb2-maven-plugin - - - ${project.build.sourceDirectory}/ai/timefold/solver/core/config/solver - - - - - maven-resources-plugin - - - - copy-solver-xsd - process-resources - - copy-resources - - - ${project.basedir}/src/main/resources - - - ${project.build.outputDirectory} - - solver.xsd - - ${project.basedir}/src/main/resources - - - - - - - - - - - - check-xsd-changes - - - env.CI - - - - - - org.codehaus.mojo - exec-maven-plugin - - - check-solver-xsd-changes - test - - exec - - - git - ${project.basedir} - - diff - --exit-code - src/main/resources/solver.xsd - - - - - - - - - - diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java b/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java deleted file mode 100644 index 85af631010..0000000000 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java +++ /dev/null @@ -1,142 +0,0 @@ -package ai.timefold.solver.core.impl.score.director; - -import static ai.timefold.solver.core.impl.score.director.ScoreDirectorType.CONSTRAINT_STREAMS; -import static ai.timefold.solver.core.impl.score.director.ScoreDirectorType.EASY; -import static ai.timefold.solver.core.impl.score.director.ScoreDirectorType.INCREMENTAL; - -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.ServiceLoader; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import ai.timefold.solver.core.api.score.Score; -import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; -import ai.timefold.solver.core.config.score.trend.InitializingScoreTrendLevel; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.config.util.ConfigUtils; -import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; -import ai.timefold.solver.core.impl.score.trend.InitializingScoreTrend; - -public class ScoreDirectorFactoryFactory> { - - private final ScoreDirectorFactoryConfig config; - - public ScoreDirectorFactoryFactory(ScoreDirectorFactoryConfig config) { - this.config = config; - } - - public InnerScoreDirectorFactory buildScoreDirectorFactory(ClassLoader classLoader, - EnvironmentMode environmentMode, SolutionDescriptor solutionDescriptor) { - AbstractScoreDirectorFactory scoreDirectorFactory = - decideMultipleScoreDirectorFactories(classLoader, solutionDescriptor, environmentMode); - if (config.getAssertionScoreDirectorFactory() != null) { - if (config.getAssertionScoreDirectorFactory().getAssertionScoreDirectorFactory() != null) { - throw new IllegalArgumentException("A assertionScoreDirectorFactory (" - + config.getAssertionScoreDirectorFactory() + ") cannot have a non-null assertionScoreDirectorFactory (" - + config.getAssertionScoreDirectorFactory().getAssertionScoreDirectorFactory() + ")."); - } - if (environmentMode.compareTo(EnvironmentMode.FAST_ASSERT) > 0) { - throw new IllegalArgumentException("A non-null assertionScoreDirectorFactory (" - + config.getAssertionScoreDirectorFactory() + ") requires an environmentMode (" - + environmentMode + ") of " + EnvironmentMode.FAST_ASSERT + " or lower."); - } - ScoreDirectorFactoryFactory assertionScoreDirectorFactoryFactory = - new ScoreDirectorFactoryFactory<>(config.getAssertionScoreDirectorFactory()); - scoreDirectorFactory.setAssertionScoreDirectorFactory(assertionScoreDirectorFactoryFactory - .buildScoreDirectorFactory(classLoader, EnvironmentMode.NON_REPRODUCIBLE, solutionDescriptor)); - } - scoreDirectorFactory.setInitializingScoreTrend(InitializingScoreTrend.parseTrend( - config.getInitializingScoreTrend() == null ? InitializingScoreTrendLevel.ANY.name() - : config.getInitializingScoreTrend(), - solutionDescriptor.getScoreDefinition().getLevelsSize())); - if (environmentMode.isNonIntrusiveFullAsserted()) { - scoreDirectorFactory.setAssertClonedSolution(true); - } - if (environmentMode.isTracking()) { - scoreDirectorFactory.setTrackingWorkingSolution(true); - } - return scoreDirectorFactory; - } - - protected AbstractScoreDirectorFactory decideMultipleScoreDirectorFactories( - ClassLoader classLoader, SolutionDescriptor solutionDescriptor, EnvironmentMode environmentMode) { - // Load all known Score Director Factories via SPI. - ServiceLoader scoreDirectorFactoryServiceLoader = - classLoader == null - ? ServiceLoader.load(ScoreDirectorFactoryService.class) - : ServiceLoader.load(ScoreDirectorFactoryService.class, classLoader); - Map>> scoreDirectorFactorySupplierMap = - new EnumMap<>(ScoreDirectorType.class); - for (ScoreDirectorFactoryService service : scoreDirectorFactoryServiceLoader) { - Supplier> factory = - service.buildScoreDirectorFactory(classLoader, solutionDescriptor, config, environmentMode); - if (factory != null) { - scoreDirectorFactorySupplierMap.put(service.getSupportedScoreDirectorType(), factory); - } - } - - Supplier> easyScoreDirectorFactorySupplier = - scoreDirectorFactorySupplierMap.get(EASY); - Supplier> constraintStreamScoreDirectorFactorySupplier = - scoreDirectorFactorySupplierMap.get(CONSTRAINT_STREAMS); - Supplier> incrementalScoreDirectorFactorySupplier = - scoreDirectorFactorySupplierMap.get(INCREMENTAL); - - if (!ConfigUtils.isEmptyCollection(config.getScoreDrlList())) { - throw new IllegalStateException("DRL constraints requested via scoreDrlList (" + config.getScoreDrlList() - + "), but this is no longer supported in Timefold Solver 0.9+.\n" - + "Maybe upgrade from scoreDRL to ConstraintStreams using this recipe: https://www.optaplanner.org/download/upgradeRecipe/drl-to-constraint-streams-migration.html\n" - + "Maybe use Timefold Solver 0.8 instead if you can't upgrade to ConstraintStreams now."); - } - // Every non-null supplier means that ServiceLoader successfully loaded and configured a score director factory. - assertOnlyOneScoreDirectorFactory(easyScoreDirectorFactorySupplier, - constraintStreamScoreDirectorFactorySupplier, incrementalScoreDirectorFactorySupplier); - - if (easyScoreDirectorFactorySupplier != null) { - return easyScoreDirectorFactorySupplier.get(); - } else if (incrementalScoreDirectorFactorySupplier != null) { - return incrementalScoreDirectorFactorySupplier.get(); - } - if (constraintStreamScoreDirectorFactorySupplier != null) { - return constraintStreamScoreDirectorFactorySupplier.get(); - } else if (config.getConstraintProviderClass() != null) { - throw new IllegalStateException("Constraint Streams requested via constraintProviderClass (" + - config.getConstraintProviderClass() + ") but the supporting classes were not found on the classpath.\n" - + "Maybe include ai.timefold.solver:timefold-solver-constraint-streams dependency in your project?\n" - + "Maybe ensure your uberjar bundles META-INF/services from included JAR files?"); - } - - throw new IllegalArgumentException("The scoreDirectorFactory lacks configuration for " - + "either constraintProviderClass, easyScoreCalculatorClass or incrementalScoreCalculatorClass."); - } - - private void assertOnlyOneScoreDirectorFactory( - Supplier> easyScoreDirectorFactorySupplier, - Supplier> constraintStreamScoreDirectorFactorySupplier, - Supplier> incrementalScoreDirectorFactorySupplier) { - if (Stream.of(easyScoreDirectorFactorySupplier, constraintStreamScoreDirectorFactorySupplier, - incrementalScoreDirectorFactorySupplier) - .filter(Objects::nonNull).count() > 1) { - List scoreDirectorFactoryPropertyList = new ArrayList<>(4); - if (easyScoreDirectorFactorySupplier != null) { - scoreDirectorFactoryPropertyList - .add("an easyScoreCalculatorClass (" + config.getEasyScoreCalculatorClass().getName() + ")"); - } - if (constraintStreamScoreDirectorFactorySupplier != null) { - scoreDirectorFactoryPropertyList - .add("a constraintProviderClass (" + config.getConstraintProviderClass().getName() + ")"); - } - if (incrementalScoreDirectorFactorySupplier != null) { - scoreDirectorFactoryPropertyList.add( - "an incrementalScoreCalculatorClass (" + config.getIncrementalScoreCalculatorClass().getName() + ")"); - } - throw new IllegalArgumentException("The scoreDirectorFactory cannot have " - + String.join(" and ", scoreDirectorFactoryPropertyList) + " together."); - } - } - -} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryService.java b/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryService.java deleted file mode 100644 index c0a7e97410..0000000000 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryService.java +++ /dev/null @@ -1,44 +0,0 @@ -package ai.timefold.solver.core.impl.score.director; - -import java.util.function.Supplier; - -import ai.timefold.solver.core.api.domain.solution.PlanningSolution; -import ai.timefold.solver.core.api.score.Score; -import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; - -/** - * All {@link ScoreDirectorFactory} implementations must provide an implementation of this interface, - * as well as an entry in META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService file. - * This makes it available for discovery in {@link ScoreDirectorFactoryFactory} via {@link java.util.ServiceLoader}. - * - * @param the solution type, the class with the {@link PlanningSolution} annotation - * @param the score type to go with the solution - */ -public interface ScoreDirectorFactoryService> { - - /** - * - * @return never null, the score director type that is implemented by the factory - */ - ScoreDirectorType getSupportedScoreDirectorType(); - - /** - * Returns a {@link Supplier} which returns new instance of a score director defined by - * {@link #getSupportedScoreDirectorType()}. - * This is done so that the actual factory is only instantiated after all the configuration fail-fasts have been - * performed. - * - * @param classLoader - * @param solutionDescriptor never null, solution descriptor provided by the solver - * @param config never null, configuration to use for instantiating the factory - * @param environmentMode never null - * @return null when this type is not configured - * @throws IllegalStateException if the configuration has an issue - */ - Supplier> buildScoreDirectorFactory(ClassLoader classLoader, - SolutionDescriptor solutionDescriptor, ScoreDirectorFactoryConfig config, - EnvironmentMode environmentMode); - -} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorType.java b/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorType.java deleted file mode 100644 index 07fc4c9000..0000000000 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorType.java +++ /dev/null @@ -1,9 +0,0 @@ -package ai.timefold.solver.core.impl.score.director; - -public enum ScoreDirectorType { - - EASY, - CONSTRAINT_STREAMS, - INCREMENTAL - -} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactoryService.java b/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactoryService.java deleted file mode 100644 index ddd401e13d..0000000000 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactoryService.java +++ /dev/null @@ -1,50 +0,0 @@ -package ai.timefold.solver.core.impl.score.director.easy; - -import java.util.function.Supplier; - -import ai.timefold.solver.core.api.score.Score; -import ai.timefold.solver.core.api.score.calculator.EasyScoreCalculator; -import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.config.util.ConfigUtils; -import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; -import ai.timefold.solver.core.impl.score.director.AbstractScoreDirectorFactory; -import ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService; -import ai.timefold.solver.core.impl.score.director.ScoreDirectorType; - -public final class EasyScoreDirectorFactoryService> - implements ScoreDirectorFactoryService { - - @Override - public ScoreDirectorType getSupportedScoreDirectorType() { - return ScoreDirectorType.EASY; - } - - @Override - public Supplier> buildScoreDirectorFactory(ClassLoader classLoader, - SolutionDescriptor solutionDescriptor, ScoreDirectorFactoryConfig config, - EnvironmentMode environmentMode) { - if (config.getEasyScoreCalculatorClass() != null) { - if (!EasyScoreCalculator.class.isAssignableFrom(config.getEasyScoreCalculatorClass())) { - throw new IllegalArgumentException( - "The easyScoreCalculatorClass (" + config.getEasyScoreCalculatorClass() - + ") does not implement " + EasyScoreCalculator.class.getSimpleName() + "."); - } - return () -> { - EasyScoreCalculator easyScoreCalculator = ConfigUtils.newInstance(config, - "easyScoreCalculatorClass", config.getEasyScoreCalculatorClass()); - ConfigUtils.applyCustomProperties(easyScoreCalculator, "easyScoreCalculatorClass", - config.getEasyScoreCalculatorCustomProperties(), "easyScoreCalculatorCustomProperties"); - return new EasyScoreDirectorFactory<>(solutionDescriptor, easyScoreCalculator); - }; - } else { - if (config.getEasyScoreCalculatorCustomProperties() != null) { - throw new IllegalStateException( - "If there is no easyScoreCalculatorClass (" + config.getEasyScoreCalculatorClass() - + "), then there can be no easyScoreCalculatorCustomProperties (" - + config.getEasyScoreCalculatorCustomProperties() + ") either."); - } - return null; - } - } -} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactoryService.java b/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactoryService.java deleted file mode 100644 index 129add090f..0000000000 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactoryService.java +++ /dev/null @@ -1,50 +0,0 @@ -package ai.timefold.solver.core.impl.score.director.incremental; - -import java.util.function.Supplier; - -import ai.timefold.solver.core.api.score.Score; -import ai.timefold.solver.core.api.score.calculator.IncrementalScoreCalculator; -import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; -import ai.timefold.solver.core.config.solver.EnvironmentMode; -import ai.timefold.solver.core.config.util.ConfigUtils; -import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; -import ai.timefold.solver.core.impl.score.director.AbstractScoreDirectorFactory; -import ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService; -import ai.timefold.solver.core.impl.score.director.ScoreDirectorType; - -public final class IncrementalScoreDirectorFactoryService> - implements ScoreDirectorFactoryService { - - @Override - public ScoreDirectorType getSupportedScoreDirectorType() { - return ScoreDirectorType.INCREMENTAL; - } - - @Override - public Supplier> buildScoreDirectorFactory(ClassLoader classLoader, - SolutionDescriptor solutionDescriptor, ScoreDirectorFactoryConfig config, - EnvironmentMode environmentMode) { - if (config.getIncrementalScoreCalculatorClass() != null) { - if (!IncrementalScoreCalculator.class.isAssignableFrom(config.getIncrementalScoreCalculatorClass())) { - throw new IllegalArgumentException( - "The incrementalScoreCalculatorClass (" + config.getIncrementalScoreCalculatorClass() - + ") does not implement " + IncrementalScoreCalculator.class.getSimpleName() + "."); - } - return () -> new IncrementalScoreDirectorFactory<>(solutionDescriptor, () -> { - IncrementalScoreCalculator incrementalScoreCalculator = ConfigUtils.newInstance(config, - "incrementalScoreCalculatorClass", config.getIncrementalScoreCalculatorClass()); - ConfigUtils.applyCustomProperties(incrementalScoreCalculator, "incrementalScoreCalculatorClass", - config.getIncrementalScoreCalculatorCustomProperties(), "incrementalScoreCalculatorCustomProperties"); - return incrementalScoreCalculator; - }); - } else { - if (config.getIncrementalScoreCalculatorCustomProperties() != null) { - throw new IllegalStateException( - "If there is no incrementalScoreCalculatorClass (" + config.getIncrementalScoreCalculatorClass() - + "), then there can be no incrementalScoreCalculatorCustomProperties (" - + config.getIncrementalScoreCalculatorCustomProperties() + ") either."); - } - return null; - } - } -} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerService.java b/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerService.java deleted file mode 100644 index 7e58edc00b..0000000000 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerService.java +++ /dev/null @@ -1,49 +0,0 @@ -package ai.timefold.solver.core.impl.score.stream; - -import java.util.ServiceLoader; -import java.util.function.BiFunction; -import java.util.function.BiPredicate; -import java.util.function.Function; - -import ai.timefold.solver.core.api.function.PentaPredicate; -import ai.timefold.solver.core.api.function.QuadFunction; -import ai.timefold.solver.core.api.function.QuadPredicate; -import ai.timefold.solver.core.api.function.TriFunction; -import ai.timefold.solver.core.api.function.TriPredicate; -import ai.timefold.solver.core.api.score.stream.bi.BiJoiner; -import ai.timefold.solver.core.api.score.stream.penta.PentaJoiner; -import ai.timefold.solver.core.api.score.stream.quad.QuadJoiner; -import ai.timefold.solver.core.api.score.stream.tri.TriJoiner; - -/** - * Used via {@link ServiceLoader} so that the constraint streams implementation can be fully split from its API, - * without getting split packages or breaking backwards compatibility. - */ -public interface JoinerService { - - /* - * TODO In 9.x, bring API and impl to the same JAR, avoiding split packages. - * This will make this SPI unnecessary. - */ - - BiJoiner newBiJoiner(BiPredicate filter); - - BiJoiner newBiJoiner(Function leftMapping, JoinerType joinerType, - Function rightMapping); - - TriJoiner newTriJoiner(TriPredicate filter); - - TriJoiner newTriJoiner(BiFunction leftMapping, JoinerType joinerType, - Function rightMapping); - - QuadJoiner newQuadJoiner(QuadPredicate filter); - - QuadJoiner newQuadJoiner(TriFunction leftMapping, - JoinerType joinerType, Function rightMapping); - - PentaJoiner newPentaJoiner(PentaPredicate filter); - - PentaJoiner newPentaJoiner(QuadFunction leftMapping, - JoinerType joinerType, Function rightMapping); - -} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerSupport.java b/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerSupport.java deleted file mode 100644 index ecc15ec243..0000000000 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerSupport.java +++ /dev/null @@ -1,27 +0,0 @@ -package ai.timefold.solver.core.impl.score.stream; - -import java.util.Iterator; -import java.util.ServiceLoader; - -public final class JoinerSupport { - - private static volatile JoinerService INSTANCE; - - public static JoinerService getJoinerService() { - if (INSTANCE == null) { - synchronized (JoinerSupport.class) { - if (INSTANCE == null) { - Iterator servicesIterator = ServiceLoader.load(JoinerService.class).iterator(); - if (!servicesIterator.hasNext()) { - throw new IllegalStateException("Joiners not found.\n" - + "Maybe include ai.timefold.solver:timefold-solver-constraint-streams dependency in your project?\n" - + "Maybe ensure your uberjar bundles META-INF/services from included JAR files?"); - } else { - INSTANCE = servicesIterator.next(); - } - } - } - } - return INSTANCE; - } -} diff --git a/core/core-impl/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService b/core/core-impl/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService deleted file mode 100644 index e2c93c97a7..0000000000 --- a/core/core-impl/src/main/resources/META-INF/services/ai.timefold.solver.core.impl.score.director.ScoreDirectorFactoryService +++ /dev/null @@ -1,2 +0,0 @@ -ai.timefold.solver.core.impl.score.director.easy.EasyScoreDirectorFactoryService -ai.timefold.solver.core.impl.score.director.incremental.IncrementalScoreDirectorFactoryService diff --git a/core/core/pom.xml b/core/core/pom.xml deleted file mode 100644 index db275fabc9..0000000000 --- a/core/core/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - ai.timefold.solver - timefold-solver-core-parent - 999-SNAPSHOT - - 4.0.0 - - timefold-solver-core - - Timefold Solver core - - Timefold solves planning problems. - This lightweight, embeddable planning engine implements powerful and scalable algorithms - to optimize business resource scheduling and planning. - - Aggregate dependency to bring in timefold-solver-core and all the score directors. - - https://timefold.ai - - - ai.timefold.solver.core - - - - - ai.timefold.solver - timefold-solver-core-impl - - - ai.timefold.solver - timefold-solver-constraint-streams - - - - - - - maven-dependency-plugin - - true - - - - - - diff --git a/core/pom.xml b/core/pom.xml index b41c27fa55..99ec6e057e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -1,33 +1,203 @@ - + + + 4.0.0 ai.timefold.solver timefold-solver-build-parent 999-SNAPSHOT ../build/build-parent/pom.xml - 4.0.0 - timefold-solver-core-parent + timefold-solver-core - Timefold Solver core parent + Timefold Solver core implementation Timefold solves planning problems. This lightweight, embeddable planning engine implements powerful and scalable algorithms to optimize business resource scheduling and planning. - This module contains implementation of the solver and various optional scoring mechanisms. + This module contains the planning engine itself. https://timefold.ai - pom + + ai.timefold.solver.core + + + + + + + io.quarkus.gizmo + gizmo + true + + + org.ow2.asm + asm + true + + + + + + org.apache.commons + commons-lang3 + test + + + org.apache.commons + commons-math3 + + + commons-io + commons-io + test + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + test + + + + + io.micrometer + micrometer-core + + + + + jakarta.xml.bind + jakarta.xml.bind-api + + + org.glassfish.jaxb + jaxb-runtime + runtime + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + org.assertj + assertj-core + test + + + org.mockito + mockito-core + test + + + org.mockito + mockito-junit-jupiter + test + + - - core - core-impl - constraint-streams - + + + + org.revapi + revapi-maven-plugin + + + ${project.groupId}:timefold-solver-core-impl:${revapi.oldTimefoldVersion} + + + + + org.codehaus.mojo + jaxb2-maven-plugin + + + ${project.build.sourceDirectory}/ai/timefold/solver/core/config/solver + + + + + maven-resources-plugin + + + + copy-solver-xsd + process-resources + + copy-resources + + + ${project.basedir}/src/main/resources + + + ${project.build.outputDirectory} + + solver.xsd + + ${project.basedir}/src/main/resources + + + + + + + + + + + check-xsd-changes + + + env.CI + + + + + + org.codehaus.mojo + exec-maven-plugin + + + check-solver-xsd-changes + test + + exec + + + git + ${project.basedir} + + diff + --exit-code + src/main/resources/solver.xsd + + + + + + + + + diff --git a/core/core-impl/src/build/revapi-differences.json b/core/src/build/revapi-differences.json similarity index 100% rename from core/core-impl/src/build/revapi-differences.json rename to core/src/build/revapi-differences.json diff --git a/core/core-impl/src/build/revapi-filter.json b/core/src/build/revapi-filter.json similarity index 100% rename from core/core-impl/src/build/revapi-filter.json rename to core/src/build/revapi-filter.json diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/autodiscover/AutoDiscoverMemberType.java b/core/src/main/java/ai/timefold/solver/core/api/domain/autodiscover/AutoDiscoverMemberType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/autodiscover/AutoDiscoverMemberType.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/autodiscover/AutoDiscoverMemberType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/common/DomainAccessType.java b/core/src/main/java/ai/timefold/solver/core/api/domain/common/DomainAccessType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/common/DomainAccessType.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/common/DomainAccessType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/common/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/domain/common/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/common/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/common/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfiguration.java b/core/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfiguration.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfiguration.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfiguration.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfigurationProvider.java b/core/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfigurationProvider.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfigurationProvider.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintConfigurationProvider.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintWeight.java b/core/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintWeight.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintWeight.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/constraintweight/ConstraintWeight.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PinningFilter.java b/core/src/main/java/ai/timefold/solver/core/api/domain/entity/PinningFilter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PinningFilter.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/entity/PinningFilter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningEntity.java b/core/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningEntity.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningEntity.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningEntity.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPin.java b/core/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPin.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPin.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPin.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPinToIndex.java b/core/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPinToIndex.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPinToIndex.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/entity/PlanningPinToIndex.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/domain/entity/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/entity/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/entity/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/lookup/LookUpStrategyType.java b/core/src/main/java/ai/timefold/solver/core/api/domain/lookup/LookUpStrategyType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/lookup/LookUpStrategyType.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/lookup/LookUpStrategyType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/lookup/PlanningId.java b/core/src/main/java/ai/timefold/solver/core/api/domain/lookup/PlanningId.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/lookup/PlanningId.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/lookup/PlanningId.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityCollectionProperty.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityCollectionProperty.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityCollectionProperty.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityCollectionProperty.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityProperty.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityProperty.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityProperty.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningEntityProperty.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningScore.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningScore.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningSolution.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningSolution.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningSolution.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/PlanningSolution.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactCollectionProperty.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactCollectionProperty.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactCollectionProperty.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactCollectionProperty.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactProperty.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactProperty.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactProperty.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/ProblemFactProperty.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/DeepPlanningClone.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/DeepPlanningClone.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/DeepPlanningClone.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/DeepPlanningClone.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/SolutionCloner.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/SolutionCloner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/SolutionCloner.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/SolutionCloner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/cloner/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/domain/solution/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/solution/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/solution/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/CountableValueRange.java b/core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/CountableValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/CountableValueRange.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/CountableValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRange.java b/core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRange.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeFactory.java b/core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeFactory.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeProvider.java b/core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeProvider.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeProvider.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/ValueRangeProvider.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/valuerange/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/valuerange/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/AbstractVariableListener.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/AbstractVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/AbstractVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/AbstractVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/AnchorShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/AnchorShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/AnchorShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/AnchorShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/CustomShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/CustomShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/CustomShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/CustomShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/IndexShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/IndexShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/IndexShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/IndexShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/InverseRelationShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/InverseRelationShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/InverseRelationShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/InverseRelationShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/ListVariableListener.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/ListVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/ListVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/ListVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/NextElementShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/NextElementShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/NextElementShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/NextElementShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PiggybackShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/PiggybackShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PiggybackShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/PiggybackShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningListVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningListVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningListVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningListVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableGraphType.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableGraphType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableGraphType.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableGraphType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableReference.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableReference.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableReference.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/PlanningVariableReference.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PreviousElementShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/PreviousElementShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/PreviousElementShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/PreviousElementShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/ShadowVariable.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/ShadowVariable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/ShadowVariable.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/ShadowVariable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/VariableListener.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/VariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/VariableListener.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/VariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/domain/variable/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/domain/variable/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/domain/variable/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/PentaFunction.java b/core/src/main/java/ai/timefold/solver/core/api/function/PentaFunction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/PentaFunction.java rename to core/src/main/java/ai/timefold/solver/core/api/function/PentaFunction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/PentaPredicate.java b/core/src/main/java/ai/timefold/solver/core/api/function/PentaPredicate.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/PentaPredicate.java rename to core/src/main/java/ai/timefold/solver/core/api/function/PentaPredicate.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/QuadFunction.java b/core/src/main/java/ai/timefold/solver/core/api/function/QuadFunction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/QuadFunction.java rename to core/src/main/java/ai/timefold/solver/core/api/function/QuadFunction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/QuadPredicate.java b/core/src/main/java/ai/timefold/solver/core/api/function/QuadPredicate.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/QuadPredicate.java rename to core/src/main/java/ai/timefold/solver/core/api/function/QuadPredicate.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToIntQuadFunction.java b/core/src/main/java/ai/timefold/solver/core/api/function/ToIntQuadFunction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToIntQuadFunction.java rename to core/src/main/java/ai/timefold/solver/core/api/function/ToIntQuadFunction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToIntTriFunction.java b/core/src/main/java/ai/timefold/solver/core/api/function/ToIntTriFunction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToIntTriFunction.java rename to core/src/main/java/ai/timefold/solver/core/api/function/ToIntTriFunction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToLongQuadFunction.java b/core/src/main/java/ai/timefold/solver/core/api/function/ToLongQuadFunction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToLongQuadFunction.java rename to core/src/main/java/ai/timefold/solver/core/api/function/ToLongQuadFunction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToLongTriFunction.java b/core/src/main/java/ai/timefold/solver/core/api/function/ToLongTriFunction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/ToLongTriFunction.java rename to core/src/main/java/ai/timefold/solver/core/api/function/ToLongTriFunction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/TriConsumer.java b/core/src/main/java/ai/timefold/solver/core/api/function/TriConsumer.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/TriConsumer.java rename to core/src/main/java/ai/timefold/solver/core/api/function/TriConsumer.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/TriFunction.java b/core/src/main/java/ai/timefold/solver/core/api/function/TriFunction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/TriFunction.java rename to core/src/main/java/ai/timefold/solver/core/api/function/TriFunction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/TriPredicate.java b/core/src/main/java/ai/timefold/solver/core/api/function/TriPredicate.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/TriPredicate.java rename to core/src/main/java/ai/timefold/solver/core/api/function/TriPredicate.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/function/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/function/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/function/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/function/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/AbstractBendableScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/AbstractBendableScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/AbstractBendableScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/AbstractBendableScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/AbstractScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/AbstractScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/AbstractScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/AbstractScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/IBendableScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/IBendableScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/IBendableScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/IBendableScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/Score.java b/core/src/main/java/ai/timefold/solver/core/api/score/Score.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/Score.java rename to core/src/main/java/ai/timefold/solver/core/api/score/Score.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/ScoreExplanation.java b/core/src/main/java/ai/timefold/solver/core/api/score/ScoreExplanation.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/ScoreExplanation.java rename to core/src/main/java/ai/timefold/solver/core/api/score/ScoreExplanation.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/ScoreManager.java b/core/src/main/java/ai/timefold/solver/core/api/score/ScoreManager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/ScoreManager.java rename to core/src/main/java/ai/timefold/solver/core/api/score/ScoreManager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/analysis/ConstraintAnalysis.java b/core/src/main/java/ai/timefold/solver/core/api/score/analysis/ConstraintAnalysis.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/analysis/ConstraintAnalysis.java rename to core/src/main/java/ai/timefold/solver/core/api/score/analysis/ConstraintAnalysis.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/analysis/MatchAnalysis.java b/core/src/main/java/ai/timefold/solver/core/api/score/analysis/MatchAnalysis.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/analysis/MatchAnalysis.java rename to core/src/main/java/ai/timefold/solver/core/api/score/analysis/MatchAnalysis.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/analysis/ScoreAnalysis.java b/core/src/main/java/ai/timefold/solver/core/api/score/analysis/ScoreAnalysis.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/analysis/ScoreAnalysis.java rename to core/src/main/java/ai/timefold/solver/core/api/score/analysis/ScoreAnalysis.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/BendableScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/BendableScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/BendableScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/BendableScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendable/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/BendableBigDecimalScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/BendableBigDecimalScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/BendableBigDecimalScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/BendableBigDecimalScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablebigdecimal/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/BendableLongScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/BendableLongScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/BendableLongScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/BendableLongScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/bendablelong/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/HardMediumSoftScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/HardMediumSoftScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/HardMediumSoftScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/HardMediumSoftScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoft/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/HardMediumSoftBigDecimalScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/HardMediumSoftBigDecimalScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/HardMediumSoftBigDecimalScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/HardMediumSoftBigDecimalScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftbigdecimal/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/HardMediumSoftLongScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/HardMediumSoftLongScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/HardMediumSoftLongScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/HardMediumSoftLongScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardmediumsoftlong/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/HardSoftScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/HardSoftScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/HardSoftScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/HardSoftScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoft/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/HardSoftBigDecimalScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/HardSoftBigDecimalScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/HardSoftBigDecimalScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/HardSoftBigDecimalScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftbigdecimal/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/HardSoftLongScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/HardSoftLongScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/HardSoftLongScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/HardSoftLongScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/hardsoftlong/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/SimpleScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/SimpleScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/SimpleScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/SimpleScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/simple/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/SimpleBigDecimalScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/SimpleBigDecimalScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/SimpleBigDecimalScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/SimpleBigDecimalScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplebigdecimal/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/SimpleLongScore.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/SimpleLongScore.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/SimpleLongScore.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/SimpleLongScore.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/buildin/simplelong/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchAwareIncrementalScoreCalculator.java b/core/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchAwareIncrementalScoreCalculator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchAwareIncrementalScoreCalculator.java rename to core/src/main/java/ai/timefold/solver/core/api/score/calculator/ConstraintMatchAwareIncrementalScoreCalculator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/calculator/EasyScoreCalculator.java b/core/src/main/java/ai/timefold/solver/core/api/score/calculator/EasyScoreCalculator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/calculator/EasyScoreCalculator.java rename to core/src/main/java/ai/timefold/solver/core/api/score/calculator/EasyScoreCalculator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/calculator/IncrementalScoreCalculator.java b/core/src/main/java/ai/timefold/solver/core/api/score/calculator/IncrementalScoreCalculator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/calculator/IncrementalScoreCalculator.java rename to core/src/main/java/ai/timefold/solver/core/api/score/calculator/IncrementalScoreCalculator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatch.java b/core/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatch.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatch.java rename to core/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatch.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatchTotal.java b/core/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatchTotal.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatchTotal.java rename to core/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintMatchTotal.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintRef.java b/core/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintRef.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintRef.java rename to core/src/main/java/ai/timefold/solver/core/api/score/constraint/ConstraintRef.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/Indictment.java b/core/src/main/java/ai/timefold/solver/core/api/score/constraint/Indictment.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/Indictment.java rename to core/src/main/java/ai/timefold/solver/core/api/score/constraint/Indictment.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/constraint/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/constraint/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/constraint/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/director/ScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/api/score/director/ScoreDirector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/director/ScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/api/score/director/ScoreDirector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/Constraint.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/Constraint.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/Constraint.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/Constraint.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintBuilder.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintBuilder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintBuilder.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintBuilder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintCollectors.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintCollectors.java similarity index 99% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintCollectors.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintCollectors.java index 8049b11607..4d9a63b80d 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintCollectors.java +++ b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintCollectors.java @@ -41,10 +41,10 @@ import ai.timefold.solver.core.api.score.stream.tri.TriConstraintCollector; import ai.timefold.solver.core.api.score.stream.uni.UniConstraintCollector; import ai.timefold.solver.core.api.score.stream.uni.UniConstraintStream; -import ai.timefold.solver.core.impl.score.stream.bi.InnerBiConstraintCollectors; -import ai.timefold.solver.core.impl.score.stream.quad.InnerQuadConstraintCollectors; -import ai.timefold.solver.core.impl.score.stream.tri.InnerTriConstraintCollectors; -import ai.timefold.solver.core.impl.score.stream.uni.InnerUniConstraintCollectors; +import ai.timefold.solver.core.impl.score.stream.collector.bi.InnerBiConstraintCollectors; +import ai.timefold.solver.core.impl.score.stream.collector.quad.InnerQuadConstraintCollectors; +import ai.timefold.solver.core.impl.score.stream.collector.tri.InnerTriConstraintCollectors; +import ai.timefold.solver.core.impl.score.stream.collector.uni.InnerUniConstraintCollectors; import ai.timefold.solver.core.impl.util.ConstantLambdaUtils; /** diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintFactory.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintFactory.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintJustification.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintJustification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintJustification.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintJustification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintProvider.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintProvider.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintProvider.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintProvider.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStream.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStream.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStreamImplType.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStreamImplType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStreamImplType.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/ConstraintStreamImplType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/DefaultConstraintJustification.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/DefaultConstraintJustification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/DefaultConstraintJustification.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/DefaultConstraintJustification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/Joiners.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/Joiners.java similarity index 90% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/Joiners.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/Joiners.java index 173da0faac..a994dc0734 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/Joiners.java +++ b/core/src/main/java/ai/timefold/solver/core/api/score/stream/Joiners.java @@ -15,8 +15,15 @@ import ai.timefold.solver.core.api.score.stream.quad.QuadJoiner; import ai.timefold.solver.core.api.score.stream.tri.TriJoiner; import ai.timefold.solver.core.api.score.stream.uni.UniConstraintStream; -import ai.timefold.solver.core.impl.score.stream.JoinerSupport; import ai.timefold.solver.core.impl.score.stream.JoinerType; +import ai.timefold.solver.core.impl.score.stream.common.bi.DefaultBiJoiner; +import ai.timefold.solver.core.impl.score.stream.common.bi.FilteringBiJoiner; +import ai.timefold.solver.core.impl.score.stream.common.penta.DefaultPentaJoiner; +import ai.timefold.solver.core.impl.score.stream.common.penta.FilteringPentaJoiner; +import ai.timefold.solver.core.impl.score.stream.common.quad.DefaultQuadJoiner; +import ai.timefold.solver.core.impl.score.stream.common.quad.FilteringQuadJoiner; +import ai.timefold.solver.core.impl.score.stream.common.tri.DefaultTriJoiner; +import ai.timefold.solver.core.impl.score.stream.common.tri.FilteringTriJoiner; /** * Creates an {@link BiJoiner}, {@link TriJoiner}, ... instance @@ -69,8 +76,7 @@ public static BiJoiner equal(Function mapping */ public static BiJoiner equal(Function leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newBiJoiner(leftMapping, JoinerType.EQUAL, rightMapping); + return new DefaultBiJoiner<>(leftMapping, JoinerType.EQUAL, rightMapping); } /** @@ -102,8 +108,7 @@ public static > BiJoiner lessTh */ public static > BiJoiner lessThan( Function leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newBiJoiner(leftMapping, JoinerType.LESS_THAN, rightMapping); + return new DefaultBiJoiner<>(leftMapping, JoinerType.LESS_THAN, rightMapping); } /** @@ -137,8 +142,7 @@ public static > BiJoiner lessTh */ public static > BiJoiner lessThanOrEqual( Function leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newBiJoiner(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); + return new DefaultBiJoiner<>(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); } /** @@ -171,8 +175,7 @@ public static > BiJoiner greate */ public static > BiJoiner greaterThan( Function leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newBiJoiner(leftMapping, JoinerType.GREATER_THAN, rightMapping); + return new DefaultBiJoiner<>(leftMapping, JoinerType.GREATER_THAN, rightMapping); } /** @@ -206,8 +209,7 @@ public static > BiJoiner greate */ public static > BiJoiner greaterThanOrEqual( Function leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newBiJoiner(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); + return new DefaultBiJoiner<>(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); } /** @@ -223,8 +225,7 @@ public static > BiJoiner gre * @return never null */ public static BiJoiner filtering(BiPredicate filter) { - return JoinerSupport.getJoinerService() - .newBiJoiner(filter); + return new FilteringBiJoiner<>(filter); } /** @@ -284,8 +285,7 @@ public static > BiJoiner ove */ public static TriJoiner equal(BiFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newTriJoiner(leftMapping, JoinerType.EQUAL, rightMapping); + return new DefaultTriJoiner<>(leftMapping, JoinerType.EQUAL, rightMapping); } /** @@ -301,8 +301,7 @@ public static TriJoiner equal(BiFunction> TriJoiner lessThan( BiFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newTriJoiner(leftMapping, JoinerType.LESS_THAN, rightMapping); + return new DefaultTriJoiner<>(leftMapping, JoinerType.LESS_THAN, rightMapping); } /** @@ -318,8 +317,7 @@ public static > TriJoiner> TriJoiner lessThanOrEqual( BiFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newTriJoiner(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); + return new DefaultTriJoiner<>(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); } /** @@ -335,8 +333,7 @@ public static > TriJoiner> TriJoiner greaterThan( BiFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newTriJoiner(leftMapping, JoinerType.GREATER_THAN, rightMapping); + return new DefaultTriJoiner<>(leftMapping, JoinerType.GREATER_THAN, rightMapping); } /** @@ -352,8 +349,7 @@ public static > TriJoiner> TriJoiner greaterThanOrEqual( BiFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newTriJoiner(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); + return new DefaultTriJoiner<>(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); } /** @@ -366,8 +362,7 @@ public static > TriJoiner TriJoiner filtering(TriPredicate filter) { - return JoinerSupport.getJoinerService() - .newTriJoiner(filter); + return new FilteringTriJoiner<>(filter); } /** @@ -408,8 +403,7 @@ public static > TriJoiner QuadJoiner equal( TriFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newQuadJoiner(leftMapping, JoinerType.EQUAL, rightMapping); + return new DefaultQuadJoiner<>(leftMapping, JoinerType.EQUAL, rightMapping); } /** @@ -426,8 +420,7 @@ public static QuadJoiner equal( */ public static > QuadJoiner lessThan( TriFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newQuadJoiner(leftMapping, JoinerType.LESS_THAN, rightMapping); + return new DefaultQuadJoiner<>(leftMapping, JoinerType.LESS_THAN, rightMapping); } /** @@ -444,8 +437,7 @@ public static > QuadJoiner> QuadJoiner lessThanOrEqual( TriFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newQuadJoiner(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); + return new DefaultQuadJoiner<>(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); } /** @@ -462,8 +454,7 @@ public static > QuadJoiner> QuadJoiner greaterThan( TriFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newQuadJoiner(leftMapping, JoinerType.GREATER_THAN, rightMapping); + return new DefaultQuadJoiner<>(leftMapping, JoinerType.GREATER_THAN, rightMapping); } /** @@ -480,8 +471,7 @@ public static > QuadJoiner> QuadJoiner greaterThanOrEqual( TriFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newQuadJoiner(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); + return new DefaultQuadJoiner<>(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); } /** @@ -495,8 +485,7 @@ public static > QuadJoiner QuadJoiner filtering(QuadPredicate filter) { - return JoinerSupport.getJoinerService() - .newQuadJoiner(filter); + return new FilteringQuadJoiner<>(filter); } /** @@ -539,8 +528,7 @@ public static > QuadJoiner PentaJoiner equal( QuadFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newPentaJoiner(leftMapping, JoinerType.EQUAL, rightMapping); + return new DefaultPentaJoiner<>(leftMapping, JoinerType.EQUAL, rightMapping); } /** @@ -558,8 +546,7 @@ public static PentaJoiner equal( */ public static > PentaJoiner lessThan( QuadFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newPentaJoiner(leftMapping, JoinerType.LESS_THAN, rightMapping); + return new DefaultPentaJoiner<>(leftMapping, JoinerType.LESS_THAN, rightMapping); } /** @@ -577,8 +564,7 @@ public static > PentaJoin */ public static > PentaJoiner lessThanOrEqual( QuadFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newPentaJoiner(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); + return new DefaultPentaJoiner<>(leftMapping, JoinerType.LESS_THAN_OR_EQUAL, rightMapping); } /** @@ -596,8 +582,7 @@ public static > PentaJoin */ public static > PentaJoiner greaterThan( QuadFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newPentaJoiner(leftMapping, JoinerType.GREATER_THAN, rightMapping); + return new DefaultPentaJoiner<>(leftMapping, JoinerType.GREATER_THAN, rightMapping); } /** @@ -615,8 +600,7 @@ public static > PentaJoin */ public static > PentaJoiner greaterThanOrEqual( QuadFunction leftMapping, Function rightMapping) { - return JoinerSupport.getJoinerService() - .newPentaJoiner(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); + return new DefaultPentaJoiner<>(leftMapping, JoinerType.GREATER_THAN_OR_EQUAL, rightMapping); } /** @@ -631,8 +615,7 @@ public static > PentaJoin * @return never null */ public static PentaJoiner filtering(PentaPredicate filter) { - return JoinerSupport.getJoinerService() - .newPentaJoiner(filter); + return new FilteringPentaJoiner<>(filter); } /** diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintBuilder.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintBuilder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintBuilder.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintBuilder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintCollector.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintCollector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintCollector.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintCollector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintStream.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiConstraintStream.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiJoiner.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiJoiner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiJoiner.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/BiJoiner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/bi/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/bi/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/common/Break.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/common/Break.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/common/Break.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/common/Break.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/common/Sequence.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/common/Sequence.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/common/Sequence.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/common/Sequence.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/common/SequenceChain.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/common/SequenceChain.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/common/SequenceChain.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/common/SequenceChain.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/penta/PentaJoiner.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/penta/PentaJoiner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/penta/PentaJoiner.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/penta/PentaJoiner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintBuilder.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintBuilder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintBuilder.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintBuilder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintCollector.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintCollector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintCollector.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintCollector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintStream.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadConstraintStream.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadJoiner.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadJoiner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadJoiner.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/QuadJoiner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/quad/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/quad/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintBuilder.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintBuilder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintBuilder.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintBuilder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintCollector.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintCollector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintCollector.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintCollector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintStream.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriConstraintStream.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriJoiner.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriJoiner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriJoiner.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/TriJoiner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/tri/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/tri/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintBuilder.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintBuilder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintBuilder.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintBuilder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintCollector.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintCollector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintCollector.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintCollector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintStream.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/UniConstraintStream.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/score/stream/uni/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/score/stream/uni/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/ProblemFactChange.java b/core/src/main/java/ai/timefold/solver/core/api/solver/ProblemFactChange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/ProblemFactChange.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/ProblemFactChange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/ProblemSizeStatistics.java b/core/src/main/java/ai/timefold/solver/core/api/solver/ProblemSizeStatistics.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/ProblemSizeStatistics.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/ProblemSizeStatistics.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/RecommendedFit.java b/core/src/main/java/ai/timefold/solver/core/api/solver/RecommendedFit.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/RecommendedFit.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/RecommendedFit.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/ScoreAnalysisFetchPolicy.java b/core/src/main/java/ai/timefold/solver/core/api/solver/ScoreAnalysisFetchPolicy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/ScoreAnalysisFetchPolicy.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/ScoreAnalysisFetchPolicy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolutionManager.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolutionManager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolutionManager.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolutionManager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolutionUpdatePolicy.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolutionUpdatePolicy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolutionUpdatePolicy.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolutionUpdatePolicy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/Solver.java b/core/src/main/java/ai/timefold/solver/core/api/solver/Solver.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/Solver.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/Solver.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverConfigOverride.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolverConfigOverride.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverConfigOverride.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolverConfigOverride.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverFactory.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolverFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverFactory.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolverFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverJob.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolverJob.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverJob.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolverJob.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverJobBuilder.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolverJobBuilder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverJobBuilder.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolverJobBuilder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverManager.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolverManager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverManager.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolverManager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverStatus.java b/core/src/main/java/ai/timefold/solver/core/api/solver/SolverStatus.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/SolverStatus.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/SolverStatus.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChange.java b/core/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChange.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChangeDirector.java b/core/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChangeDirector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChangeDirector.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/change/ProblemChangeDirector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/event/BestSolutionChangedEvent.java b/core/src/main/java/ai/timefold/solver/core/api/solver/event/BestSolutionChangedEvent.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/event/BestSolutionChangedEvent.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/event/BestSolutionChangedEvent.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/event/SolverEventListener.java b/core/src/main/java/ai/timefold/solver/core/api/solver/event/SolverEventListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/event/SolverEventListener.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/event/SolverEventListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/event/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/solver/event/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/event/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/event/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/package-info.java b/core/src/main/java/ai/timefold/solver/core/api/solver/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/api/solver/package-info.java rename to core/src/main/java/ai/timefold/solver/core/api/solver/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/AbstractConfig.java b/core/src/main/java/ai/timefold/solver/core/config/AbstractConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/AbstractConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/AbstractConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicPhaseConfig.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicPhaseConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicPhaseConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicPhaseConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicType.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicType.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/ConstructionHeuristicType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicForagerConfig.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicForagerConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicForagerConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicForagerConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicPickEarlyType.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicPickEarlyType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicPickEarlyType.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/ConstructionHeuristicPickEarlyType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/decider/forager/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/EntityPlacerConfig.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/EntityPlacerConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/EntityPlacerConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/EntityPlacerConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/PooledEntityPlacerConfig.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/PooledEntityPlacerConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/PooledEntityPlacerConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/PooledEntityPlacerConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedEntityPlacerConfig.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedEntityPlacerConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedEntityPlacerConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedEntityPlacerConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedValuePlacerConfig.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedValuePlacerConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedValuePlacerConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/QueuedValuePlacerConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/constructionheuristic/placer/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchPhaseConfig.java b/core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchPhaseConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchPhaseConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchPhaseConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchType.java b/core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchType.java rename to core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/ExhaustiveSearchType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/NodeExplorationType.java b/core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/NodeExplorationType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/NodeExplorationType.java rename to core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/NodeExplorationType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/exhaustivesearch/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/SelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/SelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/SelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/SelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionCacheType.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionCacheType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionCacheType.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionCacheType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionOrder.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionOrder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionOrder.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/SelectionOrder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/SelectionSorterOrder.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/SelectionSorterOrder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/SelectionSorterOrder.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/SelectionSorterOrder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/decorator/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionDistributionType.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionDistributionType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionDistributionType.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/NearbySelectionDistributionType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/nearby/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/common/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySorterManner.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySorterManner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySorterManner.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/EntitySorterManner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/PillarSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/PillarSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/PillarSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/PillarSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/SubPillarConfigPolicy.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/SubPillarConfigPolicy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/SubPillarConfigPolicy.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/SubPillarConfigPolicy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/entity/pillar/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/DestinationSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/DestinationSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/DestinationSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/DestinationSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/SubListSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/SubListSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/SubListSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/SubListSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/list/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/MoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/MoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/MoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/MoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/NearbyAutoConfigurationMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/NearbyAutoConfigurationMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/NearbyAutoConfigurationMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/NearbyAutoConfigurationMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/CartesianProductMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/CartesianProductMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/CartesianProductMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/CartesianProductMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/UnionMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/UnionMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/UnionMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/UnionMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/composite/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveIteratorFactoryConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveIteratorFactoryConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveIteratorFactoryConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveIteratorFactoryConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveListFactoryConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveListFactoryConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveListFactoryConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/MoveListFactoryConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/factory/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/AbstractPillarMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/AbstractPillarMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/AbstractPillarMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/AbstractPillarMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/ChangeMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/ChangeMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/ChangeMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/ChangeMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarChangeMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarChangeMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarChangeMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarChangeMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarSwapMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarSwapMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarSwapMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/PillarSwapMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SubPillarType.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SubPillarType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SubPillarType.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SubPillarType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SwapMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SwapMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SwapMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/SwapMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/KOptMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/KOptMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/KOptMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/KOptMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainChangeMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainSwapMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainSwapMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainSwapMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/SubChainSwapMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/TailChainSwapMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/TailChainSwapMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/TailChainSwapMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/TailChainSwapMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/chained/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListChangeMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListChangeMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListChangeMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListChangeMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListSwapMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListSwapMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListSwapMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/ListSwapMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListChangeMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListChangeMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListChangeMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListChangeMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListSwapMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListSwapMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListSwapMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/SubListSwapMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/KOptListMoveSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/KOptListMoveSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/KOptListMoveSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/KOptListMoveSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/kopt/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/list/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/generic/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/move/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSorterManner.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSorterManner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSorterManner.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/ValueSorterManner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/SubChainSelectorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/SubChainSelectorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/SubChainSelectorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/SubChainSelectorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/chained/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/heuristic/selector/value/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchPhaseConfig.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchPhaseConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchPhaseConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchPhaseConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchType.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchType.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/LocalSearchType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/AcceptorType.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/AcceptorType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/AcceptorType.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/AcceptorType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/LocalSearchAcceptorConfig.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/LocalSearchAcceptorConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/LocalSearchAcceptorConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/LocalSearchAcceptorConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingType.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingType.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/acceptor/stepcountinghillclimbing/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/FinalistPodiumType.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/FinalistPodiumType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/FinalistPodiumType.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/FinalistPodiumType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchForagerConfig.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchForagerConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchForagerConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchForagerConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchPickEarlyType.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchPickEarlyType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchPickEarlyType.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/LocalSearchPickEarlyType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/decider/forager/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/localsearch/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/localsearch/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/localsearch/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/partitionedsearch/PartitionedSearchPhaseConfig.java b/core/src/main/java/ai/timefold/solver/core/config/partitionedsearch/PartitionedSearchPhaseConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/partitionedsearch/PartitionedSearchPhaseConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/partitionedsearch/PartitionedSearchPhaseConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/partitionedsearch/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/partitionedsearch/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/partitionedsearch/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/partitionedsearch/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/NoChangePhaseConfig.java b/core/src/main/java/ai/timefold/solver/core/config/phase/NoChangePhaseConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/NoChangePhaseConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/phase/NoChangePhaseConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/PhaseConfig.java b/core/src/main/java/ai/timefold/solver/core/config/phase/PhaseConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/PhaseConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/phase/PhaseConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/custom/CustomPhaseConfig.java b/core/src/main/java/ai/timefold/solver/core/config/phase/custom/CustomPhaseConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/custom/CustomPhaseConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/phase/custom/CustomPhaseConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/custom/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/phase/custom/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/custom/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/phase/custom/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/phase/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/phase/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/phase/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/score/definition/ScoreDefinitionType.java b/core/src/main/java/ai/timefold/solver/core/config/score/definition/ScoreDefinitionType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/score/definition/ScoreDefinitionType.java rename to core/src/main/java/ai/timefold/solver/core/config/score/definition/ScoreDefinitionType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/score/definition/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/score/definition/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/score/definition/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/score/definition/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/score/director/ScoreDirectorFactoryConfig.java b/core/src/main/java/ai/timefold/solver/core/config/score/director/ScoreDirectorFactoryConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/score/director/ScoreDirectorFactoryConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/score/director/ScoreDirectorFactoryConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/score/director/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/score/director/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/score/director/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/score/director/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/score/trend/InitializingScoreTrendLevel.java b/core/src/main/java/ai/timefold/solver/core/config/score/trend/InitializingScoreTrendLevel.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/score/trend/InitializingScoreTrendLevel.java rename to core/src/main/java/ai/timefold/solver/core/config/score/trend/InitializingScoreTrendLevel.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/score/trend/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/score/trend/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/score/trend/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/score/trend/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/EnvironmentMode.java b/core/src/main/java/ai/timefold/solver/core/config/solver/EnvironmentMode.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/EnvironmentMode.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/EnvironmentMode.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/SolverConfig.java b/core/src/main/java/ai/timefold/solver/core/config/solver/SolverConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/SolverConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/SolverConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/SolverManagerConfig.java b/core/src/main/java/ai/timefold/solver/core/config/solver/SolverManagerConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/SolverManagerConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/SolverManagerConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/monitoring/MonitoringConfig.java b/core/src/main/java/ai/timefold/solver/core/config/solver/monitoring/MonitoringConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/monitoring/MonitoringConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/monitoring/MonitoringConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/monitoring/SolverMetric.java b/core/src/main/java/ai/timefold/solver/core/config/solver/monitoring/SolverMetric.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/monitoring/SolverMetric.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/monitoring/SolverMetric.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/monitoring/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/solver/monitoring/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/monitoring/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/monitoring/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/solver/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/random/RandomType.java b/core/src/main/java/ai/timefold/solver/core/config/solver/random/RandomType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/random/RandomType.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/random/RandomType.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/random/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/solver/random/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/random/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/random/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationCompositionStyle.java b/core/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationCompositionStyle.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationCompositionStyle.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationCompositionStyle.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationConfig.java b/core/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationConfig.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationConfig.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/termination/TerminationConfig.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/termination/package-info.java b/core/src/main/java/ai/timefold/solver/core/config/solver/termination/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/solver/termination/package-info.java rename to core/src/main/java/ai/timefold/solver/core/config/solver/termination/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/config/util/ConfigUtils.java b/core/src/main/java/ai/timefold/solver/core/config/util/ConfigUtils.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/config/util/ConfigUtils.java rename to core/src/main/java/ai/timefold/solver/core/config/util/ConfigUtils.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java b/core/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java similarity index 87% rename from core/core-impl/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java rename to core/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java index 7896a017b3..426583ad18 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java +++ b/core/src/main/java/ai/timefold/solver/core/enterprise/TimefoldSolverEnterpriseService.java @@ -1,6 +1,6 @@ package ai.timefold.solver.core.enterprise; -import java.util.ServiceLoader; +import java.lang.reflect.InvocationTargetException; import java.util.function.BiFunction; import ai.timefold.solver.core.api.score.stream.ConstraintProvider; @@ -34,28 +34,36 @@ public interface TimefoldSolverEnterpriseService { static String identifySolverVersion() { - var packaging = TimefoldSolverEnterpriseService.load() == null ? "Community Edition" : "Enterprise Edition"; + var packaging = "Community Edition"; + try { + TimefoldSolverEnterpriseService.load(); + packaging = "Enterprise Edition"; + } catch (Exception e) { + // No need to do anything, just checking if Enterprise exists. + } var version = SolverFactory.class.getPackage().getImplementationVersion(); return packaging + " " + (version == null ? "(Development snapshot)" : "v" + version); } - static TimefoldSolverEnterpriseService load() { - var serviceLoader = ServiceLoader.load(TimefoldSolverEnterpriseService.class); - var iterator = serviceLoader.iterator(); - return iterator.hasNext() ? iterator.next() : null; + static TimefoldSolverEnterpriseService load() throws ClassNotFoundException, NoSuchMethodException, + InvocationTargetException, InstantiationException, IllegalAccessException { + // Avoids ServiceLoader by using reflection directly. + var clz = (Class) Class + .forName("ai.timefold.solver.enterprise.core.DefaultTimefoldSolverEnterpriseService"); + return clz.getDeclaredConstructor().newInstance(); } static TimefoldSolverEnterpriseService loadOrFail(Feature feature) { - var service = load(); - if (service == null) { + try { + return load(); + } catch (Exception cause) { throw new IllegalStateException(""" %s requested but Timefold Solver Enterprise Edition not found on classpath Either add the ai.timefold.solver.enterprise:timefold-solver-enterprise-core dependency, or %s. "Note: Timefold Solver Enterprise Edition is a commercial product.""" - .formatted(feature.getName(), feature.getWorkaround())); + .formatted(feature.getName(), feature.getWorkaround()), cause); } - return service; } Class diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/AbstractFromConfigFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/AbstractFromConfigFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/AbstractFromConfigFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/AbstractFromConfigFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/ConstructionHeuristicPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/ConstructionHeuristicPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/ConstructionHeuristicPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/ConstructionHeuristicPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseFactory.java similarity index 98% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseFactory.java index 9b7e64ca0d..d40b481da7 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/DefaultConstructionHeuristicPhaseFactory.java @@ -172,8 +172,7 @@ private ConstructionHeuristicDecider buildDecider(HeuristicConfigPoli if (moveThreadCount == null) { decider = new ConstructionHeuristicDecider<>(configPolicy.getLogIndentation(), termination, forager); } else { - decider = TimefoldSolverEnterpriseService - .loadOrFail(TimefoldSolverEnterpriseService.Feature.MULTITHREADED_SOLVING) + decider = TimefoldSolverEnterpriseService.loadOrFail(TimefoldSolverEnterpriseService.Feature.MULTITHREADED_SOLVING) .buildConstructionHeuristic(moveThreadCount, termination, forager, environmentMode, configPolicy); } if (environmentMode.isNonIntrusiveFullAsserted()) { diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/ConstructionHeuristicDecider.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/ConstructionHeuristicDecider.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/ConstructionHeuristicDecider.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/ConstructionHeuristicDecider.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/AbstractConstructionHeuristicForager.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/AbstractConstructionHeuristicForager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/AbstractConstructionHeuristicForager.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/AbstractConstructionHeuristicForager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForager.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForager.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForagerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForagerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForagerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/ConstructionHeuristicForagerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/DefaultConstructionHeuristicForager.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/DefaultConstructionHeuristicForager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/DefaultConstructionHeuristicForager.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/decider/forager/DefaultConstructionHeuristicForager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListener.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListenerAdapter.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListenerAdapter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListenerAdapter.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/event/ConstructionHeuristicPhaseLifecycleListenerAdapter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacer.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacer.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacer.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacer.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/AbstractEntityPlacerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacer.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacer.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacer.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacer.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/EntityPlacerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/Placement.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/Placement.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/Placement.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/Placement.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacer.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacer.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacer.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacer.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/PooledEntityPlacerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacer.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacer.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacer.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacer.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedEntityPlacerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacer.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacer.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacer.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacer.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/placer/QueuedValuePlacerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicMoveScope.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicMoveScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicMoveScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicMoveScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicPhaseScope.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicPhaseScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicPhaseScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicPhaseScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicStepScope.java b/core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicStepScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicStepScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/constructionheuristic/scope/ConstructionHeuristicStepScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/AlphabeticMemberComparator.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/AlphabeticMemberComparator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/AlphabeticMemberComparator.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/AlphabeticMemberComparator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/ReflectionHelper.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/ReflectionHelper.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/ReflectionHelper.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/ReflectionHelper.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/AbstractMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/AbstractMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/AbstractMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/AbstractMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/MemberAccessorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionBeanPropertyMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionBeanPropertyMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionBeanPropertyMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionBeanPropertyMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionFieldMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionFieldMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionFieldMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionFieldMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionMethodMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionMethodMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionMethodMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/ReflectionMethodMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractGizmoMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractGizmoMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractGizmoMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractGizmoMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadOnlyGizmoMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadOnlyGizmoMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadOnlyGizmoMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadOnlyGizmoMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadWriteGizmoMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadWriteGizmoMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadWriteGizmoMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/AbstractReadWriteGizmoMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoClassLoader.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoClassLoader.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoClassLoader.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoClassLoader.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoFieldHandler.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoFieldHandler.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoFieldHandler.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoFieldHandler.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorImplementor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorImplementor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorImplementor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberAccessorImplementor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberHandler.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberHandler.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberHandler.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberHandler.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberInfo.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberInfo.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberInfo.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMemberInfo.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMethodHandler.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMethodHandler.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMethodHandler.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/common/accessor/gizmo/GizmoMethodHandler.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintConfigurationDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintConfigurationDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintConfigurationDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintConfigurationDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintWeightDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintWeightDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintWeightDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/constraintweight/descriptor/ConstraintWeightDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/EntityDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/EntityDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/EntityDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/EntityDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/PlanningPinToIndexReader.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/PlanningPinToIndexReader.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/PlanningPinToIndexReader.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/entity/descriptor/PlanningPinToIndexReader.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ClassAndPlanningIdComparator.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ClassAndPlanningIdComparator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ClassAndPlanningIdComparator.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ClassAndPlanningIdComparator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/EqualsLookUpStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/EqualsLookUpStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/EqualsLookUpStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/EqualsLookUpStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ImmutableLookUpStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ImmutableLookUpStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ImmutableLookUpStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/ImmutableLookUpStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpManager.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpManager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpManager.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpManager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyResolver.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyResolver.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyResolver.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/LookUpStrategyResolver.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/NoneLookUpStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/NoneLookUpStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/NoneLookUpStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/NoneLookUpStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/PlanningIdLookUpStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/PlanningIdLookUpStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/lookup/PlanningIdLookUpStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/lookup/PlanningIdLookUpStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/policy/DescriptorPolicy.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/policy/DescriptorPolicy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/policy/DescriptorPolicy.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/policy/DescriptorPolicy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/score/descriptor/ScoreDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/score/descriptor/ScoreDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/score/descriptor/ScoreDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/score/descriptor/ScoreDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ConcurrentMemoization.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ConcurrentMemoization.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ConcurrentMemoization.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ConcurrentMemoization.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningFieldCloner.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningFieldCloner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningFieldCloner.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningFieldCloner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningUtils.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningUtils.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningUtils.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/DeepCloningUtils.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldAccessingSolutionCloner.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldAccessingSolutionCloner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldAccessingSolutionCloner.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldAccessingSolutionCloner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldCloningUtils.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldCloningUtils.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldCloningUtils.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/FieldCloningUtils.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ShallowCloningFieldCloner.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ShallowCloningFieldCloner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ShallowCloningFieldCloner.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/ShallowCloningFieldCloner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoCloningUtils.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoCloningUtils.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoCloningUtils.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoCloningUtils.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionCloner.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionCloner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionCloner.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionCloner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerImplementor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerImplementor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerImplementor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionClonerImplementor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionOrEntityDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionOrEntityDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionOrEntityDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/cloner/gizmo/GizmoSolutionOrEntityDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/DummyMemberAccessor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/DummyMemberAccessor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/DummyMemberAccessor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/DummyMemberAccessor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/ProblemScaleTracker.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/ProblemScaleTracker.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/ProblemScaleTracker.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/ProblemScaleTracker.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/mutation/MutationCounter.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/solution/mutation/MutationCounter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/solution/mutation/MutationCounter.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/solution/mutation/MutationCounter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractCountableValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractCountableValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractCountableValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractCountableValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractUncountableValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractUncountableValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractUncountableValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/AbstractUncountableValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/bigdecimal/BigDecimalValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/bigdecimal/BigDecimalValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/bigdecimal/BigDecimalValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/bigdecimal/BigDecimalValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/biginteger/BigIntegerValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/biginteger/BigIntegerValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/biginteger/BigIntegerValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/biginteger/BigIntegerValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/collection/ListValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/collection/ListValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/collection/ListValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/collection/ListValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/CompositeCountableValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/CompositeCountableValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/CompositeCountableValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/CompositeCountableValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/EmptyValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/EmptyValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/EmptyValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/EmptyValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/NullAllowingCountableValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/NullAllowingCountableValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/NullAllowingCountableValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/composite/NullAllowingCountableValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primboolean/BooleanValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primboolean/BooleanValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primboolean/BooleanValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primboolean/BooleanValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primdouble/DoubleValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primdouble/DoubleValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primdouble/DoubleValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primdouble/DoubleValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primint/IntValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primint/IntValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primint/IntValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primint/IntValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primlong/LongValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primlong/LongValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primlong/LongValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/primlong/LongValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/temporal/TemporalValueRange.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/temporal/TemporalValueRange.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/temporal/TemporalValueRange.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/buildin/temporal/TemporalValueRange.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractFromPropertyValueRangeDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractFromPropertyValueRangeDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractFromPropertyValueRangeDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractFromPropertyValueRangeDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractValueRangeDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractValueRangeDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractValueRangeDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/AbstractValueRangeDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/CompositeValueRangeDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/CompositeValueRangeDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/CompositeValueRangeDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/CompositeValueRangeDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/EntityIndependentValueRangeDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/EntityIndependentValueRangeDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/EntityIndependentValueRangeDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/EntityIndependentValueRangeDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromEntityPropertyValueRangeDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromEntityPropertyValueRangeDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromEntityPropertyValueRangeDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromEntityPropertyValueRangeDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromSolutionPropertyValueRangeDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromSolutionPropertyValueRangeDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromSolutionPropertyValueRangeDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/FromSolutionPropertyValueRangeDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/ValueRangeDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/ValueRangeDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/ValueRangeDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/descriptor/ValueRangeDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/util/ValueRangeIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/util/ValueRangeIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/util/ValueRangeIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/valuerange/util/ValueRangeIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ExternalizedListVariableStateSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ExternalizedListVariableStateSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ExternalizedListVariableStateSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ExternalizedListVariableStateSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableElementStateSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableElementStateSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableElementStateSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableElementStateSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateDemand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateDemand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateDemand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateDemand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/ListVariableStateSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableDemand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableDemand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableDemand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableDemand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/AnchorVariableSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/ExternalizedAnchorVariableSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/ExternalizedAnchorVariableSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/ExternalizedAnchorVariableSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/anchor/ExternalizedAnchorVariableSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/CustomShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/CustomShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/CustomShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/CustomShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/LegacyCustomShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/LegacyCustomShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/LegacyCustomShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/LegacyCustomShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/PiggybackShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/PiggybackShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/PiggybackShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/PiggybackShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/BasicVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/BasicVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/BasicVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/BasicVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/GenuineVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/GenuineVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/GenuineVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/GenuineVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ListVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ListVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ListVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ListVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/ShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/VariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/VariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/VariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/descriptor/VariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableDemand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableDemand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableDemand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableDemand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/index/IndexVariableSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableDemand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableDemand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableDemand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableDemand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/CollectionInverseVariableSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedCollectionInverseVariableSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedCollectionInverseVariableSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedCollectionInverseVariableSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedCollectionInverseVariableSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedSingletonInverseVariableSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedSingletonInverseVariableSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedSingletonInverseVariableSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/ExternalizedSingletonInverseVariableSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/InverseRelationShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/InverseRelationShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/InverseRelationShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/InverseRelationShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableDemand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableDemand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableDemand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableDemand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableSupply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableSupply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableSupply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonInverseVariableSupply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableDemand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableDemand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableDemand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableDemand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/inverserelation/SingletonListInverseVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/SourcedVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/SourcedVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/SourcedVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/SourcedVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/VariableListenerWithSources.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/VariableListenerWithSources.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/VariableListenerWithSources.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/VariableListenerWithSources.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotifiable.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotifiable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotifiable.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotifiable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/AbstractNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/BasicVariableNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/BasicVariableNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/BasicVariableNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/BasicVariableNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ElementUnassignedNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ElementUnassignedNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ElementUnassignedNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ElementUnassignedNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityAddedNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityAddedNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityAddedNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityAddedNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotifiable.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotifiable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotifiable.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotifiable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityRemovedNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityRemovedNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityRemovedNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/EntityRemovedNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableChangedNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableChangedNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableChangedNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableChangedNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableListenerNotifiable.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableListenerNotifiable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableListenerNotifiable.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableListenerNotifiable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/ListVariableNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notifiable.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notifiable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notifiable.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notifiable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/NotifiableRegistry.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/NotifiableRegistry.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/NotifiableRegistry.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/NotifiableRegistry.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/Notification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableChangedNotification.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableChangedNotification.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableChangedNotification.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableChangedNotification.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerNotifiable.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerNotifiable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerNotifiable.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerNotifiable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerSupport.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerSupport.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerSupport.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/VariableListenerSupport.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ListVariableTracker.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ListVariableTracker.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ListVariableTracker.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ListVariableTracker.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariableSnapshot.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariableSnapshot.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariableSnapshot.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariableSnapshot.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariablesAssert.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariablesAssert.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariablesAssert.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/ShadowVariablesAssert.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/SolutionTracker.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/SolutionTracker.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/SolutionTracker.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/SolutionTracker.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableId.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableId.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableId.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableId.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshot.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshot.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshot.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshot.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshotTotal.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshotTotal.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshotTotal.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableSnapshotTotal.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableTracker.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableTracker.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableTracker.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/listener/support/violation/VariableTracker.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/AbstractNextPrevElementShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/AbstractNextPrevElementShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/AbstractNextPrevElementShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/AbstractNextPrevElementShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/NextElementVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementShadowVariableDescriptor.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementShadowVariableDescriptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementShadowVariableDescriptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementShadowVariableDescriptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementVariableListener.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementVariableListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementVariableListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/nextprev/PreviousElementVariableListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/AbstractVariableDescriptorBasedDemand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/AbstractVariableDescriptorBasedDemand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/AbstractVariableDescriptorBasedDemand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/AbstractVariableDescriptorBasedDemand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Demand.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Demand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Demand.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Demand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Supply.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Supply.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Supply.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/Supply.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/SupplyManager.java b/core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/SupplyManager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/SupplyManager.java rename to core/src/main/java/ai/timefold/solver/core/impl/domain/variable/supply/SupplyManager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhaseFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/DefaultExhaustiveSearchPhaseFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/ExhaustiveSearchPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/ExhaustiveSearchPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/ExhaustiveSearchPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/ExhaustiveSearchPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/decider/ExhaustiveSearchDecider.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/decider/ExhaustiveSearchDecider.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/decider/ExhaustiveSearchDecider.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/decider/ExhaustiveSearchDecider.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/event/ExhaustiveSearchPhaseLifecycleListener.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/event/ExhaustiveSearchPhaseLifecycleListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/event/ExhaustiveSearchPhaseLifecycleListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/event/ExhaustiveSearchPhaseLifecycleListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchLayer.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchLayer.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchLayer.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchLayer.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchNode.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchNode.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/ExhaustiveSearchNode.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/ScoreBounder.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/ScoreBounder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/ScoreBounder.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/ScoreBounder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/TrendBasedScoreBounder.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/TrendBasedScoreBounder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/TrendBasedScoreBounder.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/bounder/TrendBasedScoreBounder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/BreadthFirstNodeComparator.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/BreadthFirstNodeComparator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/BreadthFirstNodeComparator.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/BreadthFirstNodeComparator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/DepthFirstNodeComparator.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/DepthFirstNodeComparator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/DepthFirstNodeComparator.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/DepthFirstNodeComparator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OptimisticBoundFirstNodeComparator.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OptimisticBoundFirstNodeComparator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OptimisticBoundFirstNodeComparator.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OptimisticBoundFirstNodeComparator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OriginalOrderNodeComparator.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OriginalOrderNodeComparator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OriginalOrderNodeComparator.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/OriginalOrderNodeComparator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/ScoreFirstNodeComparator.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/ScoreFirstNodeComparator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/ScoreFirstNodeComparator.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/node/comparator/ScoreFirstNodeComparator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchPhaseScope.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchPhaseScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchPhaseScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchPhaseScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchStepScope.java b/core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchStepScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchStepScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/exhaustivesearch/scope/ExhaustiveSearchStepScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/HeuristicConfigPolicy.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/HeuristicConfigPolicy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/HeuristicConfigPolicy.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/HeuristicConfigPolicy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractMove.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractMove.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractMove.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractMove.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractSimplifiedMove.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractSimplifiedMove.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractSimplifiedMove.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/AbstractSimplifiedMove.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ChangeAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ChangeAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ChangeAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ChangeAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/CompositeMove.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/CompositeMove.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/CompositeMove.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/CompositeMove.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterAssignmentAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterAssignmentAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterAssignmentAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterAssignmentAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterChangeAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterChangeAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterChangeAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterChangeAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterUnassignmentAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterUnassignmentAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterUnassignmentAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableAfterUnassignmentAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeAssignmentAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeAssignmentAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeAssignmentAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeAssignmentAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeChangeAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeChangeAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeChangeAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeChangeAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeUnassignmentAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeUnassignmentAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeUnassignmentAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/ListVariableBeforeUnassignmentAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/Move.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/Move.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/Move.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/Move.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/NoChangeMove.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/NoChangeMove.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/NoChangeMove.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/NoChangeMove.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/RecordedUndoMove.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/RecordedUndoMove.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/RecordedUndoMove.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/RecordedUndoMove.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeAction.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeAction.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeAction.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeAction.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeRecordingScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeRecordingScoreDirector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeRecordingScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/move/VariableChangeRecordingScoreDirector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractDemandEnabledSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractDemandEnabledSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractDemandEnabledSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractDemandEnabledSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelectorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/AbstractSelectorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/IterableSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/IterableSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/IterableSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/IterableSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/ListIterableSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/ListIterableSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/ListIterableSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/ListIterableSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/Selector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/Selector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/Selector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/Selector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleBridge.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleBridge.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleBridge.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleBridge.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleListener.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/SelectionCacheLifecycleListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/ComparatorSelectionSorter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/ComparatorSelectionSorter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/ComparatorSelectionSorter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/ComparatorSelectionSorter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/CompositeSelectionFilter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/CompositeSelectionFilter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/CompositeSelectionFilter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/CompositeSelectionFilter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/FairSelectorProbabilityWeightFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/FairSelectorProbabilityWeightFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/FairSelectorProbabilityWeightFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/FairSelectorProbabilityWeightFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionFilter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionFilter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionFilter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionFilter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionProbabilityWeightFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionProbabilityWeightFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionProbabilityWeightFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionProbabilityWeightFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorterWeightFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorterWeightFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorterWeightFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/SelectionSorterWeightFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/WeightFactorySelectionSorter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/WeightFactorySelectionSorter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/WeightFactorySelectionSorter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/decorator/WeightFactorySelectionSorter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalChangeIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalChangeIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalChangeIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalChangeIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalSwapIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalSwapIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalSwapIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractOriginalSwapIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomChangeIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomChangeIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomChangeIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomChangeIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomSwapIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomSwapIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomSwapIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/AbstractRandomSwapIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/CachedListRandomIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/CachedListRandomIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/CachedListRandomIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/CachedListRandomIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/ListIterable.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/ListIterable.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/ListIterable.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/ListIterable.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionListIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionListIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionListIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SelectionListIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SingletonIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SingletonIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SingletonIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/SingletonIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionListIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionListIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionListIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/iterator/UpcomingSelectionListIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/nearby/NearbyDistanceMeter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/nearby/NearbyDistanceMeter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/nearby/NearbyDistanceMeter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/common/nearby/NearbyDistanceMeter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactory.java similarity index 99% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactory.java index 5e24c5a57a..36e4def16e 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/EntitySelectorFactory.java @@ -175,8 +175,7 @@ private boolean hasFiltering(EntityDescriptor entityDescriptor) { private EntitySelector applyNearbySelection(HeuristicConfigPolicy configPolicy, NearbySelectionConfig nearbySelectionConfig, SelectionCacheType minimumCacheType, SelectionOrder resolvedSelectionOrder, EntitySelector entitySelector) { - return TimefoldSolverEnterpriseService - .loadOrFail(TimefoldSolverEnterpriseService.Feature.NEARBY_SELECTION) + return TimefoldSolverEnterpriseService.loadOrFail(TimefoldSolverEnterpriseService.Feature.NEARBY_SELECTION) .applyNearbySelection(config, configPolicy, nearbySelectionConfig, minimumCacheType, resolvedSelectionOrder, entitySelector); } diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/FromSolutionEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/FromSolutionEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/FromSolutionEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/FromSolutionEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/AbstractCachingEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/AbstractCachingEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/AbstractCachingEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/AbstractCachingEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/CachingEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/CachingEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/CachingEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/CachingEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/FilteringEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/FilteringEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/FilteringEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/FilteringEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/PinEntityFilter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/PinEntityFilter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/PinEntityFilter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/PinEntityFilter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ProbabilityEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ProbabilityEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ProbabilityEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ProbabilityEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SelectedCountLimitEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SelectedCountLimitEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SelectedCountLimitEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SelectedCountLimitEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ShufflingEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ShufflingEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ShufflingEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/ShufflingEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SortingEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SortingEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SortingEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/decorator/SortingEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/EntityMimicRecorder.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/EntityMimicRecorder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/EntityMimicRecorder.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/EntityMimicRecorder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/ManualEntityMimicRecorder.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/ManualEntityMimicRecorder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/ManualEntityMimicRecorder.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/ManualEntityMimicRecorder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicRecordingEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicRecordingEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicRecordingEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicRecordingEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicReplayingEntitySelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicReplayingEntitySelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicReplayingEntitySelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/mimic/MimicReplayingEntitySelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/DefaultPillarSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/DefaultPillarSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/DefaultPillarSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/DefaultPillarSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelectorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/entity/pillar/PillarSelectorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelectorFactory.java similarity index 97% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelectorFactory.java index a0bcd8184b..7e4a41202d 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelectorFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/DestinationSelectorFactory.java @@ -78,8 +78,7 @@ private DestinationSelector applyNearbySelection(HeuristicConfigPolic if (nearbySelectionConfig == null) { return destinationSelector; } - return TimefoldSolverEnterpriseService - .loadOrFail(TimefoldSolverEnterpriseService.Feature.NEARBY_SELECTION) + return TimefoldSolverEnterpriseService.loadOrFail(TimefoldSolverEnterpriseService.Feature.NEARBY_SELECTION) .applyNearbySelection(config, configPolicy, minimumCacheType, resolvedSelectionOrder, destinationSelector); } } diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementDestinationSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementDestinationSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementDestinationSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementDestinationSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocation.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocation.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocation.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocation.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocationRandomIterator.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocationRandomIterator.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocationRandomIterator.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/ElementLocationRandomIterator.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/LocationInList.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/LocationInList.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/LocationInList.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/LocationInList.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/RandomSubListSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/RandomSubListSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/RandomSubListSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/RandomSubListSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubList.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubList.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubList.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubList.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactory.java similarity index 98% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactory.java index ba10536353..a994e33791 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/list/SubListSelectorFactory.java @@ -108,8 +108,7 @@ private SubListSelector applyNearbySelection(HeuristicConfigPolicy applySelectedLimit(ValueSelector val private ValueSelector applyNearbySelection(HeuristicConfigPolicy configPolicy, EntityDescriptor entityDescriptor, SelectionCacheType minimumCacheType, SelectionOrder resolvedSelectionOrder, ValueSelector valueSelector) { - return TimefoldSolverEnterpriseService - .loadOrFail(TimefoldSolverEnterpriseService.Feature.NEARBY_SELECTION) + return TimefoldSolverEnterpriseService.loadOrFail(TimefoldSolverEnterpriseService.Feature.NEARBY_SELECTION) .applyNearbySelection(config, configPolicy, entityDescriptor, minimumCacheType, resolvedSelectionOrder, valueSelector); } diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/DefaultSubChainSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/DefaultSubChainSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/DefaultSubChainSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/DefaultSubChainSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChain.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChain.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChain.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChain.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelectorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/chained/SubChainSelectorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractCachingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractCachingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractCachingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractCachingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractInverseEntityFilteringValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractInverseEntityFilteringValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractInverseEntityFilteringValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AbstractInverseEntityFilteringValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AssignedListValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AssignedListValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AssignedListValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/AssignedListValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/CachingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/CachingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/CachingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/CachingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/DowncastingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/DowncastingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/DowncastingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/DowncastingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityDependentSortingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityDependentSortingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityDependentSortingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityDependentSortingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentFilteringValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentFilteringValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentFilteringValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentFilteringValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentInitializedValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentInitializedValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentInitializedValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/EntityIndependentInitializedValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/FilteringValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/FilteringValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/FilteringValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/FilteringValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/InitializedValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/InitializedValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/InitializedValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/InitializedValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/MovableChainedTrailingValueFilter.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/MovableChainedTrailingValueFilter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/MovableChainedTrailingValueFilter.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/MovableChainedTrailingValueFilter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ProbabilityValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ProbabilityValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ProbabilityValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ProbabilityValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ReinitializeVariableValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ReinitializeVariableValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ReinitializeVariableValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ReinitializeVariableValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SelectedCountLimitValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SelectedCountLimitValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SelectedCountLimitValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SelectedCountLimitValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ShufflingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ShufflingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ShufflingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/ShufflingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SortingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SortingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SortingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/SortingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/UnassignedListValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/UnassignedListValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/UnassignedListValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/decorator/UnassignedListValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicRecordingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicRecordingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicRecordingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicRecordingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicReplayingValueSelector.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicReplayingValueSelector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicReplayingValueSelector.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/MimicReplayingValueSelector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/ValueMimicRecorder.java b/core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/ValueMimicRecorder.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/ValueMimicRecorder.java rename to core/src/main/java/ai/timefold/solver/core/impl/heuristic/selector/value/mimic/ValueMimicRecorder.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/ElementNamespaceOverride.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/ElementNamespaceOverride.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/ElementNamespaceOverride.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/ElementNamespaceOverride.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/GenericJaxbIO.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/GenericJaxbIO.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/GenericJaxbIO.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/GenericJaxbIO.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/JaxbIO.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/JaxbIO.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/JaxbIO.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/JaxbIO.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/SolverConfigIO.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/SolverConfigIO.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/SolverConfigIO.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/SolverConfigIO.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/TimefoldXmlSerializationException.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/TimefoldXmlSerializationException.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/TimefoldXmlSerializationException.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/TimefoldXmlSerializationException.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbCustomPropertiesAdapter.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbCustomPropertiesAdapter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbCustomPropertiesAdapter.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbCustomPropertiesAdapter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbDurationAdapter.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbDurationAdapter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbDurationAdapter.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbDurationAdapter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbLocaleAdapter.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbLocaleAdapter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbLocaleAdapter.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbLocaleAdapter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbOffsetDateTimeAdapter.java b/core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbOffsetDateTimeAdapter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbOffsetDateTimeAdapter.java rename to core/src/main/java/ai/timefold/solver/core/impl/io/jaxb/adapter/JaxbOffsetDateTimeAdapter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java similarity index 99% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java index e76ff87473..1a3d331f55 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/DefaultLocalSearchPhaseFactory.java @@ -80,8 +80,7 @@ private LocalSearchDecider buildDecider(HeuristicConfigPolicy(configPolicy.getLogIndentation(), termination, moveSelector, acceptor, forager); } else { - decider = TimefoldSolverEnterpriseService - .loadOrFail(TimefoldSolverEnterpriseService.Feature.MULTITHREADED_SOLVING) + decider = TimefoldSolverEnterpriseService.loadOrFail(TimefoldSolverEnterpriseService.Feature.MULTITHREADED_SOLVING) .buildLocalSearch(moveThreadCount, termination, moveSelector, acceptor, forager, environmentMode, configPolicy); } diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/LocalSearchPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/LocalSearchPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/LocalSearchPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/LocalSearchPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/LocalSearchDecider.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/LocalSearchDecider.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/LocalSearchDecider.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/LocalSearchDecider.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AbstractAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AbstractAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AbstractAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AbstractAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/Acceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/Acceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/Acceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/Acceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AcceptorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AcceptorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AcceptorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/AcceptorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/CompositeAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/CompositeAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/CompositeAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/CompositeAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/greatdeluge/GreatDelugeAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/hillclimbing/HillClimbingAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/hillclimbing/HillClimbingAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/hillclimbing/HillClimbingAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/hillclimbing/HillClimbingAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/lateacceptance/LateAcceptanceAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/lateacceptance/LateAcceptanceAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/lateacceptance/LateAcceptanceAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/lateacceptance/LateAcceptanceAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/stepcountinghillclimbing/StepCountingHillClimbingAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/AbstractTabuAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/AbstractTabuAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/AbstractTabuAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/AbstractTabuAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/EntityTabuAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/EntityTabuAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/EntityTabuAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/EntityTabuAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/MoveTabuAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/MoveTabuAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/MoveTabuAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/MoveTabuAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/ValueTabuAcceptor.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/ValueTabuAcceptor.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/ValueTabuAcceptor.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/ValueTabuAcceptor.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/AbstractTabuSizeStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/AbstractTabuSizeStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/AbstractTabuSizeStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/AbstractTabuSizeStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/EntityRatioTabuSizeStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/EntityRatioTabuSizeStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/EntityRatioTabuSizeStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/EntityRatioTabuSizeStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/FixedTabuSizeStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/FixedTabuSizeStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/FixedTabuSizeStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/FixedTabuSizeStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/TabuSizeStrategy.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/TabuSizeStrategy.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/TabuSizeStrategy.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/acceptor/tabu/size/TabuSizeStrategy.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AbstractLocalSearchForager.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AbstractLocalSearchForager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AbstractLocalSearchForager.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AbstractLocalSearchForager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AcceptedLocalSearchForager.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AcceptedLocalSearchForager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AcceptedLocalSearchForager.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/AcceptedLocalSearchForager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForager.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForager.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForagerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForagerFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForagerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/LocalSearchForagerFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/AbstractFinalistPodium.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/AbstractFinalistPodium.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/AbstractFinalistPodium.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/AbstractFinalistPodium.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/FinalistPodium.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/FinalistPodium.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/FinalistPodium.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/FinalistPodium.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/HighestScoreFinalistPodium.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/HighestScoreFinalistPodium.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/HighestScoreFinalistPodium.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/HighestScoreFinalistPodium.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/StrategicOscillationByLevelFinalistPodium.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/StrategicOscillationByLevelFinalistPodium.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/StrategicOscillationByLevelFinalistPodium.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/decider/forager/finalist/StrategicOscillationByLevelFinalistPodium.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListener.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListenerAdapter.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListenerAdapter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListenerAdapter.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/event/LocalSearchPhaseLifecycleListenerAdapter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchMoveScope.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchMoveScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchMoveScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchMoveScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchPhaseScope.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchPhaseScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchPhaseScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchPhaseScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchStepScope.java b/core/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchStepScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchStepScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/localsearch/scope/LocalSearchStepScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/package-info.java b/core/src/main/java/ai/timefold/solver/core/impl/package-info.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/package-info.java rename to core/src/main/java/ai/timefold/solver/core/impl/package-info.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/DefaultPartitionedSearchPhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/DefaultPartitionedSearchPhaseFactory.java similarity index 89% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/DefaultPartitionedSearchPhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/DefaultPartitionedSearchPhaseFactory.java index 20ae7c1b27..1ed6c8e73f 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/DefaultPartitionedSearchPhaseFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/DefaultPartitionedSearchPhaseFactory.java @@ -17,8 +17,7 @@ public DefaultPartitionedSearchPhaseFactory(PartitionedSearchPhaseConfig phaseCo @Override public PartitionedSearchPhase buildPhase(int phaseIndex, HeuristicConfigPolicy solverConfigPolicy, BestSolutionRecaller bestSolutionRecaller, Termination solverTermination) { - return TimefoldSolverEnterpriseService - .loadOrFail(TimefoldSolverEnterpriseService.Feature.PARTITIONED_SEARCH) + return TimefoldSolverEnterpriseService.loadOrFail(TimefoldSolverEnterpriseService.Feature.PARTITIONED_SEARCH) .buildPartitionedSearch(phaseIndex, phaseConfig, solverConfigPolicy, solverTermination, this::buildPhaseTermination); } diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/PartitionedSearchPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/PartitionedSearchPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/PartitionedSearchPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/PartitionedSearchPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/partitioner/SolutionPartitioner.java b/core/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/partitioner/SolutionPartitioner.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/partitioner/SolutionPartitioner.java rename to core/src/main/java/ai/timefold/solver/core/impl/partitionedsearch/partitioner/SolutionPartitioner.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhaseFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/AbstractPhaseFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhase.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhaseFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/NoChangePhaseFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/Phase.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/Phase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/Phase.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/Phase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/PhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/PhaseFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/PhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/PhaseFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhaseCommand.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhaseCommand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhaseCommand.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/custom/CustomPhaseCommand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhase.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhase.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhase.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhase.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhaseFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhaseFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhaseFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/custom/DefaultCustomPhaseFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/NoChangeCustomPhaseCommand.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/custom/NoChangeCustomPhaseCommand.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/NoChangeCustomPhaseCommand.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/custom/NoChangeCustomPhaseCommand.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomPhaseScope.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomPhaseScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomPhaseScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomPhaseScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomStepScope.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomStepScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomStepScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/custom/scope/CustomStepScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListener.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListener.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListener.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListener.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListenerAdapter.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListenerAdapter.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListenerAdapter.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleListenerAdapter.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleSupport.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleSupport.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleSupport.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/event/PhaseLifecycleSupport.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractMoveScope.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractMoveScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractMoveScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractMoveScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractPhaseScope.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractPhaseScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractPhaseScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractPhaseScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractStepScope.java b/core/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractStepScope.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractStepScope.java rename to core/src/main/java/ai/timefold/solver/core/impl/phase/scope/AbstractStepScope.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreExplanation.java b/core/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreExplanation.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreExplanation.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreExplanation.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreManager.java b/core/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreManager.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreManager.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/DefaultScoreManager.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/ScoreUtil.java b/core/src/main/java/ai/timefold/solver/core/impl/score/ScoreUtil.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/ScoreUtil.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/ScoreUtil.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableBigDecimalScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableBigDecimalScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableBigDecimalScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableBigDecimalScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableLongScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableLongScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableLongScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableLongScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/BendableScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftBigDecimalScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftBigDecimalScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftBigDecimalScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftBigDecimalScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftLongScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftLongScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftLongScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftLongScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardMediumSoftScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftBigDecimalScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftBigDecimalScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftBigDecimalScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftBigDecimalScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftLongScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftLongScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftLongScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftLongScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/HardSoftScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleBigDecimalScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleBigDecimalScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleBigDecimalScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleBigDecimalScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleLongScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleLongScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleLongScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleLongScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/buildin/SimpleScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultConstraintMatchTotal.java b/core/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultConstraintMatchTotal.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultConstraintMatchTotal.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultConstraintMatchTotal.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultIndictment.java b/core/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultIndictment.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultIndictment.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/constraint/DefaultIndictment.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractBendableScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractBendableScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractBendableScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractBendableScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/definition/AbstractScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/definition/ScoreDefinition.java b/core/src/main/java/ai/timefold/solver/core/impl/score/definition/ScoreDefinition.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/definition/ScoreDefinition.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/definition/ScoreDefinition.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirectorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/AbstractScoreDirectorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirectorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/InnerScoreDirectorFactory.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactory.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactory.java diff --git a/core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java new file mode 100644 index 0000000000..eeff393036 --- /dev/null +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/director/ScoreDirectorFactoryFactory.java @@ -0,0 +1,124 @@ +package ai.timefold.solver.core.impl.score.director; + +import java.util.ArrayList; + +import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; +import ai.timefold.solver.core.config.score.trend.InitializingScoreTrendLevel; +import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.config.util.ConfigUtils; +import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; +import ai.timefold.solver.core.impl.score.director.easy.EasyScoreDirectorFactory; +import ai.timefold.solver.core.impl.score.director.incremental.IncrementalScoreDirectorFactory; +import ai.timefold.solver.core.impl.score.director.stream.BavetConstraintStreamScoreDirectorFactory; +import ai.timefold.solver.core.impl.score.trend.InitializingScoreTrend; + +public class ScoreDirectorFactoryFactory> { + + private final ScoreDirectorFactoryConfig config; + + public ScoreDirectorFactoryFactory(ScoreDirectorFactoryConfig config) { + this.config = config; + } + + public InnerScoreDirectorFactory buildScoreDirectorFactory(EnvironmentMode environmentMode, + SolutionDescriptor solutionDescriptor) { + var scoreDirectorFactory = decideMultipleScoreDirectorFactories(solutionDescriptor, environmentMode); + if (config.getAssertionScoreDirectorFactory() != null) { + if (config.getAssertionScoreDirectorFactory().getAssertionScoreDirectorFactory() != null) { + throw new IllegalArgumentException("A assertionScoreDirectorFactory (" + + config.getAssertionScoreDirectorFactory() + ") cannot have a non-null assertionScoreDirectorFactory (" + + config.getAssertionScoreDirectorFactory().getAssertionScoreDirectorFactory() + ")."); + } + if (environmentMode.compareTo(EnvironmentMode.FAST_ASSERT) > 0) { + throw new IllegalArgumentException("A non-null assertionScoreDirectorFactory (" + + config.getAssertionScoreDirectorFactory() + ") requires an environmentMode (" + + environmentMode + ") of " + EnvironmentMode.FAST_ASSERT + " or lower."); + } + var assertionScoreDirectorFactoryFactory = + new ScoreDirectorFactoryFactory(config.getAssertionScoreDirectorFactory()); + scoreDirectorFactory.setAssertionScoreDirectorFactory(assertionScoreDirectorFactoryFactory + .buildScoreDirectorFactory(EnvironmentMode.NON_REPRODUCIBLE, solutionDescriptor)); + } + scoreDirectorFactory.setInitializingScoreTrend(InitializingScoreTrend.parseTrend( + config.getInitializingScoreTrend() == null ? InitializingScoreTrendLevel.ANY.name() + : config.getInitializingScoreTrend(), + solutionDescriptor.getScoreDefinition().getLevelsSize())); + if (environmentMode.isNonIntrusiveFullAsserted()) { + scoreDirectorFactory.setAssertClonedSolution(true); + } + if (environmentMode.isTracking()) { + scoreDirectorFactory.setTrackingWorkingSolution(true); + } + return scoreDirectorFactory; + } + + protected AbstractScoreDirectorFactory decideMultipleScoreDirectorFactories( + SolutionDescriptor solutionDescriptor, EnvironmentMode environmentMode) { + if (!ConfigUtils.isEmptyCollection(config.getScoreDrlList())) { + throw new IllegalStateException( + """ + DRL constraints requested via scoreDrlList (%s), but this is no longer supported in Timefold Solver 0.9 and later. + Maybe upgrade from scoreDRL to ConstraintStreams using this recipe: https://timefold.ai/blog/migrating-score-drl-to-constraint-streams""" + .formatted(config.getScoreDrlList())); + } + assertCorrectDirectorFactory(config); + + // At this point, we are guaranteed to have at most one score director factory selected. + if (config.getEasyScoreCalculatorClass() != null) { + return EasyScoreDirectorFactory.buildScoreDirectorFactory(solutionDescriptor, config); + } else if (config.getIncrementalScoreCalculatorClass() != null) { + return IncrementalScoreDirectorFactory.buildScoreDirectorFactory(solutionDescriptor, config); + } else if (config.getConstraintProviderClass() != null) { + return BavetConstraintStreamScoreDirectorFactory.buildScoreDirectorFactory(solutionDescriptor, config, + environmentMode); + } else { + throw new IllegalArgumentException( + "The scoreDirectorFactory lacks configuration for either constraintProviderClass, " + + "easyScoreCalculatorClass or incrementalScoreCalculatorClass."); + } + } + + private static void assertCorrectDirectorFactory(ScoreDirectorFactoryConfig config) { + var hasEasyScoreCalculator = config.getEasyScoreCalculatorClass() != null; + if (!hasEasyScoreCalculator && config.getEasyScoreCalculatorCustomProperties() != null) { + throw new IllegalStateException( + "If there is no easyScoreCalculatorClass (%s), then there can be no easyScoreCalculatorCustomProperties (%s) either." + .formatted(config.getEasyScoreCalculatorClass(), config.getEasyScoreCalculatorCustomProperties())); + } + var hasIncrementalScoreCalculator = config.getIncrementalScoreCalculatorClass() != null; + if (!hasIncrementalScoreCalculator && config.getIncrementalScoreCalculatorCustomProperties() != null) { + throw new IllegalStateException( + "If there is no incrementalScoreCalculatorClass (%s), then there can be no incrementalScoreCalculatorCustomProperties (%s) either." + .formatted(config.getIncrementalScoreCalculatorClass(), + config.getIncrementalScoreCalculatorCustomProperties())); + } + var hasConstraintProvider = config.getConstraintProviderClass() != null; + if (!hasConstraintProvider && config.getConstraintProviderCustomProperties() != null) { + throw new IllegalStateException( + "If there is no constraintProviderClass (%s), then there can be no constraintProviderCustomProperties (%s) either." + .formatted(config.getConstraintProviderClass(), + config.getConstraintProviderCustomProperties())); + } + if (hasEasyScoreCalculator && (hasIncrementalScoreCalculator || hasConstraintProvider) + || (hasIncrementalScoreCalculator && hasConstraintProvider)) { + var scoreDirectorFactoryPropertyList = new ArrayList(3); + if (hasEasyScoreCalculator) { + scoreDirectorFactoryPropertyList + .add("an easyScoreCalculatorClass (%s)".formatted(config.getEasyScoreCalculatorClass().getName())); + } + if (hasConstraintProvider) { + scoreDirectorFactoryPropertyList + .add("an constraintProviderClass (%s)".formatted(config.getConstraintProviderClass().getName())); + } + if (hasIncrementalScoreCalculator) { + scoreDirectorFactoryPropertyList.add("an incrementalScoreCalculatorClass (%s)" + .formatted(config.getIncrementalScoreCalculatorClass().getName())); + } + var joined = String.join(" and ", scoreDirectorFactoryPropertyList); + throw new IllegalArgumentException("The scoreDirectorFactory cannot have %s together." + .formatted(joined)); + } + } + +} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorAwareScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorAwareScoreDirector.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorAwareScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorAwareScoreDirector.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorCache.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorCache.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorCache.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/VariableDescriptorCache.java diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java similarity index 98% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java index f01cf18c39..4987b657b8 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirector.java @@ -22,7 +22,7 @@ * @param the score type to go with the solution * @see ScoreDirector */ -public class EasyScoreDirector> +public final class EasyScoreDirector> extends AbstractScoreDirector> { private final EasyScoreCalculator easyScoreCalculator; diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactory.java similarity index 57% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactory.java index 7871b4e3b0..5225ab4fd3 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/director/easy/EasyScoreDirectorFactory.java @@ -3,6 +3,8 @@ import ai.timefold.solver.core.api.domain.solution.PlanningSolution; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.calculator.EasyScoreCalculator; +import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; +import ai.timefold.solver.core.config.util.ConfigUtils; import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; import ai.timefold.solver.core.impl.score.director.AbstractScoreDirectorFactory; import ai.timefold.solver.core.impl.score.director.ScoreDirectorFactory; @@ -15,9 +17,23 @@ * @see EasyScoreDirector * @see ScoreDirectorFactory */ -public class EasyScoreDirectorFactory> +public final class EasyScoreDirectorFactory> extends AbstractScoreDirectorFactory { + public static > EasyScoreDirectorFactory + buildScoreDirectorFactory(SolutionDescriptor solutionDescriptor, ScoreDirectorFactoryConfig config) { + if (!EasyScoreCalculator.class.isAssignableFrom(config.getEasyScoreCalculatorClass())) { + throw new IllegalArgumentException( + "The easyScoreCalculatorClass (%s) does not implement %s." + .formatted(config.getEasyScoreCalculatorClass(), EasyScoreCalculator.class.getSimpleName())); + } + EasyScoreCalculator easyScoreCalculator = ConfigUtils.newInstance(config, + "easyScoreCalculatorClass", config.getEasyScoreCalculatorClass()); + ConfigUtils.applyCustomProperties(easyScoreCalculator, "easyScoreCalculatorClass", + config.getEasyScoreCalculatorCustomProperties(), "easyScoreCalculatorCustomProperties"); + return new EasyScoreDirectorFactory<>(solutionDescriptor, easyScoreCalculator); + } + private final EasyScoreCalculator easyScoreCalculator; public EasyScoreDirectorFactory(SolutionDescriptor solutionDescriptor, diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirector.java similarity index 99% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirector.java index faa690c6bf..ac1ac904c3 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirector.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirector.java @@ -30,7 +30,7 @@ * @param the score type to go with the solution * @see ScoreDirector */ -public class IncrementalScoreDirector> +public final class IncrementalScoreDirector> extends AbstractScoreDirector> { private final IncrementalScoreCalculator incrementalScoreCalculator; diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java similarity index 57% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java index 77d345dc8a..39faf9cb49 100644 --- a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/director/incremental/IncrementalScoreDirectorFactory.java @@ -6,6 +6,8 @@ import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.calculator.ConstraintMatchAwareIncrementalScoreCalculator; import ai.timefold.solver.core.api.score.calculator.IncrementalScoreCalculator; +import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; +import ai.timefold.solver.core.config.util.ConfigUtils; import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; import ai.timefold.solver.core.impl.score.director.AbstractScoreDirectorFactory; import ai.timefold.solver.core.impl.score.director.ScoreDirectorFactory; @@ -18,9 +20,26 @@ * @see IncrementalScoreDirector * @see ScoreDirectorFactory */ -public class IncrementalScoreDirectorFactory> +public final class IncrementalScoreDirectorFactory> extends AbstractScoreDirectorFactory { + public static > IncrementalScoreDirectorFactory + buildScoreDirectorFactory(SolutionDescriptor solutionDescriptor, ScoreDirectorFactoryConfig config) { + if (!IncrementalScoreCalculator.class.isAssignableFrom(config.getIncrementalScoreCalculatorClass())) { + throw new IllegalArgumentException( + "The incrementalScoreCalculatorClass (%s) does not implement %s." + .formatted(config.getIncrementalScoreCalculatorClass(), + IncrementalScoreCalculator.class.getSimpleName())); + } + return new IncrementalScoreDirectorFactory<>(solutionDescriptor, () -> { + IncrementalScoreCalculator incrementalScoreCalculator = ConfigUtils.newInstance(config, + "incrementalScoreCalculatorClass", config.getIncrementalScoreCalculatorClass()); + ConfigUtils.applyCustomProperties(incrementalScoreCalculator, "incrementalScoreCalculatorClass", + config.getIncrementalScoreCalculatorCustomProperties(), "incrementalScoreCalculatorCustomProperties"); + return incrementalScoreCalculator; + }); + } + private final Supplier> incrementalScoreCalculatorSupplier; public IncrementalScoreDirectorFactory(SolutionDescriptor solutionDescriptor, diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirector.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirector.java similarity index 98% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirector.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirector.java index efb53eaff2..0e02290b63 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintStreamScoreDirector.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirector.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet; +package ai.timefold.solver.core.impl.score.director.stream; import java.util.Map; @@ -12,6 +12,7 @@ import ai.timefold.solver.core.impl.domain.variable.descriptor.ListVariableDescriptor; import ai.timefold.solver.core.impl.domain.variable.descriptor.VariableDescriptor; import ai.timefold.solver.core.impl.score.director.AbstractScoreDirector; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintSession; /** * FP streams implementation of {@link ScoreDirector}, which only recalculates the {@link Score} diff --git a/core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirectorFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirectorFactory.java new file mode 100644 index 0000000000..e78b462284 --- /dev/null +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirectorFactory.java @@ -0,0 +1,94 @@ +package ai.timefold.solver.core.impl.score.director.stream; + +import static ai.timefold.solver.core.api.score.stream.ConstraintStreamImplType.BAVET; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.api.score.stream.Constraint; +import ai.timefold.solver.core.api.score.stream.ConstraintProvider; +import ai.timefold.solver.core.api.score.stream.ConstraintStreamImplType; +import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig; +import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.config.util.ConfigUtils; +import ai.timefold.solver.core.enterprise.TimefoldSolverEnterpriseService; +import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraint; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintSession; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintSessionFactory; +import ai.timefold.solver.core.impl.score.stream.common.AbstractConstraintStreamScoreDirectorFactory; +import ai.timefold.solver.core.impl.score.stream.common.inliner.AbstractScoreInliner; + +public final class BavetConstraintStreamScoreDirectorFactory> + extends AbstractConstraintStreamScoreDirectorFactory { + + public static > BavetConstraintStreamScoreDirectorFactory + buildScoreDirectorFactory(SolutionDescriptor solutionDescriptor, ScoreDirectorFactoryConfig config, + EnvironmentMode environmentMode) { + var constraintStreamImplType_ = + Objects.requireNonNullElse(config.getConstraintStreamImplType(), ConstraintStreamImplType.BAVET); + if (constraintStreamImplType_ != BAVET) { + throw new IllegalStateException("The constraintStreamImplType (%s) is not supported." + .formatted(constraintStreamImplType_)); + } + if (!ConstraintProvider.class.isAssignableFrom(config.getConstraintProviderClass())) { + throw new IllegalArgumentException( + "The constraintProviderClass (%s) does not implement %s." + .formatted(config.getConstraintProviderClass(), ConstraintProvider.class.getSimpleName())); + } + var constraintProviderClass = getConstraintProviderClass(config); + var constraintProvider = ConfigUtils.newInstance(config, "constraintProviderClass", constraintProviderClass); + ConfigUtils.applyCustomProperties(constraintProvider, "constraintProviderClass", + config.getConstraintProviderCustomProperties(), "constraintProviderCustomProperties"); + return new BavetConstraintStreamScoreDirectorFactory<>(solutionDescriptor, constraintProvider, environmentMode); + } + + private static Class getConstraintProviderClass(ScoreDirectorFactoryConfig config) { + if (Boolean.TRUE.equals(config.getConstraintStreamAutomaticNodeSharing())) { + var enterpriseService = + TimefoldSolverEnterpriseService.loadOrFail(TimefoldSolverEnterpriseService.Feature.AUTOMATIC_NODE_SHARING); + return enterpriseService.buildLambdaSharedConstraintProvider(config.getConstraintProviderClass()); + } else { + return config.getConstraintProviderClass(); + } + } + + private final BavetConstraintSessionFactory constraintSessionFactory; + private final List> constraintList; + + public BavetConstraintStreamScoreDirectorFactory(SolutionDescriptor solutionDescriptor, + ConstraintProvider constraintProvider, EnvironmentMode environmentMode) { + super(solutionDescriptor); + var constraintFactory = new BavetConstraintFactory<>(solutionDescriptor, environmentMode); + constraintList = constraintFactory.buildConstraints(constraintProvider); + constraintSessionFactory = new BavetConstraintSessionFactory<>(solutionDescriptor, constraintList); + } + + @Override + public BavetConstraintStreamScoreDirector buildScoreDirector(boolean lookUpEnabled, + boolean constraintMatchEnabledPreference, boolean expectShadowVariablesInCorrectState) { + return new BavetConstraintStreamScoreDirector<>(this, lookUpEnabled, constraintMatchEnabledPreference, + expectShadowVariablesInCorrectState); + } + + public BavetConstraintSession newSession(Solution_ workingSolution, boolean constraintMatchEnabled) { + return constraintSessionFactory.buildSession(workingSolution, constraintMatchEnabled); + } + + @Override + public AbstractScoreInliner fireAndForget(Object... facts) { + var session = newSession(null, true); + Arrays.stream(facts).forEach(session::insert); + session.calculateScore(0); + return session.getScoreInliner(); + } + + @Override + public Constraint[] getConstraints() { + return constraintList.toArray(new Constraint[0]); + } + +} diff --git a/core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerType.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerType.java similarity index 100% rename from core/core-impl/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerType.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/JoinerType.java diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraint.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraint.java similarity index 80% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraint.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraint.java index 5b880ca06b..f48efb86fb 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraint.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraint.java @@ -1,14 +1,14 @@ -package ai.timefold.solver.constraint.streams.bavet; +package ai.timefold.solver.core.impl.score.stream.bavet; import java.util.Set; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetScoringConstraintStream; -import ai.timefold.solver.constraint.streams.common.AbstractConstraint; -import ai.timefold.solver.constraint.streams.common.ScoreImpactType; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.constraint.ConstraintRef; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetScoringConstraintStream; +import ai.timefold.solver.core.impl.score.stream.common.AbstractConstraint; +import ai.timefold.solver.core.impl.score.stream.common.ScoreImpactType; public final class BavetConstraint extends AbstractConstraint, BavetConstraintFactory> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintFactory.java similarity index 93% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintFactory.java index 846d390b25..d1673f11d7 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintFactory.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet; +package ai.timefold.solver.core.impl.score.stream.bavet; import java.util.HashMap; import java.util.Map; @@ -6,16 +6,16 @@ import java.util.function.Consumer; import java.util.function.Predicate; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.uni.BavetAbstractUniConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.uni.BavetForEachUniConstraintStream; -import ai.timefold.solver.constraint.streams.common.InnerConstraintFactory; -import ai.timefold.solver.constraint.streams.common.RetrievalSemantics; import ai.timefold.solver.core.api.score.stream.Joiners; import ai.timefold.solver.core.api.score.stream.uni.UniConstraintStream; import ai.timefold.solver.core.config.solver.EnvironmentMode; import ai.timefold.solver.core.impl.domain.constraintweight.descriptor.ConstraintConfigurationDescriptor; import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.BavetAbstractUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.BavetForEachUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.common.InnerConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.common.RetrievalSemantics; public final class BavetConstraintFactory extends InnerConstraintFactory> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintSession.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintSession.java similarity index 89% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintSession.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintSession.java index 465b081b9f..b15482a41e 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintSession.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintSession.java @@ -1,17 +1,18 @@ -package ai.timefold.solver.constraint.streams.bavet; +package ai.timefold.solver.core.impl.score.stream.bavet; import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; -import ai.timefold.solver.constraint.streams.bavet.common.PropagationQueue; -import ai.timefold.solver.constraint.streams.bavet.common.Propagator; -import ai.timefold.solver.constraint.streams.bavet.uni.AbstractForEachUniNode; -import ai.timefold.solver.constraint.streams.common.inliner.AbstractScoreInliner; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.constraint.ConstraintMatchTotal; import ai.timefold.solver.core.api.score.constraint.Indictment; +import ai.timefold.solver.core.impl.score.director.stream.BavetConstraintStreamScoreDirectorFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.PropagationQueue; +import ai.timefold.solver.core.impl.score.stream.bavet.common.Propagator; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.AbstractForEachUniNode; +import ai.timefold.solver.core.impl.score.stream.common.inliner.AbstractScoreInliner; /** * The type is public to make it easier for Bavet-specific minimal bug reproducers to be created. diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintSessionFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintSessionFactory.java similarity index 86% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintSessionFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintSessionFactory.java index 56c6515cbb..71b41e2526 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/BavetConstraintSessionFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/BavetConstraintSessionFactory.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet; +package ai.timefold.solver.core.impl.score.stream.bavet; import java.util.ArrayList; import java.util.Collections; @@ -11,24 +11,24 @@ import java.util.SortedMap; import java.util.TreeMap; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractConcatNode; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractIfExistsNode; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractJoinNode; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractNode; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetConcatConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetIfExistsConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetJoinConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetStreamBinaryOperation; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.PropagationQueue; -import ai.timefold.solver.constraint.streams.bavet.common.Propagator; -import ai.timefold.solver.constraint.streams.bavet.uni.AbstractForEachUniNode; -import ai.timefold.solver.constraint.streams.common.inliner.AbstractScoreInliner; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.Constraint; import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor; import ai.timefold.solver.core.impl.score.definition.ScoreDefinition; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractConcatNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractIfExistsNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractJoinNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetConcatConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetIfExistsConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetJoinConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetStreamBinaryOperation; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.PropagationQueue; +import ai.timefold.solver.core.impl.score.stream.bavet.common.Propagator; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.AbstractForEachUniNode; +import ai.timefold.solver.core.impl.score.stream.common.inliner.AbstractScoreInliner; public final class BavetConstraintSessionFactory> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/AbstractGroupBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/AbstractGroupBiNode.java similarity index 82% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/AbstractGroupBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/AbstractGroupBiNode.java index 355459006d..974e4959ac 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/AbstractGroupBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/AbstractGroupBiNode.java @@ -1,14 +1,14 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractGroupNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.function.TriFunction; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractGroupNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; abstract class AbstractGroupBiNode extends AbstractGroupNode, OutTuple_, GroupKey_, ResultContainer_, Result_> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetAbstractBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetAbstractBiConstraintStream.java similarity index 85% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetAbstractBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetAbstractBiConstraintStream.java index 1d72930f31..98c704b158 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetAbstractBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetAbstractBiConstraintStream.java @@ -1,10 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; - -import static ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor.fourKeysGroupBy; -import static ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor.oneKeyGroupBy; -import static ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor.threeKeysGroupBy; -import static ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor.twoKeysGroupBy; -import static ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor.zeroKeysGroupBy; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.math.BigDecimal; import java.util.Collection; @@ -14,33 +8,6 @@ import java.util.function.ToIntBiFunction; import java.util.function.ToLongBiFunction; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetScoringConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeBiConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeQuadConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeTriConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeUniConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeBiConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeQuadConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeTriConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeUniConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; -import ai.timefold.solver.constraint.streams.bavet.quad.BavetAbstractQuadConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.quad.BavetConcatQuadConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.tri.BavetAbstractTriConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.tri.BavetConcatTriConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.tri.BavetJoinTriConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.uni.BavetAbstractUniConstraintStream; -import ai.timefold.solver.constraint.streams.common.RetrievalSemantics; -import ai.timefold.solver.constraint.streams.common.ScoreImpactType; -import ai.timefold.solver.constraint.streams.common.bi.BiConstraintBuilderImpl; -import ai.timefold.solver.constraint.streams.common.bi.InnerBiConstraintStream; -import ai.timefold.solver.constraint.streams.common.tri.TriJoinerComber; import ai.timefold.solver.core.api.function.TriFunction; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.DefaultConstraintJustification; @@ -51,6 +18,33 @@ import ai.timefold.solver.core.api.score.stream.tri.TriConstraintStream; import ai.timefold.solver.core.api.score.stream.tri.TriJoiner; import ai.timefold.solver.core.api.score.stream.uni.UniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetScoringConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.GroupNodeConstructor; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeQuadConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeTriConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeQuadConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeTriConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.quad.BavetAbstractQuadConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.quad.BavetConcatQuadConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.tri.BavetAbstractTriConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.tri.BavetConcatTriConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.tri.BavetJoinTriConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.BavetAbstractUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.common.RetrievalSemantics; +import ai.timefold.solver.core.impl.score.stream.common.ScoreImpactType; +import ai.timefold.solver.core.impl.score.stream.common.bi.BiConstraintBuilderImpl; +import ai.timefold.solver.core.impl.score.stream.common.bi.InnerBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.common.tri.TriJoinerComber; import ai.timefold.solver.core.impl.util.ConstantLambdaUtils; public abstract class BavetAbstractBiConstraintStream extends BavetAbstractConstraintStream @@ -172,7 +166,7 @@ private BiConstraintStream ifExistsOrNot(boolean shouldExist, UniConst public UniConstraintStream groupBy( BiConstraintCollector collector) { GroupNodeConstructor> nodeConstructor = - zeroKeysGroupBy(collector, Group0Mapping1CollectorBiNode::new); + GroupNodeConstructor.zeroKeysGroupBy(collector, Group0Mapping1CollectorBiNode::new); return buildUniGroupBy(nodeConstructor); } @@ -187,7 +181,7 @@ public BiConstraintSt BiConstraintCollector collectorA, BiConstraintCollector collectorB) { GroupNodeConstructor> nodeConstructor = - zeroKeysGroupBy(collectorA, collectorB, Group0Mapping2CollectorBiNode::new); + GroupNodeConstructor.zeroKeysGroupBy(collectorA, collectorB, Group0Mapping2CollectorBiNode::new); return buildBiGroupBy(nodeConstructor); } @@ -204,7 +198,7 @@ public BiConstraintSt BiConstraintCollector collectorB, BiConstraintCollector collectorC) { GroupNodeConstructor> nodeConstructor = - zeroKeysGroupBy(collectorA, collectorB, collectorC, Group0Mapping3CollectorBiNode::new); + GroupNodeConstructor.zeroKeysGroupBy(collectorA, collectorB, collectorC, Group0Mapping3CollectorBiNode::new); return buildTriGroupBy(nodeConstructor); } @@ -223,7 +217,8 @@ public BiConstraintSt BiConstraintCollector collectorC, BiConstraintCollector collectorD) { GroupNodeConstructor> nodeConstructor = - zeroKeysGroupBy(collectorA, collectorB, collectorC, collectorD, Group0Mapping4CollectorBiNode::new); + GroupNodeConstructor.zeroKeysGroupBy(collectorA, collectorB, collectorC, collectorD, + Group0Mapping4CollectorBiNode::new); return buildQuadGroupBy(nodeConstructor); } @@ -237,7 +232,7 @@ public BiConstraintSt @Override public UniConstraintStream groupBy(BiFunction groupKeyMapping) { GroupNodeConstructor> nodeConstructor = - oneKeyGroupBy(groupKeyMapping, Group1Mapping0CollectorBiNode::new); + GroupNodeConstructor.oneKeyGroupBy(groupKeyMapping, Group1Mapping0CollectorBiNode::new); return buildUniGroupBy(nodeConstructor); } @@ -247,7 +242,7 @@ TriConstraintStream groupBy(BiFunction collectorB, BiConstraintCollector collectorC) { GroupNodeConstructor> nodeConstructor = - oneKeyGroupBy(groupKeyMapping, collectorB, collectorC, Group1Mapping2CollectorBiNode::new); + GroupNodeConstructor.oneKeyGroupBy(groupKeyMapping, collectorB, collectorC, Group1Mapping2CollectorBiNode::new); return buildTriGroupBy(nodeConstructor); } @@ -259,7 +254,8 @@ TriConstraintStream groupBy(BiFunction collectorC, BiConstraintCollector collectorD) { GroupNodeConstructor> nodeConstructor = - oneKeyGroupBy(groupKeyMapping, collectorB, collectorC, collectorD, Group1Mapping3CollectorBiNode::new); + GroupNodeConstructor.oneKeyGroupBy(groupKeyMapping, collectorB, collectorC, collectorD, + Group1Mapping3CollectorBiNode::new); return buildQuadGroupBy(nodeConstructor); } @@ -268,7 +264,7 @@ public BiConstraintStream groupKeyMapping, BiConstraintCollector collector) { GroupNodeConstructor> nodeConstructor = - oneKeyGroupBy(groupKeyMapping, collector, Group1Mapping1CollectorBiNode::new); + GroupNodeConstructor.oneKeyGroupBy(groupKeyMapping, collector, Group1Mapping1CollectorBiNode::new); return buildBiGroupBy(nodeConstructor); } @@ -276,7 +272,7 @@ public BiConstraintStream BiConstraintStream groupBy( BiFunction groupKeyAMapping, BiFunction groupKeyBMapping) { GroupNodeConstructor> nodeConstructor = - twoKeysGroupBy(groupKeyAMapping, groupKeyBMapping, Group2Mapping0CollectorBiNode::new); + GroupNodeConstructor.twoKeysGroupBy(groupKeyAMapping, groupKeyBMapping, Group2Mapping0CollectorBiNode::new); return buildBiGroupBy(nodeConstructor); } @@ -285,7 +281,8 @@ public TriConstraintStream groupKeyAMapping, BiFunction groupKeyBMapping, BiConstraintCollector collector) { GroupNodeConstructor> nodeConstructor = - twoKeysGroupBy(groupKeyAMapping, groupKeyBMapping, collector, Group2Mapping1CollectorBiNode::new); + GroupNodeConstructor.twoKeysGroupBy(groupKeyAMapping, groupKeyBMapping, collector, + Group2Mapping1CollectorBiNode::new); return buildTriGroupBy(nodeConstructor); } @@ -296,7 +293,8 @@ QuadConstraintStream groupBy( BiConstraintCollector collectorC, BiConstraintCollector collectorD) { GroupNodeConstructor> nodeConstructor = - twoKeysGroupBy(groupKeyAMapping, groupKeyBMapping, collectorC, collectorD, Group2Mapping2CollectorBiNode::new); + GroupNodeConstructor.twoKeysGroupBy(groupKeyAMapping, groupKeyBMapping, collectorC, collectorD, + Group2Mapping2CollectorBiNode::new); return buildQuadGroupBy(nodeConstructor); } @@ -305,7 +303,8 @@ public TriConstraintStream groupKeyAMapping, BiFunction groupKeyBMapping, BiFunction groupKeyCMapping) { GroupNodeConstructor> nodeConstructor = - threeKeysGroupBy(groupKeyAMapping, groupKeyBMapping, groupKeyCMapping, Group3Mapping0CollectorBiNode::new); + GroupNodeConstructor.threeKeysGroupBy(groupKeyAMapping, groupKeyBMapping, groupKeyCMapping, + Group3Mapping0CollectorBiNode::new); return buildTriGroupBy(nodeConstructor); } @@ -316,7 +315,7 @@ public TriConstraintStream groupKeyCMapping, BiConstraintCollector collectorD) { GroupNodeConstructor> nodeConstructor = - threeKeysGroupBy(groupKeyAMapping, groupKeyBMapping, + GroupNodeConstructor.threeKeysGroupBy(groupKeyAMapping, groupKeyBMapping, groupKeyCMapping, collectorD, Group3Mapping1CollectorBiNode::new); return buildQuadGroupBy(nodeConstructor); } @@ -326,7 +325,7 @@ public TriConstraintStream groupKeyAMapping, BiFunction groupKeyBMapping, BiFunction groupKeyCMapping, BiFunction groupKeyDMapping) { GroupNodeConstructor> nodeConstructor = - fourKeysGroupBy( + GroupNodeConstructor.fourKeysGroupBy( groupKeyAMapping, groupKeyBMapping, groupKeyCMapping, groupKeyDMapping, Group4Mapping0CollectorBiNode::new); return buildQuadGroupBy(nodeConstructor); diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetBiGroupBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetBiGroupBiConstraintStream.java similarity index 83% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetBiGroupBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetBiGroupBiConstraintStream.java index d2f3fbc164..007b786be9 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetBiGroupBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetBiGroupBiConstraintStream.java @@ -1,15 +1,15 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.List; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeBiConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.GroupNodeConstructor; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; final class BavetBiGroupBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetBiMapBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetBiMapBiConstraintStream.java similarity index 90% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetBiMapBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetBiMapBiConstraintStream.java index dd5c103bb5..65cf1859a6 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetBiMapBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetBiMapBiConstraintStream.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeBiConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeBiConstraintStream; final class BavetBiMapBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetConcatBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetConcatBiConstraintStream.java similarity index 86% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetConcatBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetConcatBiConstraintStream.java index 64721e339a..40a0cc71f3 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetConcatBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetConcatBiConstraintStream.java @@ -1,18 +1,18 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.Set; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractConcatNode; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetConcatConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeBiConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeUniConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractConcatNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetConcatConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; public final class BavetConcatBiConstraintStream extends BavetAbstractBiConstraintStream implements BavetConcatConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetFilterBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetFilterBiConstraintStream.java similarity index 87% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetFilterBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetFilterBiConstraintStream.java index 6d8c79211d..5c4c63a2cc 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetFilterBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetFilterBiConstraintStream.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiPredicate; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; final class BavetFilterBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetFlattenLastBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetFlattenLastBiConstraintStream.java similarity index 85% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetFlattenLastBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetFlattenLastBiConstraintStream.java index 71e8e420c3..9c2c814c30 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetFlattenLastBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetFlattenLastBiConstraintStream.java @@ -1,14 +1,14 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractFlattenLastNode; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeBiConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractFlattenLastNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; final class BavetFlattenLastBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetIfExistsBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetIfExistsBiConstraintStream.java similarity index 88% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetIfExistsBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetIfExistsBiConstraintStream.java index 4fdaaece54..5365a9efe8 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetIfExistsBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetIfExistsBiConstraintStream.java @@ -1,19 +1,19 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.Set; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetIfExistsConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeUniConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.index.IndexerFactory; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.common.tri.DefaultTriJoiner; import ai.timefold.solver.core.api.function.TriPredicate; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetIfExistsConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexerFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.common.tri.DefaultTriJoiner; final class BavetIfExistsBiConstraintStream extends BavetAbstractBiConstraintStream diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetJoinBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetJoinBiConstraintStream.java similarity index 86% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetJoinBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetJoinBiConstraintStream.java index 70443c9af3..e6f640ffcd 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetJoinBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetJoinBiConstraintStream.java @@ -1,19 +1,19 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.Set; import java.util.function.BiPredicate; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetJoinConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeUniConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.index.IndexerFactory; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.common.bi.DefaultBiJoiner; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetJoinConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexerFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.common.bi.DefaultBiJoiner; public final class BavetJoinBiConstraintStream extends BavetAbstractBiConstraintStream implements BavetJoinConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetQuadGroupBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetQuadGroupBiConstraintStream.java similarity index 83% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetQuadGroupBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetQuadGroupBiConstraintStream.java index c6350e2fa6..ec3e25f329 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetQuadGroupBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetQuadGroupBiConstraintStream.java @@ -1,15 +1,15 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.List; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeQuadConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.GroupNodeConstructor; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeQuadConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; final class BavetQuadGroupBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetQuadMapBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetQuadMapBiConstraintStream.java similarity index 92% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetQuadMapBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetQuadMapBiConstraintStream.java index ff228242db..dcb4454f5d 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetQuadMapBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetQuadMapBiConstraintStream.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeQuadConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeQuadConstraintStream; final class BavetQuadMapBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetScoringBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetScoringBiConstraintStream.java similarity index 92% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetScoringBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetScoringBiConstraintStream.java index 96727aba88..6e5d567f2a 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetScoringBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetScoringBiConstraintStream.java @@ -1,19 +1,19 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.math.BigDecimal; import java.util.function.BiFunction; import java.util.function.ToIntBiFunction; import java.util.function.ToLongBiFunction; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraint; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.BavetScoringConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.common.inliner.ConstraintMatchSupplier; -import ai.timefold.solver.constraint.streams.common.inliner.UndoScoreImpacter; -import ai.timefold.solver.constraint.streams.common.inliner.WeightedScoreImpacter; import ai.timefold.solver.core.api.function.TriFunction; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraint; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetScoringConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.common.inliner.ConstraintMatchSupplier; +import ai.timefold.solver.core.impl.score.stream.common.inliner.UndoScoreImpacter; +import ai.timefold.solver.core.impl.score.stream.common.inliner.WeightedScoreImpacter; final class BavetScoringBiConstraintStream extends BavetAbstractBiConstraintStream diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetTriGroupBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetTriGroupBiConstraintStream.java similarity index 83% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetTriGroupBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetTriGroupBiConstraintStream.java index ca6100d154..c50da1f055 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetTriGroupBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetTriGroupBiConstraintStream.java @@ -1,15 +1,15 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.List; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeTriConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.GroupNodeConstructor; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeTriConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; final class BavetTriGroupBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetTriMapBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetTriMapBiConstraintStream.java similarity index 91% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetTriMapBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetTriMapBiConstraintStream.java index fd005e87c3..b42113626f 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetTriMapBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetTriMapBiConstraintStream.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeTriConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeTriConstraintStream; final class BavetTriMapBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetUniGroupBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetUniGroupBiConstraintStream.java similarity index 82% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetUniGroupBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetUniGroupBiConstraintStream.java index b531a08181..5a68cae9bb 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetUniGroupBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetUniGroupBiConstraintStream.java @@ -1,15 +1,15 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.List; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.GroupNodeConstructor; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeUniConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.GroupNodeConstructor; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class BavetUniGroupBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetUniMapBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetUniMapBiConstraintStream.java similarity index 89% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetUniMapBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetUniMapBiConstraintStream.java index eb55718f85..7f25b4b351 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BavetUniMapBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BavetUniMapBiConstraintStream.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetAftBridgeUniConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetAftBridgeUniConstraintStream; final class BavetUniMapBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BiScorer.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BiScorer.java similarity index 67% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BiScorer.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BiScorer.java index aeebafe2e9..4e73367491 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/BiScorer.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/BiScorer.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractScorer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.common.inliner.UndoScoreImpacter; -import ai.timefold.solver.constraint.streams.common.inliner.WeightedScoreImpacter; import ai.timefold.solver.core.api.function.TriFunction; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractScorer; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.common.inliner.UndoScoreImpacter; +import ai.timefold.solver.core.impl.score.stream.common.inliner.WeightedScoreImpacter; final class BiScorer extends AbstractScorer> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatBiBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatBiBiNode.java similarity index 79% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatBiBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatBiBiNode.java index 2aab09b7ca..d885bc9bbe 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatBiBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatBiBiNode.java @@ -1,8 +1,8 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractConcatNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractConcatNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class ConcatBiBiNode extends AbstractConcatNode, BiTuple, BiTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatBiUniNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatBiUniNode.java similarity index 75% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatBiUniNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatBiUniNode.java index a4abae7a80..208eb86451 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatBiUniNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatBiUniNode.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractConcatNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractConcatNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class ConcatBiUniNode extends AbstractConcatNode, UniTuple, BiTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatUniBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatUniBiNode.java similarity index 75% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatUniBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatUniBiNode.java index 746fc64224..f065f7c547 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConcatUniBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConcatUniBiNode.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractConcatNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractConcatNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class ConcatUniBiNode extends AbstractConcatNode, BiTuple, BiTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConditionalBiTupleLifecycle.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConditionalBiTupleLifecycle.java similarity index 61% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConditionalBiTupleLifecycle.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConditionalBiTupleLifecycle.java index 463cdc5615..9597aa2246 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/ConditionalBiTupleLifecycle.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/ConditionalBiTupleLifecycle.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiPredicate; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractConditionalTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractConditionalTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class ConditionalBiTupleLifecycle extends AbstractConditionalTupleLifecycle> { private final BiPredicate predicate; diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/FlattenLastBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/FlattenLastBiNode.java similarity index 75% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/FlattenLastBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/FlattenLastBiNode.java index 5261185653..412fa6ed17 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/FlattenLastBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/FlattenLastBiNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractFlattenLastNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractFlattenLastNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class FlattenLastBiNode extends AbstractFlattenLastNode, BiTuple, B, NewB> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping1CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping1CollectorBiNode.java similarity index 82% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping1CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping1CollectorBiNode.java index 3c8eed974e..dcfb799ddf 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping1CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping1CollectorBiNode.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class Group0Mapping1CollectorBiNode extends AbstractGroupBiNode, Void, ResultContainer_, A> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping2CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping2CollectorBiNode.java similarity index 89% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping2CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping2CollectorBiNode.java index 6704a6394b..fd9a12fea7 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping2CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping2CollectorBiNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.ConstraintCollectors; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Pair; final class Group0Mapping2CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping3CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping3CollectorBiNode.java similarity index 90% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping3CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping3CollectorBiNode.java index 6f57bc2974..d0f6ea2cce 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping3CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping3CollectorBiNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.ConstraintCollectors; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Triple; final class Group0Mapping3CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping4CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping4CollectorBiNode.java similarity index 91% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping4CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping4CollectorBiNode.java index e10ee1a349..a4dcea39dd 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group0Mapping4CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group0Mapping4CollectorBiNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.ConstraintCollectors; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Quadruple; final class Group0Mapping4CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping0CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping0CollectorBiNode.java similarity index 80% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping0CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping0CollectorBiNode.java index 68ae327e0f..2aebf6017a 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping0CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping0CollectorBiNode.java @@ -1,11 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class Group1Mapping0CollectorBiNode extends AbstractGroupBiNode, A, Void, Void> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping1CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping1CollectorBiNode.java similarity index 78% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping1CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping1CollectorBiNode.java index 5093204987..181471360f 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping1CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping1CollectorBiNode.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import static ai.timefold.solver.constraint.streams.bavet.bi.Group1Mapping0CollectorBiNode.createGroupKey; +import static ai.timefold.solver.core.impl.score.stream.bavet.bi.Group1Mapping0CollectorBiNode.createGroupKey; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class Group1Mapping1CollectorBiNode extends AbstractGroupBiNode, A, ResultContainer_, B> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping2CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping2CollectorBiNode.java similarity index 82% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping2CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping2CollectorBiNode.java index 96725436ac..0f7a558993 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping2CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping2CollectorBiNode.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import static ai.timefold.solver.constraint.streams.bavet.bi.Group1Mapping0CollectorBiNode.createGroupKey; +import static ai.timefold.solver.core.impl.score.stream.bavet.bi.Group1Mapping0CollectorBiNode.createGroupKey; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Pair; final class Group1Mapping2CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping3CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping3CollectorBiNode.java similarity index 78% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping3CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping3CollectorBiNode.java index e4e3035ca0..3850eae451 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group1Mapping3CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group1Mapping3CollectorBiNode.java @@ -1,14 +1,14 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import static ai.timefold.solver.constraint.streams.bavet.bi.Group0Mapping3CollectorBiNode.mergeCollectors; -import static ai.timefold.solver.constraint.streams.bavet.bi.Group1Mapping0CollectorBiNode.createGroupKey; +import static ai.timefold.solver.core.impl.score.stream.bavet.bi.Group0Mapping3CollectorBiNode.mergeCollectors; +import static ai.timefold.solver.core.impl.score.stream.bavet.bi.Group1Mapping0CollectorBiNode.createGroupKey; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Triple; final class Group1Mapping3CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping0CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping0CollectorBiNode.java similarity index 87% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping0CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping0CollectorBiNode.java index 66bbcaf337..8ee27566f2 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping0CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping0CollectorBiNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Pair; final class Group2Mapping0CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping1CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping1CollectorBiNode.java similarity index 75% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping1CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping1CollectorBiNode.java index 0b965b30fa..d47d6819c7 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping1CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping1CollectorBiNode.java @@ -1,13 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; - -import static ai.timefold.solver.constraint.streams.bavet.bi.Group2Mapping0CollectorBiNode.createGroupKey; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Pair; final class Group2Mapping1CollectorBiNode @@ -20,7 +18,7 @@ public Group2Mapping1CollectorBiNode(BiFunction groupKeyMappingA, BiConstraintCollector collector, TupleLifecycle> nextNodesTupleLifecycle, int outputStoreSize, EnvironmentMode environmentMode) { super(groupStoreIndex, undoStoreIndex, - tuple -> createGroupKey(groupKeyMappingA, groupKeyMappingB, tuple), collector, + tuple -> Group2Mapping0CollectorBiNode.createGroupKey(groupKeyMappingA, groupKeyMappingB, tuple), collector, nextNodesTupleLifecycle, environmentMode); this.outputStoreSize = outputStoreSize; } diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping2CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping2CollectorBiNode.java similarity index 70% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping2CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping2CollectorBiNode.java index 3ec3a670ea..5ee56b9925 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group2Mapping2CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group2Mapping2CollectorBiNode.java @@ -1,14 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; - -import static ai.timefold.solver.constraint.streams.bavet.bi.Group0Mapping2CollectorBiNode.mergeCollectors; -import static ai.timefold.solver.constraint.streams.bavet.bi.Group2Mapping0CollectorBiNode.createGroupKey; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Pair; final class Group2Mapping2CollectorBiNode @@ -24,8 +21,9 @@ public Group2Mapping2CollectorBiNode(BiFunction groupKeyMappingA, TupleLifecycle> nextNodesTupleLifecycle, int outputStoreSize, EnvironmentMode environmentMode) { super(groupStoreIndex, undoStoreIndex, - tuple -> createGroupKey(groupKeyMappingA, groupKeyMappingB, tuple), - mergeCollectors(collectorC, collectorD), nextNodesTupleLifecycle, environmentMode); + tuple -> Group2Mapping0CollectorBiNode.createGroupKey(groupKeyMappingA, groupKeyMappingB, tuple), + Group0Mapping2CollectorBiNode.mergeCollectors(collectorC, collectorD), nextNodesTupleLifecycle, + environmentMode); this.outputStoreSize = outputStoreSize; } diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group3Mapping0CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group3Mapping0CollectorBiNode.java similarity index 85% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group3Mapping0CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group3Mapping0CollectorBiNode.java index 2dd83da86d..306cfc077e 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group3Mapping0CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group3Mapping0CollectorBiNode.java @@ -1,11 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Triple; final class Group3Mapping0CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group3Mapping1CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group3Mapping1CollectorBiNode.java similarity index 76% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group3Mapping1CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group3Mapping1CollectorBiNode.java index c550bf4c29..e5fbf370dc 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group3Mapping1CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group3Mapping1CollectorBiNode.java @@ -1,13 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; - -import static ai.timefold.solver.constraint.streams.bavet.bi.Group3Mapping0CollectorBiNode.createGroupKey; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.stream.bi.BiConstraintCollector; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Triple; final class Group3Mapping1CollectorBiNode @@ -23,7 +21,9 @@ public Group3Mapping1CollectorBiNode(BiFunction groupKeyMappingA, TupleLifecycle> nextNodesTupleLifecycle, int outputStoreSize, EnvironmentMode environmentMode) { super(groupStoreIndex, undoStoreIndex, - tuple -> createGroupKey(groupKeyMappingA, groupKeyMappingB, groupKeyMappingC, tuple), collector, + tuple -> Group3Mapping0CollectorBiNode.createGroupKey(groupKeyMappingA, groupKeyMappingB, groupKeyMappingC, + tuple), + collector, nextNodesTupleLifecycle, environmentMode); this.outputStoreSize = outputStoreSize; } diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group4Mapping0CollectorBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group4Mapping0CollectorBiNode.java similarity index 87% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group4Mapping0CollectorBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group4Mapping0CollectorBiNode.java index a5e8b8e1e5..76dafa42b2 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/Group4Mapping0CollectorBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/Group4Mapping0CollectorBiNode.java @@ -1,11 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Quadruple; final class Group4Mapping0CollectorBiNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/IndexedIfExistsBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/IndexedIfExistsBiNode.java similarity index 79% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/IndexedIfExistsBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/IndexedIfExistsBiNode.java index 1e6ceab248..5a6fcff1d2 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/IndexedIfExistsBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/IndexedIfExistsBiNode.java @@ -1,16 +1,16 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiFunction; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractIndexedIfExistsNode; -import ai.timefold.solver.constraint.streams.bavet.common.ExistsCounter; -import ai.timefold.solver.constraint.streams.bavet.common.index.IndexProperties; -import ai.timefold.solver.constraint.streams.bavet.common.index.Indexer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.api.function.TriPredicate; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractIndexedIfExistsNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.ExistsCounter; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class IndexedIfExistsBiNode extends AbstractIndexedIfExistsNode, C> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/IndexedJoinBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/IndexedJoinBiNode.java similarity index 80% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/IndexedJoinBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/IndexedJoinBiNode.java index e38dc9f658..c3916cbfe8 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/IndexedJoinBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/IndexedJoinBiNode.java @@ -1,14 +1,14 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiPredicate; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractIndexedJoinNode; -import ai.timefold.solver.constraint.streams.bavet.common.index.IndexProperties; -import ai.timefold.solver.constraint.streams.bavet.common.index.Indexer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractIndexedJoinNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class IndexedJoinBiNode extends AbstractIndexedJoinNode, B, BiTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToBiNode.java similarity index 82% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToBiNode.java index 38a482f711..afb24481f1 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToBiNode.java @@ -1,11 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractMapNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractMapNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class MapBiToBiNode extends AbstractMapNode, BiTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToQuadNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToQuadNode.java similarity index 84% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToQuadNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToQuadNode.java index ad0f7671ac..28d12ab08a 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToQuadNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToQuadNode.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractMapNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.QuadTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractMapNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.QuadTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class MapBiToQuadNode extends AbstractMapNode, QuadTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToTriNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToTriNode.java similarity index 82% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToTriNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToTriNode.java index 3b8f418219..01519f102f 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToTriNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToTriNode.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractMapNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractMapNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class MapBiToTriNode extends AbstractMapNode, TriTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToUniNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToUniNode.java similarity index 73% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToUniNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToUniNode.java index 8b80f35940..7254443bd6 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/MapBiToUniNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/MapBiToUniNode.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.Objects; import java.util.function.BiFunction; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractMapNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractMapNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class MapBiToUniNode extends AbstractMapNode, UniTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/UnindexedIfExistsBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/UnindexedIfExistsBiNode.java similarity index 78% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/UnindexedIfExistsBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/UnindexedIfExistsBiNode.java index d76d329aba..56266da801 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/UnindexedIfExistsBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/UnindexedIfExistsBiNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractUnindexedIfExistsNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.api.function.TriPredicate; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractUnindexedIfExistsNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class UnindexedIfExistsBiNode extends AbstractUnindexedIfExistsNode, C> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/UnindexedJoinBiNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/UnindexedJoinBiNode.java similarity index 81% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/UnindexedJoinBiNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/UnindexedJoinBiNode.java index c5a8097d36..1e572325d6 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/bi/UnindexedJoinBiNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/bi/UnindexedJoinBiNode.java @@ -1,11 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.bi; +package ai.timefold.solver.core.impl.score.stream.bavet.bi; import java.util.function.BiPredicate; -import ai.timefold.solver.constraint.streams.bavet.common.AbstractUnindexedJoinNode; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.BiTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.AbstractUnindexedJoinNode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.BiTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; final class UnindexedJoinBiNode extends AbstractUnindexedJoinNode, B, BiTuple> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractConcatNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractConcatNode.java similarity index 82% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractConcatNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractConcatNode.java index 4c3d7ebd43..0e1fe99c2b 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractConcatNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractConcatNode.java @@ -1,15 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.ABORTING; -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.CREATING; -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.DYING; -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.UPDATING; - -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; /** * Implements the concat operation. Concat cannot be implemented as a pass-through operation because of two caveats: @@ -77,7 +72,7 @@ public final void updateLeft(LeftTuple_ tuple) { // Even if the facts of tuple do not change, an update MUST be done so // downstream nodes get notified of updates in planning variables. TupleState previousState = outTuple.state; - if (previousState == CREATING || previousState == UPDATING) { + if (previousState == TupleState.CREATING || previousState == TupleState.UPDATING) { return; } propagationQueue.update(outTuple); @@ -95,7 +90,7 @@ public final void retractLeft(LeftTuple_ tuple) { throw new IllegalStateException("Impossible state: The tuple (" + outTuple.state + ") in node (" + this + ") is in an unexpected state (" + outTuple.state + ")."); } - propagationQueue.retract(outTuple, state == CREATING ? ABORTING : DYING); + propagationQueue.retract(outTuple, state == TupleState.CREATING ? TupleState.ABORTING : TupleState.DYING); } @Override @@ -118,7 +113,7 @@ public final void updateRight(RightTuple_ tuple) { // Even if the facts of tuple do not change, an update MUST be done so // downstream nodes get notified of updates in planning variables. TupleState previousState = outTuple.state; - if (previousState == CREATING || previousState == UPDATING) { + if (previousState == TupleState.CREATING || previousState == TupleState.UPDATING) { return; } propagationQueue.update(outTuple); @@ -136,7 +131,7 @@ public final void retractRight(RightTuple_ tuple) { throw new IllegalStateException("Impossible state: The tuple (" + outTuple.state + ") in node (" + this + ") is in an unexpected state (" + outTuple.state + ")."); } - propagationQueue.retract(outTuple, state == CREATING ? ABORTING : DYING); + propagationQueue.retract(outTuple, state == TupleState.CREATING ? TupleState.ABORTING : TupleState.DYING); } @Override diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractFlattenLastNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractFlattenLastNode.java similarity index 95% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractFlattenLastNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractFlattenLastNode.java index fed4eb03e1..a6e47a4833 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractFlattenLastNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractFlattenLastNode.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.ArrayList; import java.util.Collection; @@ -8,9 +8,9 @@ import java.util.Objects; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; public abstract class AbstractFlattenLastNode extends AbstractNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractGroupNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractGroupNode.java similarity index 97% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractGroupNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractGroupNode.java index 7707eec001..84084f97bb 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractGroupNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractGroupNode.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.HashMap; import java.util.Map; @@ -6,10 +6,10 @@ import java.util.function.Function; import java.util.function.Supplier; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; public abstract class AbstractGroupNode extends AbstractNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIfExistsNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIfExistsNode.java similarity index 89% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIfExistsNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIfExistsNode.java index 6fb9cdc4c9..775055c78f 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIfExistsNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIfExistsNode.java @@ -1,14 +1,11 @@ -package ai.timefold.solver.constraint.streams.bavet.common; - -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.ABORTING; -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.DYING; - -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +package ai.timefold.solver.core.impl.score.stream.bavet.common; + +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.impl.util.ElementAwareList; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; @@ -83,9 +80,9 @@ protected void updateCounterLeft(ExistsCounter counter) { } switch (state) { case CREATING -> // Kill it before it propagates. - propagationQueue.retract(counter, ABORTING); + propagationQueue.retract(counter, TupleState.ABORTING); case OK, UPDATING -> // Kill the original propagation. - propagationQueue.retract(counter, DYING); + propagationQueue.retract(counter, TupleState.DYING); default -> throw new IllegalStateException("Impossible state: The counter (" + counter + ") has an impossible retract state (" + state + ")."); @@ -162,9 +159,9 @@ private void doInsertCounter(ExistsCounter counter) { private void doRetractCounter(ExistsCounter counter) { switch (counter.state) { case CREATING -> // Kill it before it propagates. - propagationQueue.retract(counter, ABORTING); + propagationQueue.retract(counter, TupleState.ABORTING); case OK, UPDATING -> // Kill the original propagation. - propagationQueue.retract(counter, DYING); + propagationQueue.retract(counter, TupleState.DYING); default -> throw new IllegalStateException("Impossible state: The counter (" + counter + ") has an impossible retract state (" + counter.state + ")."); } diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIndexedIfExistsNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIndexedIfExistsNode.java similarity index 94% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIndexedIfExistsNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIndexedIfExistsNode.java index 995e4d4a4d..a6830ab0d8 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIndexedIfExistsNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIndexedIfExistsNode.java @@ -1,14 +1,14 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.index.IndexProperties; -import ai.timefold.solver.constraint.streams.bavet.common.index.Indexer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.impl.util.ElementAwareList; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIndexedJoinNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIndexedJoinNode.java similarity index 93% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIndexedJoinNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIndexedJoinNode.java index 25237cadfc..cfa1ccc8c1 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractIndexedJoinNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractIndexedJoinNode.java @@ -1,14 +1,14 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.index.IndexProperties; -import ai.timefold.solver.constraint.streams.bavet.common.index.Indexer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties; +import ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.impl.util.ElementAwareList; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractJoinNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractJoinNode.java similarity index 89% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractJoinNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractJoinNode.java index 831e32b2a1..afdccb7600 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractJoinNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractJoinNode.java @@ -1,17 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common; - -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.ABORTING; -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.CREATING; -import static ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState.DYING; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.function.Consumer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.impl.util.ElementAwareList; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; @@ -160,7 +156,7 @@ protected final void retractOutTuple(OutTuple_ outTuple) { throw new IllegalStateException("Impossible state: The tuple (" + outTuple.state + ") in node (" + this + ") is in an unexpected state (" + outTuple.state + ")."); } - propagationQueue.retract(outTuple, state == CREATING ? ABORTING : DYING); + propagationQueue.retract(outTuple, state == TupleState.CREATING ? TupleState.ABORTING : TupleState.DYING); } @Override diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractMapNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractMapNode.java similarity index 89% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractMapNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractMapNode.java index ebb93a8ade..eb45063319 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractMapNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractMapNode.java @@ -1,8 +1,8 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; public abstract class AbstractMapNode extends AbstractNode diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractNode.java similarity index 91% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractNode.java index 0348329469..3fb7a0b759 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractNode.java @@ -1,6 +1,6 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintSession; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintSession; /** * @see PropagationQueue Description of the propagation mechanism. diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractPropagationMetadataCarrier.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractPropagationMetadataCarrier.java similarity index 69% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractPropagationMetadataCarrier.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractPropagationMetadataCarrier.java index b268251628..ce7d115c9a 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractPropagationMetadataCarrier.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractPropagationMetadataCarrier.java @@ -1,7 +1,7 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; /** * {@link DynamicPropagationQueue} requires the items it carries to extend this class, diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractScorer.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractScorer.java similarity index 86% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractScorer.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractScorer.java index 54aa213650..d4903b2604 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractScorer.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractScorer.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.common.inliner.UndoScoreImpacter; -import ai.timefold.solver.constraint.streams.common.inliner.WeightedScoreImpacter; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.common.inliner.UndoScoreImpacter; +import ai.timefold.solver.core.impl.score.stream.common.inliner.WeightedScoreImpacter; public abstract class AbstractScorer implements TupleLifecycle { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractUnindexedIfExistsNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractUnindexedIfExistsNode.java similarity index 93% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractUnindexedIfExistsNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractUnindexedIfExistsNode.java index 63358b4260..da48361acb 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractUnindexedIfExistsNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractUnindexedIfExistsNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.impl.util.ElementAwareList; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractUnindexedJoinNode.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractUnindexedJoinNode.java similarity index 91% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractUnindexedJoinNode.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractUnindexedJoinNode.java index ab549f2ece..c2e447e066 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/AbstractUnindexedJoinNode.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/AbstractUnindexedJoinNode.java @@ -1,10 +1,10 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.UniTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.UniTuple; import ai.timefold.solver.core.impl.util.ElementAwareList; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetAbstractConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetAbstractConstraintStream.java similarity index 93% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetAbstractConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetAbstractConstraintStream.java index cfc9eed031..84b61ba918 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetAbstractConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetAbstractConstraintStream.java @@ -1,18 +1,18 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Set; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraint; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.common.AbstractConstraintStream; -import ai.timefold.solver.constraint.streams.common.RetrievalSemantics; -import ai.timefold.solver.constraint.streams.common.ScoreImpactType; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.constraint.ConstraintRef; import ai.timefold.solver.core.api.score.stream.Constraint; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraint; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.common.AbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.common.RetrievalSemantics; +import ai.timefold.solver.core.impl.score.stream.common.ScoreImpactType; public abstract class BavetAbstractConstraintStream extends AbstractConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetConcatConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetConcatConstraintStream.java similarity index 66% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetConcatConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetConcatConstraintStream.java index d46217b49f..6399fae8bd 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetConcatConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetConcatConstraintStream.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; public interface BavetConcatConstraintStream extends BavetStreamBinaryOperation, TupleSource { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetIfExistsConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetIfExistsConstraintStream.java similarity index 63% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetIfExistsConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetIfExistsConstraintStream.java index 08561fe1e6..ed46705d00 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetIfExistsConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetIfExistsConstraintStream.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; public interface BavetIfExistsConstraintStream extends BavetStreamBinaryOperation { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetJoinConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetJoinConstraintStream.java similarity index 72% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetJoinConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetJoinConstraintStream.java index 05b90482e5..da0eedf76b 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetJoinConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetJoinConstraintStream.java @@ -1,6 +1,6 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeUniConstraintStream; public interface BavetJoinConstraintStream extends BavetStreamBinaryOperation, TupleSource { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetScoringConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetScoringConstraintStream.java similarity index 65% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetScoringConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetScoringConstraintStream.java index 3f0adb2e88..bc74469437 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetScoringConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetScoringConstraintStream.java @@ -1,8 +1,8 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.Set; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraint; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraint; public interface BavetScoringConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetStreamBinaryOperation.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetStreamBinaryOperation.java similarity index 68% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetStreamBinaryOperation.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetStreamBinaryOperation.java index aba1e38425..1d1614cebb 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/BavetStreamBinaryOperation.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/BavetStreamBinaryOperation.java @@ -1,6 +1,6 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.bridge.BavetForeBridgeUniConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.bridge.BavetForeBridgeUniConstraintStream; public interface BavetStreamBinaryOperation { /** diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/DynamicPropagationQueue.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/DynamicPropagationQueue.java similarity index 96% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/DynamicPropagationQueue.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/DynamicPropagationQueue.java index a6faf27348..ed08103e81 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/DynamicPropagationQueue.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/DynamicPropagationQueue.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.ArrayList; import java.util.BitSet; import java.util.List; import java.util.function.Consumer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; /** * This implementation has the capability to move tuples between the individual propagation queues. diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/ExistsCounter.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/ExistsCounter.java similarity index 75% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/ExistsCounter.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/ExistsCounter.java index 9ef192311b..43ff7f0f6c 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/ExistsCounter.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/ExistsCounter.java @@ -1,7 +1,7 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; public final class ExistsCounter extends AbstractPropagationMetadataCarrier { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/Group.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/Group.java similarity index 92% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/Group.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/Group.java index 69c4aa19ba..cbe02c73bd 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/Group.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/Group.java @@ -1,7 +1,7 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; final class Group extends AbstractPropagationMetadataCarrier { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructor.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructor.java similarity index 98% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructor.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructor.java index fb6c2be962..3722e6f613 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructor.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructor.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.List; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.impl.util.Pair; import ai.timefold.solver.core.impl.util.Quadruple; import ai.timefold.solver.core.impl.util.Triple; diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructorWithAccumulate.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructorWithAccumulate.java similarity index 91% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructorWithAccumulate.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructorWithAccumulate.java index d936b5c704..79529d91d9 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructorWithAccumulate.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructorWithAccumulate.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.List; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class GroupNodeConstructorWithAccumulate implements GroupNodeConstructor { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructorWithoutAccumulate.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructorWithoutAccumulate.java similarity index 91% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructorWithoutAccumulate.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructorWithoutAccumulate.java index 875cc83f4b..b2f5783f72 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/GroupNodeConstructorWithoutAccumulate.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/GroupNodeConstructorWithoutAccumulate.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.List; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; import ai.timefold.solver.core.config.solver.EnvironmentMode; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; final class GroupNodeConstructorWithoutAccumulate implements GroupNodeConstructor { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/NodeBuildHelper.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/NodeBuildHelper.java similarity index 89% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/NodeBuildHelper.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/NodeBuildHelper.java index a5b2bec382..b4663acab6 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/NodeBuildHelper.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/NodeBuildHelper.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.ArrayList; import java.util.Collections; @@ -8,16 +8,16 @@ import java.util.Set; import java.util.function.Function; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractConditionalTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.LeftTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.RightTupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.uni.AbstractForEachUniNode; -import ai.timefold.solver.constraint.streams.common.AbstractConstraintStream; -import ai.timefold.solver.constraint.streams.common.inliner.AbstractScoreInliner; import ai.timefold.solver.core.api.score.Score; import ai.timefold.solver.core.api.score.stream.ConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractConditionalTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.LeftTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.RightTupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.AbstractForEachUniNode; +import ai.timefold.solver.core.impl.score.stream.common.AbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.common.inliner.AbstractScoreInliner; public final class NodeBuildHelper> { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/PropagationQueue.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/PropagationQueue.java similarity index 91% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/PropagationQueue.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/PropagationQueue.java index 41bcfc6dc4..4d0d38d998 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/PropagationQueue.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/PropagationQueue.java @@ -1,6 +1,6 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; /** * A propagation queue is an ordered collection of items that need to be sent to the next node. diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/Propagator.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/Propagator.java similarity index 95% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/Propagator.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/Propagator.java index 98b962b688..b18d1d92b4 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/Propagator.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/Propagator.java @@ -1,6 +1,6 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintSession; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintSession; /** * Propagator is an interface that exposes the {@link PropagationQueue} to {@link BavetConstraintSession}. diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/StaticPropagationQueue.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/StaticPropagationQueue.java similarity index 93% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/StaticPropagationQueue.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/StaticPropagationQueue.java index ffe64263e8..05012d74ef 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/StaticPropagationQueue.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/StaticPropagationQueue.java @@ -1,12 +1,12 @@ -package ai.timefold.solver.constraint.streams.bavet.common; +package ai.timefold.solver.core.impl.score.stream.bavet.common; import java.util.ArrayDeque; import java.util.Deque; import java.util.function.Consumer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleLifecycle; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleLifecycle; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; /** * The implementation moves tuples directly into an either retract, update or insert queue, diff --git a/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/TupleSource.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/TupleSource.java new file mode 100644 index 0000000000..7e5a5ee517 --- /dev/null +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/TupleSource.java @@ -0,0 +1,4 @@ +package ai.timefold.solver.core.impl.score.stream.bavet.common; + +public interface TupleSource { +} diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeBiConstraintStream.java similarity index 74% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeBiConstraintStream.java index 9c78887dd5..be94e23482 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeBiConstraintStream.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.bi.BavetAbstractBiConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.TupleSource; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.bi.BavetAbstractBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.TupleSource; public final class BavetAftBridgeBiConstraintStream extends BavetAbstractBiConstraintStream diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeQuadConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeQuadConstraintStream.java similarity index 74% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeQuadConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeQuadConstraintStream.java index 1de0474f46..bc56c00f02 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeQuadConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeQuadConstraintStream.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.TupleSource; -import ai.timefold.solver.constraint.streams.bavet.quad.BavetAbstractQuadConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.TupleSource; +import ai.timefold.solver.core.impl.score.stream.bavet.quad.BavetAbstractQuadConstraintStream; public final class BavetAftBridgeQuadConstraintStream extends BavetAbstractQuadConstraintStream diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeTriConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeTriConstraintStream.java similarity index 74% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeTriConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeTriConstraintStream.java index a405ba42ad..6cace8759d 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeTriConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeTriConstraintStream.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.TupleSource; -import ai.timefold.solver.constraint.streams.bavet.tri.BavetAbstractTriConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.TupleSource; +import ai.timefold.solver.core.impl.score.stream.bavet.tri.BavetAbstractTriConstraintStream; public final class BavetAftBridgeTriConstraintStream extends BavetAbstractTriConstraintStream diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeUniConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeUniConstraintStream.java similarity index 74% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeUniConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeUniConstraintStream.java index dcfca5489a..e96ca54142 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetAftBridgeUniConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetAftBridgeUniConstraintStream.java @@ -1,13 +1,13 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; import java.util.Objects; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.BavetAbstractConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.common.TupleSource; -import ai.timefold.solver.constraint.streams.bavet.uni.BavetAbstractUniConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.BavetAbstractConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.common.TupleSource; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.BavetAbstractUniConstraintStream; public final class BavetAftBridgeUniConstraintStream extends BavetAbstractUniConstraintStream diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeBiConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeBiConstraintStream.java similarity index 76% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeBiConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeBiConstraintStream.java index 6d19a9bbee..02a870e280 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeBiConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeBiConstraintStream.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.bi.BavetAbstractBiConstraintStream; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.bi.BavetAbstractBiConstraintStream; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; public final class BavetForeBridgeBiConstraintStream extends BavetAbstractBiConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeQuadConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeQuadConstraintStream.java similarity index 76% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeQuadConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeQuadConstraintStream.java index 77b8f30bb3..10ce5bd857 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeQuadConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeQuadConstraintStream.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.quad.BavetAbstractQuadConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.quad.BavetAbstractQuadConstraintStream; public final class BavetForeBridgeQuadConstraintStream extends BavetAbstractQuadConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeTriConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeTriConstraintStream.java similarity index 76% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeTriConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeTriConstraintStream.java index a9e51bf9fc..2824e5aa7f 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeTriConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeTriConstraintStream.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.tri.BavetAbstractTriConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.tri.BavetAbstractTriConstraintStream; public final class BavetForeBridgeTriConstraintStream extends BavetAbstractTriConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeUniConstraintStream.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeUniConstraintStream.java similarity index 72% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeUniConstraintStream.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeUniConstraintStream.java index b6e60fd641..647190a02f 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/BavetForeBridgeUniConstraintStream.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/BavetForeBridgeUniConstraintStream.java @@ -1,9 +1,9 @@ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; -import ai.timefold.solver.constraint.streams.bavet.BavetConstraintFactory; -import ai.timefold.solver.constraint.streams.bavet.common.NodeBuildHelper; -import ai.timefold.solver.constraint.streams.bavet.uni.BavetAbstractUniConstraintStream; import ai.timefold.solver.core.api.score.Score; +import ai.timefold.solver.core.impl.score.stream.bavet.BavetConstraintFactory; +import ai.timefold.solver.core.impl.score.stream.bavet.common.NodeBuildHelper; +import ai.timefold.solver.core.impl.score.stream.bavet.uni.BavetAbstractUniConstraintStream; public final class BavetForeBridgeUniConstraintStream extends BavetAbstractUniConstraintStream { diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/package-info.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/package-info.java similarity index 67% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/package-info.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/package-info.java index 61a0874e35..1ca15f18a2 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/bridge/package-info.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/bridge/package-info.java @@ -4,11 +4,11 @@ * while aft bridges go after. *

* Aft bridges are node-shared, - * therefore their {@link java.lang.Object#equals(java.lang.Object)} and {@link java.lang.Object#hashCode()} (java.lang.Object)} + * therefore their {@link java.lang.Object#equals(Object)} and {@link java.lang.Object#hashCode()} (java.lang.Object)} * methods are overridden to reference the bridged stream, * which carries all the equality data. *

* Fore bridges are node-shared through their child stream * and therefore the equality logic can reside there entirely. */ -package ai.timefold.solver.constraint.streams.bavet.common.bridge; \ No newline at end of file +package ai.timefold.solver.core.impl.score.stream.bavet.common.bridge; \ No newline at end of file diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/ComparisonIndexer.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/ComparisonIndexer.java similarity index 64% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/ComparisonIndexer.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/ComparisonIndexer.java index e2f55fdc88..ccf8bae4e5 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/ComparisonIndexer.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/ComparisonIndexer.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common.index; +package ai.timefold.solver.core.impl.score.stream.bavet.common.index; import java.util.Comparator; import java.util.Map; @@ -11,20 +11,22 @@ import ai.timefold.solver.core.impl.score.stream.JoinerType; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; -final class ComparisonIndexer> implements Indexer { +final class ComparisonIndexer> + implements ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer { private final int propertyIndex; - private final Supplier> downstreamIndexerSupplier; + private final Supplier> downstreamIndexerSupplier; private final Comparator keyComparator; private final boolean hasOrEquals; - private final NavigableMap> comparisonMap; + private final NavigableMap> comparisonMap; - public ComparisonIndexer(JoinerType comparisonJoinerType, Supplier> downstreamIndexerSupplier) { + public ComparisonIndexer(JoinerType comparisonJoinerType, + Supplier> downstreamIndexerSupplier) { this(comparisonJoinerType, 0, downstreamIndexerSupplier); } public ComparisonIndexer(JoinerType comparisonJoinerType, int propertyIndex, - Supplier> downstreamIndexerSupplier) { + Supplier> downstreamIndexerSupplier) { this.propertyIndex = propertyIndex; this.downstreamIndexerSupplier = Objects.requireNonNull(downstreamIndexerSupplier); /* @@ -42,10 +44,11 @@ public ComparisonIndexer(JoinerType comparisonJoinerType, int propertyIndex, } @Override - public ElementAwareListEntry put(IndexProperties indexProperties, T tuple) { + public ElementAwareListEntry + put(ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties indexProperties, T tuple) { Key_ indexKey = indexProperties.toKey(propertyIndex); // Avoids computeIfAbsent in order to not create lambdas on the hot path. - Indexer downstreamIndexer = comparisonMap.get(indexKey); + ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer downstreamIndexer = comparisonMap.get(indexKey); if (downstreamIndexer == null) { downstreamIndexer = downstreamIndexerSupplier.get(); comparisonMap.put(indexKey, downstreamIndexer); @@ -54,18 +57,22 @@ public ElementAwareListEntry put(IndexProperties indexProperties, T tuple) { } @Override - public void remove(IndexProperties indexProperties, ElementAwareListEntry entry) { + public void remove(ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties indexProperties, + ElementAwareListEntry entry) { Key_ indexKey = indexProperties.toKey(propertyIndex); - Indexer downstreamIndexer = getDownstreamIndexer(indexProperties, indexKey, entry); + ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer downstreamIndexer = + getDownstreamIndexer(indexProperties, indexKey, entry); downstreamIndexer.remove(indexProperties, entry); if (downstreamIndexer.isEmpty()) { comparisonMap.remove(indexKey); } } - private Indexer getDownstreamIndexer(IndexProperties indexProperties, Key_ indexerKey, + private ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer getDownstreamIndexer( + ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties indexProperties, Key_ indexerKey, ElementAwareListEntry entry) { - Indexer downstreamIndexer = comparisonMap.get(indexerKey); + ai.timefold.solver.core.impl.score.stream.bavet.common.index.Indexer downstreamIndexer = + comparisonMap.get(indexerKey); if (downstreamIndexer == null) { throw new IllegalStateException("Impossible state: the tuple (" + entry.getElement() + ") with indexProperties (" + indexProperties @@ -76,14 +83,15 @@ private Indexer getDownstreamIndexer(IndexProperties indexProperties, Key_ in // TODO clean up DRY @Override - public int size(IndexProperties indexProperties) { + public int size(ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties indexProperties) { int mapSize = comparisonMap.size(); if (mapSize == 0) { return 0; } Key_ indexKey = indexProperties.toKey(propertyIndex); if (mapSize == 1) { // Avoid creation of the entry set and iterator. - Map.Entry> entry = comparisonMap.firstEntry(); + Map.Entry> entry = + comparisonMap.firstEntry(); int comparison = keyComparator.compare(entry.getKey(), indexKey); if (comparison >= 0) { // Possibility of reaching the boundary condition. if (comparison > 0 || !hasOrEquals) { @@ -94,7 +102,8 @@ public int size(IndexProperties indexProperties) { return entry.getValue().size(indexProperties); } else { int size = 0; - for (Map.Entry> entry : comparisonMap.entrySet()) { + for (Map.Entry> entry : comparisonMap + .entrySet()) { int comparison = keyComparator.compare(entry.getKey(), indexKey); if (comparison >= 0) { // Possibility of reaching the boundary condition. if (comparison > 0 || !hasOrEquals) { @@ -110,17 +119,20 @@ public int size(IndexProperties indexProperties) { } @Override - public void forEach(IndexProperties indexProperties, Consumer tupleConsumer) { + public void forEach(ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties indexProperties, + Consumer tupleConsumer) { int size = comparisonMap.size(); if (size == 0) { return; } Key_ indexKey = indexProperties.toKey(propertyIndex); if (size == 1) { // Avoid creation of the entry set and iterator. - Map.Entry> entry = comparisonMap.firstEntry(); + Map.Entry> entry = + comparisonMap.firstEntry(); visitEntry(indexProperties, tupleConsumer, indexKey, entry); } else { - for (Map.Entry> entry : comparisonMap.entrySet()) { + for (Map.Entry> entry : comparisonMap + .entrySet()) { boolean boundaryReached = visitEntry(indexProperties, tupleConsumer, indexKey, entry); if (boundaryReached) { return; @@ -129,8 +141,9 @@ public void forEach(IndexProperties indexProperties, Consumer tupleConsumer) } } - private boolean visitEntry(IndexProperties indexProperties, Consumer tupleConsumer, - Key_ indexKey, Map.Entry> entry) { + private boolean visitEntry(ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties indexProperties, + Consumer tupleConsumer, + Key_ indexKey, Map.Entry> entry) { // Comparator matches the order of iteration of the map, so the boundary is always found from the bottom up. int comparison = keyComparator.compare(entry.getKey(), indexKey); if (comparison >= 0) { // Possibility of reaching the boundary condition. diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/EqualsIndexer.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/EqualsIndexer.java similarity index 97% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/EqualsIndexer.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/EqualsIndexer.java index e63a287616..d9e9bc20d1 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/EqualsIndexer.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/EqualsIndexer.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common.index; +package ai.timefold.solver.core.impl.score.stream.bavet.common.index; import java.util.HashMap; import java.util.Map; diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/IndexProperties.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/IndexProperties.java similarity index 92% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/IndexProperties.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/IndexProperties.java index f32d47db47..2da212869c 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/IndexProperties.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/IndexProperties.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common.index; +package ai.timefold.solver.core.impl.score.stream.bavet.common.index; /** * Cached in tuples; each tuple carries its unique instance. diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/Indexer.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/Indexer.java similarity index 90% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/Indexer.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/Indexer.java index dfbad4dd58..1c90af0781 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/Indexer.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/Indexer.java @@ -1,8 +1,8 @@ -package ai.timefold.solver.constraint.streams.bavet.common.index; +package ai.timefold.solver.core.impl.score.stream.bavet.common.index; import java.util.function.Consumer; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TupleState; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TupleState; import ai.timefold.solver.core.impl.util.ElementAwareListEntry; /** diff --git a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/IndexerFactory.java b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/IndexerFactory.java similarity index 74% rename from core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/IndexerFactory.java rename to core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/IndexerFactory.java index f09c0dc9a9..31b18a762f 100644 --- a/core/constraint-streams/src/main/java/ai/timefold/solver/constraint/streams/bavet/common/index/IndexerFactory.java +++ b/core/src/main/java/ai/timefold/solver/core/impl/score/stream/bavet/common/index/IndexerFactory.java @@ -1,4 +1,4 @@ -package ai.timefold.solver.constraint.streams.bavet.common.index; +package ai.timefold.solver.core.impl.score.stream.bavet.common.index; import java.util.ArrayList; import java.util.NavigableMap; @@ -7,16 +7,16 @@ import java.util.function.Function; import java.util.function.Supplier; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.AbstractTuple; -import ai.timefold.solver.constraint.streams.bavet.common.tuple.TriTuple; -import ai.timefold.solver.constraint.streams.common.AbstractJoiner; -import ai.timefold.solver.constraint.streams.common.bi.DefaultBiJoiner; -import ai.timefold.solver.constraint.streams.common.penta.DefaultPentaJoiner; -import ai.timefold.solver.constraint.streams.common.quad.DefaultQuadJoiner; -import ai.timefold.solver.constraint.streams.common.tri.DefaultTriJoiner; import ai.timefold.solver.core.api.function.QuadFunction; import ai.timefold.solver.core.api.function.TriFunction; import ai.timefold.solver.core.impl.score.stream.JoinerType; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.AbstractTuple; +import ai.timefold.solver.core.impl.score.stream.bavet.common.tuple.TriTuple; +import ai.timefold.solver.core.impl.score.stream.common.AbstractJoiner; +import ai.timefold.solver.core.impl.score.stream.common.bi.DefaultBiJoiner; +import ai.timefold.solver.core.impl.score.stream.common.penta.DefaultPentaJoiner; +import ai.timefold.solver.core.impl.score.stream.common.quad.DefaultQuadJoiner; +import ai.timefold.solver.core.impl.score.stream.common.tri.DefaultTriJoiner; import ai.timefold.solver.core.impl.util.Pair; import ai.timefold.solver.core.impl.util.Quadruple; import ai.timefold.solver.core.impl.util.Triple; @@ -24,28 +24,32 @@ /** * {@link Indexer Indexers} form a parent-child hierarchy, * each child has exactly one parent. - * {@link NoneIndexer} is always at the bottom of the hierarchy, + * {@link ai.timefold.solver.core.impl.score.stream.bavet.common.index.NoneIndexer} is always at the bottom of the hierarchy, * never a parent unless it is the only indexer. * Parent indexers delegate to their children, - * until they reach the ultimate {@link NoneIndexer}. + * until they reach the ultimate {@link ai.timefold.solver.core.impl.score.stream.bavet.common.index.NoneIndexer}. *

* Example 1: EQUAL+LESS_THAN joiner will become EqualsIndexer -> ComparisonIndexer -> NoneIndexer. *

* Indexers have an id, which is the position of the indexer in the chain. * Top-most indexer has id 0, and the id increases as we go down the hierarchy. - * Each {@link AbstractTuple tuple} is assigned an {@link IndexProperties} instance, + * Each {@link AbstractTuple tuple} is assigned an + * {@link ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties} instance, * which determines its location in the index. - * {@link IndexProperties} instances are built from {@link AbstractJoiner joiners} + * {@link ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties} instances are built from + * {@link AbstractJoiner joiners} * using methods such as {@link #buildUniLeftMapping()} and {@link #buildRightMapping()}. - * Each {@link IndexProperties#toKey(int) index keyFunction} has an id, + * Each {@link ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties#toKey(int) index keyFunction} has an + * id, * and this id matches the id of the indexer; - * each keyFunction in {@link IndexProperties} is associated with a single indexer. + * each keyFunction in {@link ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexProperties} is associated with a + * single indexer. *

* Comparison joiners result in a single indexer each, * whereas equal joiners will be merged into a single indexer if they are consecutive. * In the latter case, * a composite keyFunction is created of type {@link Pair}, {@link TriTuple}, - * {@link Quadruple} or {@link IndexerKey}, + * {@link Quadruple} or {@link ai.timefold.solver.core.impl.score.stream.bavet.common.index.IndexerKey}, * based on the length of the composite keyFunction (number of equals joiners in sequence). * *