Skip to content

Commit 7bb6b28

Browse files
fix: fail-fast on @PlanningEntity being used in a @ProblemFactCollectionProperty
The old test classes had different issues that caused a different fail-fast; those issues are now removed.
1 parent 204786b commit 7bb6b28

6 files changed

Lines changed: 29 additions & 7 deletions

File tree

core/src/main/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptor.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,13 @@ private void processProblemFactPropertyAnnotation(DescriptorPolicy descriptorPol
587587
Collection.class.getSimpleName()));
588588
}
589589
problemFactCollectionMemberAccessorMap.put(memberAccessor.getName(), memberAccessor);
590-
problemFactType = type;
590+
591+
if (type.isArray()) {
592+
problemFactType = type.getComponentType();
593+
} else {
594+
problemFactType = ConfigUtils.extractGenericTypeParameterOrFail("", memberAccessor.getDeclaringClass(),
595+
type, memberAccessor.getGenericType(), annotationClass, memberAccessor.getName());
596+
}
591597
} else {
592598
throw new IllegalStateException("Impossible situation with annotationClass (" + annotationClass + ").");
593599
}

core/src/test/java/ai/timefold/solver/core/impl/domain/solution/descriptor/SolutionDescriptorTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import ai.timefold.solver.core.testdomain.invalid.constraintconfiguration.TestdataInvalidConfigurationSolution;
3434
import ai.timefold.solver.core.testdomain.invalid.constraintweightoverrides.TestdataInvalidConstraintWeightOverridesSolution;
3535
import ai.timefold.solver.core.testdomain.invalid.duplicateweightoverrides.TestdataDuplicateWeightConfigurationSolution;
36+
import ai.timefold.solver.core.testdomain.invalid.entityannotatedasproblemfact.TestdataEntityAnnotatedAsProblemFactCollectionSolution;
3637
import ai.timefold.solver.core.testdomain.invalid.entityannotatedasproblemfact.TestdataEntityAnnotatedAsProblemFactSolution;
3738
import ai.timefold.solver.core.testdomain.invalid.multivar.TestdataInvalidMultiVarSolution;
3839
import ai.timefold.solver.core.testdomain.invalid.nosolution.TestdataNoSolution;
@@ -134,7 +135,8 @@ void planningEntityIsProblemFactProperty() {
134135

135136
@Test
136137
void planningEntityIsProblemFactCollectionProperty() {
137-
assertThatIllegalStateException().isThrownBy(TestdataEntityAnnotatedAsProblemFactSolution::buildSolutionDescriptor);
138+
assertThatIllegalStateException()
139+
.isThrownBy(TestdataEntityAnnotatedAsProblemFactCollectionSolution::buildSolutionDescriptor);
138140
}
139141

140142
@Test

core/src/test/java/ai/timefold/solver/core/testdomain/invalid/entityannotatedasproblemfact/TestdataEntityAnnotatedAsProblemFactCollectionSolution.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.util.List;
44

5+
import ai.timefold.solver.core.api.domain.solution.PlanningEntityCollectionProperty;
6+
import ai.timefold.solver.core.api.domain.solution.PlanningScore;
57
import ai.timefold.solver.core.api.domain.solution.PlanningSolution;
68
import ai.timefold.solver.core.api.domain.solution.ProblemFactCollectionProperty;
79
import ai.timefold.solver.core.api.domain.valuerange.ValueRangeProvider;
@@ -25,6 +27,11 @@ public TestdataEntityAnnotatedAsProblemFactCollectionSolution() {
2527
}
2628

2729
@ProblemFactCollectionProperty
30+
public List<TestdataEntity> getEntitiesAsFacts() {
31+
return entities;
32+
}
33+
34+
@PlanningEntityCollectionProperty
2835
public List<TestdataEntity> getEntities() {
2936
return entities;
3037
}
@@ -42,6 +49,7 @@ public void setValues(List<TestdataValue> values) {
4249
this.values = values;
4350
}
4451

52+
@PlanningScore
4553
public SimpleScore getScore() {
4654
return score;
4755
}

core/src/test/java/ai/timefold/solver/core/testdomain/invalid/entityannotatedasproblemfact/TestdataEntityAnnotatedAsProblemFactSolution.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.util.List;
44

5+
import ai.timefold.solver.core.api.domain.solution.PlanningEntityProperty;
6+
import ai.timefold.solver.core.api.domain.solution.PlanningScore;
57
import ai.timefold.solver.core.api.domain.solution.PlanningSolution;
68
import ai.timefold.solver.core.api.domain.solution.ProblemFactProperty;
79
import ai.timefold.solver.core.api.domain.valuerange.ValueRangeProvider;
@@ -24,11 +26,16 @@ public static SolutionDescriptor<TestdataEntityAnnotatedAsProblemFactSolution> b
2426
public TestdataEntityAnnotatedAsProblemFactSolution() {
2527
}
2628

27-
@ProblemFactProperty
29+
@PlanningEntityProperty
2830
public TestdataEntity getEntity() {
2931
return entity;
3032
}
3133

34+
@ProblemFactProperty
35+
public TestdataEntity getEntityAsFact() {
36+
return entity;
37+
}
38+
3239
public void setEntity(TestdataEntity entity) {
3340
this.entity = entity;
3441
}
@@ -42,6 +49,7 @@ public void setValues(List<TestdataValue> values) {
4249
this.values = values;
4350
}
4451

52+
@PlanningScore
4553
public SimpleScore getScore() {
4654
return score;
4755
}

core/src/test/java/ai/timefold/solver/core/testdomain/shadow/inverserelation/TestdataInverseRelationSolution.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import ai.timefold.solver.core.api.domain.solution.PlanningEntityCollectionProperty;
66
import ai.timefold.solver.core.api.domain.solution.PlanningScore;
77
import ai.timefold.solver.core.api.domain.solution.PlanningSolution;
8-
import ai.timefold.solver.core.api.domain.solution.ProblemFactCollectionProperty;
98
import ai.timefold.solver.core.api.domain.valuerange.ValueRangeProvider;
109
import ai.timefold.solver.core.api.score.buildin.simple.SimpleScore;
1110
import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor;
@@ -32,7 +31,7 @@ public TestdataInverseRelationSolution(String code) {
3231
}
3332

3433
@ValueRangeProvider(id = "valueRange")
35-
@ProblemFactCollectionProperty
34+
@PlanningEntityCollectionProperty
3635
public List<TestdataInverseRelationValue> getValueList() {
3736
return valueList;
3837
}

quarkus-integration/quarkus-benchmark/integration-test/src/main/java/ai/timefold/solver/quarkus/benchmark/it/domain/TestdataStringLengthShadowSolution.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@
55
import ai.timefold.solver.core.api.domain.solution.PlanningEntityCollectionProperty;
66
import ai.timefold.solver.core.api.domain.solution.PlanningScore;
77
import ai.timefold.solver.core.api.domain.solution.PlanningSolution;
8-
import ai.timefold.solver.core.api.domain.solution.ProblemFactCollectionProperty;
98
import ai.timefold.solver.core.api.domain.valuerange.ValueRangeProvider;
109
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
1110

1211
@PlanningSolution
1312
public class TestdataStringLengthShadowSolution {
1413

15-
@ProblemFactCollectionProperty
14+
@PlanningEntityCollectionProperty
1615
@ValueRangeProvider
1716
private List<TestdataListValueShadowEntity> valueList;
1817

0 commit comments

Comments
 (0)