Skip to content

Commit ed2dfa9

Browse files
fix: sonar issues
1 parent 3a84835 commit ed2dfa9

File tree

3 files changed

+26
-19
lines changed

3 files changed

+26
-19
lines changed

core/src/main/java/ai/timefold/solver/core/impl/bavet/common/TupleSourceRoot.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package ai.timefold.solver.core.impl.bavet.common;
22

3-
import org.jspecify.annotations.Nullable;
3+
import org.jspecify.annotations.NullMarked;
44

5+
@NullMarked
56
public interface TupleSourceRoot<A> {
6-
void insert(@Nullable A a);
7+
void insert(A a);
78

8-
void update(@Nullable A a);
9+
void update(A a);
910

10-
void retract(@Nullable A a);
11+
void retract(A a);
1112

1213
boolean allowsInstancesOf(Class<?> clazz);
1314

core/src/main/java/ai/timefold/solver/core/impl/bavet/uni/StaticDataUniNode.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,19 @@ public Propagator getPropagator() {
6464
return propagationQueue;
6565
}
6666

67-
public void insert(@Nullable Object a) {
67+
@Override
68+
public void insert(Object a) {
6869
if (tupleMap.containsKey(a)) {
6970
return;
7071
}
71-
tupleMap.values().stream().flatMap(List::stream).forEach(this::retractExisting);
72+
invalidateCache();
7273
tupleMap.put(a, new ArrayList<>());
7374
insertIntoNodeNetwork(a);
7475
recalculateTuples();
7576
}
7677

77-
public void update(@Nullable Object a) {
78+
@Override
79+
public void update(Object a) {
7880
for (var mappedTuple : tupleMap.get(a)) {
7981
updateExisting(a, mappedTuple);
8082
}
@@ -93,11 +95,12 @@ private void updateExisting(@Nullable Object a, UniTuple<A> tuple) {
9395
}
9496
}
9597

96-
public void retract(@Nullable Object a) {
98+
@Override
99+
public void retract(Object a) {
97100
if (!tupleMap.containsKey(a)) {
98101
return;
99102
}
100-
tupleMap.values().stream().flatMap(List::stream).forEach(this::retractExisting);
103+
invalidateCache();
101104
tupleMap.remove(a);
102105
retractFromNodeNetwork(a);
103106
recalculateTuples();
@@ -125,29 +128,30 @@ private void retractExisting(UniTuple<A> tuple) {
125128
}
126129

127130
private void insertIntoNodeNetwork(Object toInsert) {
128-
nodeNetwork.getTupleSourceRootNodes(toInsert.getClass()).forEach(node -> {
129-
((AbstractForEachUniNode) node).insert(toInsert);
130-
});
131+
nodeNetwork.getTupleSourceRootNodes(toInsert.getClass())
132+
.forEach(node -> ((AbstractForEachUniNode) node).insert(toInsert));
131133
}
132134

133135
private void retractFromNodeNetwork(Object toRetract) {
134-
nodeNetwork.getTupleSourceRootNodes(toRetract.getClass()).forEach(node -> {
135-
((AbstractForEachUniNode) node).retract(toRetract);
136-
});
136+
nodeNetwork.getTupleSourceRootNodes(toRetract.getClass())
137+
.forEach(node -> ((AbstractForEachUniNode) node).retract(toRetract));
138+
}
139+
140+
private void invalidateCache() {
141+
tupleMap.values().stream().flatMap(List::stream).forEach(this::retractExisting);
142+
recordingTupleNode.getTupleRecorder().reset();
137143
}
138144

139145
private void recalculateTuples() {
140146
var recorder = recordingTupleNode.getTupleRecorder();
141-
recorder.reset();
142147
for (var mappedTupleEntry : tupleMap.entrySet()) {
143148
mappedTupleEntry.getValue().clear();
144149
var invalidated = mappedTupleEntry.getKey();
145150
recorder.recordingInto(mappedTupleEntry.getValue(), this::remapTuple, () -> {
146151
// Do an update on the object and settle the network; this will update precisely the
147152
// tuples mapped to this node, which will then be recorded
148-
nodeNetwork.getTupleSourceRootNodes(invalidated.getClass()).forEach(node -> {
149-
((AbstractForEachUniNode) node).update(invalidated);
150-
});
153+
nodeNetwork.getTupleSourceRootNodes(invalidated.getClass())
154+
.forEach(node -> ((AbstractForEachUniNode) node).update(invalidated));
151155
nodeNetwork.settle();
152156
});
153157
}

core/src/main/java/ai/timefold/solver/core/impl/score/director/stream/BavetConstraintStreamScoreDirector.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,11 @@ public void afterProblemFactAdded(Object problemFact) {
180180
super.afterProblemFactAdded(problemFact);
181181
}
182182

183+
@Override
183184
public void beforeProblemPropertyChanged(Object problemFactOrEntity) {
184185
// Since this is called when a fact (not a variable changes),
185186
// we need to retract and reinsert to update cached static data
187+
super.beforeProblemPropertyChanged(problemFactOrEntity);
186188
session.retract(problemFactOrEntity);
187189
}
188190

0 commit comments

Comments
 (0)