@@ -258,19 +258,23 @@ public List<List<String>> describeOnly(Collection<State> subset, Set<Integer> sh
258258
259259 /**
260260 * The state sets, as indexes into {@link State#names()}, whose states in {@code after} differ from those in
261- * {@code before}; every set if no set differs on its own, since then only their combination changed
261+ * {@code before}. Every set if the other sets, taken together, differ too: then how the states of different sets
262+ * are combined changed, which naming the changed sets alone would hide.
262263 */
263264 public Set <Integer > stateSetsChanged (Collection <State > before , Collection <State > after ) {
264265 Set <Integer > every = IntStream .range (0 , states .get (0 ).names ().size ()).boxed ()
265266 .collect (Collectors .toCollection (TreeSet ::new ));
266- Set <Integer > changed = every .stream ().filter (k -> !statesIn (before , k ).equals (statesIn (after , k )))
267+ Set <Integer > changed = every .stream ()
268+ .filter (k -> !statesIn (before , Set .of (k )).equals (statesIn (after , Set .of (k ))))
267269 .collect (Collectors .toCollection (TreeSet ::new ));
268- return changed .isEmpty () ? every : changed ;
270+ Set <Integer > kept = every .stream ().filter (k -> !changed .contains (k )).collect (Collectors .toSet ());
271+ return !changed .isEmpty () && statesIn (before , kept ).equals (statesIn (after , kept )) ? changed : every ;
269272 }
270273
271- /** The states of the set {@code k} that {@code subset} has */
272- private static Set <String > statesIn (Collection <State > subset , int k ) {
273- return subset .stream ().map (s -> s .names ().get (k )).collect (Collectors .toSet ());
274+ /** The states of the sets {@code sets} that {@code subset} has, combined as in its states */
275+ private static Set <List <String >> statesIn (Collection <State > subset , Set <Integer > sets ) {
276+ return subset .stream ().map (s -> sets .stream ().sorted ().map (s .names ()::get ).toList ())
277+ .collect (Collectors .toSet ());
274278 }
275279
276280 /**
0 commit comments