Skip to content

Commit 3531f19

Browse files
Christopher-Chianellitriceo
authored andcommitted
chore: deprecate PiggybackShadowVariable
1 parent f47b08f commit 3531f19

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

core/src/main/java/ai/timefold/solver/core/api/domain/variable/PiggybackShadowVariable.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@
1414
* variable listener.
1515
* <p>
1616
* It is specified on a getter of a java bean property (or a field) of a {@link PlanningEntity} class.
17+
*
18+
* @deprecated Use a {@link ShadowVariable#supplierName() supplier} with {@link ShadowSources sources} instead.
1719
*/
1820
@Target({ METHOD, FIELD })
1921
@Retention(RUNTIME)
22+
@Deprecated(since = "1.28.0", forRemoval = true)
2023
public @interface PiggybackShadowVariable {
2124

2225
/**

core/src/main/java/ai/timefold/solver/core/impl/domain/variable/custom/PiggybackShadowVariableDescriptor.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import ai.timefold.solver.core.api.domain.solution.PlanningSolution;
88
import ai.timefold.solver.core.api.domain.variable.PiggybackShadowVariable;
99
import ai.timefold.solver.core.api.domain.variable.ShadowVariable;
10+
import ai.timefold.solver.core.api.domain.variable.VariableListener;
1011
import ai.timefold.solver.core.impl.domain.common.accessor.MemberAccessor;
1112
import ai.timefold.solver.core.impl.domain.entity.descriptor.EntityDescriptor;
1213
import ai.timefold.solver.core.impl.domain.policy.DescriptorPolicy;
@@ -70,11 +71,13 @@ private void linkShadowSources(DescriptorPolicy descriptorPolicy) {
7071
+ shadowEntityDescriptor.buildInvalidVariableNameExceptionMessage(shadowVariableName));
7172
}
7273
if (!(uncastShadowVariableDescriptor instanceof CustomShadowVariableDescriptor)) {
73-
throw new IllegalArgumentException("The entityClass (" + entityDescriptor.getEntityClass()
74-
+ ") has a @" + PiggybackShadowVariable.class.getSimpleName()
75-
+ " annotated property (" + variableMemberAccessor.getName()
76-
+ ") with refVariable (" + uncastShadowVariableDescriptor.getSimpleEntityAndVariableName()
77-
+ ") that lacks a @" + ShadowVariable.class.getSimpleName() + " annotation.");
74+
throw new IllegalArgumentException("""
75+
The entityClass (%s) has a @%s annotated property (%s) with refVariable (%s) that
76+
lacks a %s @%s annotation.
77+
""".formatted(entityDescriptor.getEntityClass(), PiggybackShadowVariable.class.getSimpleName(),
78+
variableMemberAccessor.getName(), uncastShadowVariableDescriptor.getSimpleEntityAndVariableName(),
79+
VariableListener.class.getSimpleName(),
80+
ShadowVariable.class.getSimpleName()));
7881
}
7982
shadowVariableDescriptor = (CustomShadowVariableDescriptor<Solution_>) uncastShadowVariableDescriptor;
8083
shadowVariableDescriptor.registerSinkVariableDescriptor(this);

core/src/test/java/ai/timefold/solver/core/impl/domain/variable/cascade/SingleCascadingUpdateShadowVariableListenerTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ void requiredShadowVariableDependencies() {
3737
"Shadow variables such as @CascadingUpdateShadowVariable are not allowed to be used as source")
3838
.withMessageContaining("Maybe check if cascadeValue is annotated with @CascadingUpdateShadowVariable");
3939
assertThatIllegalArgumentException().isThrownBy(TestdataCascadingInvalidPiggyback::buildEntityDescriptor)
40-
.withMessageContaining(
41-
"The entityClass (class ai.timefold.solver.core.testdomain.shadow.wrongcascade.TestdataCascadingInvalidPiggyback)")
42-
.withMessageContaining("has a @PiggybackShadowVariable annotated property (cascadeValue2)")
43-
.withMessageContaining(
44-
"with refVariable (TestdataCascadingInvalidPiggyback.cascadeValue) that lacks a @ShadowVariable annotation");
40+
.withMessageContainingAll(
41+
"The entityClass (class ai.timefold.solver.core.testdomain.shadow.wrongcascade.TestdataCascadingInvalidPiggyback)",
42+
"has a @PiggybackShadowVariable annotated property (cascadeValue2)",
43+
"with refVariable (TestdataCascadingInvalidPiggyback.cascadeValue) that",
44+
"lacks a VariableListener @ShadowVariable annotation.");
4545
}
4646

4747
@Test

0 commit comments

Comments
 (0)