From 0bda5a0aebec246e5b5d02f421c6a8a7edee4de1 Mon Sep 17 00:00:00 2001 From: Kamil Patryk Kozakowski Date: Sat, 27 Jun 2026 05:56:23 +0200 Subject: [PATCH] gemini back 4 --- .../service/AbstractCallGraphEngine.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java index 9970495..e2aa425 100644 --- a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/analysis/service/AbstractCallGraphEngine.java @@ -553,6 +553,27 @@ import java.util.*; String val = e; return !val.equals(val.toUpperCase()) || val.length() <= 1; }); + + String targetMethod = path.get(path.size() - 1); + int eventParamIndex = getParameterIndex(targetMethod, event); + if (eventParamIndex < 0) { + eventParamIndex = 0; + } + String expectedType = getParameterType(targetMethod, eventParamIndex); + if (expectedType != null) { + final String expType = expectedType; + boolean isExpectedEnum = context.getEnumValues(expType) != null; + polymorphicEvents.removeIf(e -> { + if (e.contains(".")) { + String actualType = e.substring(0, e.lastIndexOf('.')); + boolean isActualEnum = context.getEnumValues(actualType) != null; + if (isExpectedEnum && isActualEnum) { + return !isTypeCompatible(actualType, expType); + } + } + return false; + }); + } polymorphicEvents = polymorphicEvents.stream().distinct().collect(java.util.stream.Collectors.toList()); @@ -606,6 +627,8 @@ import java.util.*; protected boolean isTypeCompatible(String actualType, String expectedType) { if (actualType == null || expectedType == null) return true; + if (expectedType.equals("Object") || expectedType.equals("java.lang.Object")) return true; + if (actualType.equals("Object") || actualType.equals("java.lang.Object")) return true; if (expectedType.length() == 1 && Character.isUpperCase(expectedType.charAt(0))) return true; if (actualType.length() == 1 && Character.isUpperCase(actualType.charAt(0))) return true;