diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngine.java index dfbab69..c725591 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngine.java @@ -23,7 +23,7 @@ public class HeuristicEventMatchingEngine implements EventMatchingEngine { boolean hasPolyMatch = false; for (String pe : polyEvents) { if (pe.contains(".") && smEventRaw.contains(".")) { - if (smEventRaw.equals(pe) || smEventRaw.endsWith("." + pe)) { + if (smEventRaw.equals(pe) || smEventRaw.endsWith("." + pe) || pe.endsWith("." + smEventRaw)) { hasPolyMatch = true; break; } @@ -47,7 +47,7 @@ public class HeuristicEventMatchingEngine implements EventMatchingEngine { if (polyEvents.isEmpty() && isWildcard) return true; if (rawTriggerEvent.contains(".") && smEventRaw.contains(".")) { - if (smEventRaw.equals(rawTriggerEvent) || smEventRaw.endsWith("." + rawTriggerEvent)) { + if (smEventRaw.equals(rawTriggerEvent) || smEventRaw.endsWith("." + rawTriggerEvent) || rawTriggerEvent.endsWith("." + smEventRaw)) { return true; } return false; diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngineTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngineTest.java index 032e0fa..c7805b9 100644 --- a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngineTest.java +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/analysis/enricher/matching/HeuristicEventMatchingEngineTest.java @@ -75,4 +75,17 @@ class HeuristicEventMatchingEngineTest { assertThat(engine.matches(smEvent, triggerPoint)).isTrue(); } + + @Test + void shouldMatchBidirectionalFqnAndShortName() { + // Case 1: smEvent is short, trigger event is FQN + Event smEvent1 = Event.of("PAY", "OrderEvents.PAY"); + TriggerPoint triggerPoint1 = TriggerPoint.builder().event("com.example.OrderEvents.PAY").build(); + assertThat(engine.matches(smEvent1, triggerPoint1)).isTrue(); + + // Case 2: smEvent is short, polymorphic event is FQN + Event smEvent2 = Event.of("PAY", "OrderEvents.PAY"); + TriggerPoint triggerPoint2 = TriggerPoint.builder().event("getType()").polymorphicEvents(List.of("com.example.OrderEvents.PAY")).build(); + assertThat(engine.matches(smEvent2, triggerPoint2)).isTrue(); + } }