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 == '_'); }