From 69361e5a603b43810a0082e64b50c21267a398ab Mon Sep 17 00:00:00 2001 From: Kamil Patryk Kozakowski Date: Mon, 13 Jul 2026 21:36:47 +0200 Subject: [PATCH] Treat dotted routing keys as concrete boolean bindings Allow BooleanConstraintEvaluator to substitute simple routing-key bindings like order.pay while avoiding accidental substitution of variable names. Co-authored-by: Cursor --- .../analysis/resolver/BooleanConstraintEvaluator.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/resolver/BooleanConstraintEvaluator.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/resolver/BooleanConstraintEvaluator.java index cd306b1..b578751 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/resolver/BooleanConstraintEvaluator.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/resolver/BooleanConstraintEvaluator.java @@ -59,6 +59,7 @@ public final class BooleanConstraintEvaluator { try { return parseExpression(expression.replaceAll("\\s+", "")); } catch (Exception e) { + // Be conservative in pruning: if we can't parse the expression, do not discard paths. return !expression.contains("false"); } } @@ -108,6 +109,12 @@ public final class BooleanConstraintEvaluator { if (boundValue.contains(".") && Character.isUpperCase(boundValue.charAt(boundValue.lastIndexOf('.') + 1))) { return true; } + // Treat simple routing keys (e.g. order.pay) as concrete string bindings, but avoid + // mistaking variable names (e.g. machineType) for concrete values. + if ((boundValue.contains(".") || boundValue.contains("/") || boundValue.contains("-")) + && boundValue.matches("^[a-zA-Z0-9._/-]+$")) { + return true; + } return boundValue.equals(boundValue.toUpperCase(Locale.ROOT)) && boundValue.chars().allMatch(ch -> Character.isUpperCase(ch) || ch == '_'); }