From 398886449453a40f7f7f30646c6a3aafcdb24fca Mon Sep 17 00:00:00 2001 From: Kamil Patryk Kozakowski Date: Sun, 5 Jul 2026 14:46:38 +0200 Subject: [PATCH] update number 3 --- .../matching/StrictFqnMatchingEngine.java | 16 ++++++++++++++ .../matching/StrictFqnMatchingEngineTest.java | 22 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngine.java index d6fd3e3..0162fe8 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngine.java @@ -69,6 +69,16 @@ public class StrictFqnMatchingEngine implements EventMatchingEngine { if (!tConst.equals(smConst)) return false; + // Prevent matching string/primitive triggers to enum transitions + if (isStringTypeOrPrimitive(eventTypeFqn) && smEvent.contains(".")) { + return false; + } + + // Prevent matching enum triggers to string transitions + if (!smEvent.contains(".") && triggerEvent.contains(".")) { + return false; + } + if (eventTypeFqn != null && eventTypeFqn.contains(".") && smEvent.contains(".")) { String fullTriggerFqn = eventTypeFqn + "." + tConst; return fullTriggerFqn.equals(smEvent); @@ -85,6 +95,12 @@ public class StrictFqnMatchingEngine implements EventMatchingEngine { return true; } + private boolean isStringTypeOrPrimitive(String typeFqn) { + if (typeFqn == null) return false; + return typeFqn.equals("String") || typeFqn.equals("java.lang.String") || + typeFqn.equals("int") || typeFqn.equals("long") || typeFqn.equals("char"); + } + private boolean isWildcardVariable(String eventStr) { if (eventStr == null) return false; diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngineTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngineTest.java index 95b21c9..8d260ac 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngineTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/StrictFqnMatchingEngineTest.java @@ -118,4 +118,26 @@ class StrictFqnMatchingEngineTest { assertThat(engine.matches(smEvent, triggerPoint)).isFalse(); } + + @Test + void shouldNotMatchStringTypeToEnumFqn() { + Event smEvent = Event.of("PAY", "com.example.OrderEvents.PAY"); + TriggerPoint triggerPoint = TriggerPoint.builder() + .event("PAY") + .eventTypeFqn("java.lang.String") + .build(); + + assertThat(engine.matches(smEvent, triggerPoint)).isFalse(); + } + + @Test + void shouldNotMatchEnumTypeToStringFqn() { + Event smEvent = Event.of("PAY", "PAY"); + TriggerPoint triggerPoint = TriggerPoint.builder() + .event("OrderEvents.PAY") + .eventTypeFqn("com.example.OrderEvents") + .build(); + + assertThat(engine.matches(smEvent, triggerPoint)).isFalse(); + } }