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 c809889..9970495 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 @@ -2138,10 +2138,20 @@ import java.util.*; List results = new ArrayList<>(); if (expr instanceof SimpleName sn) { String varName = sn.getIdentifier(); - if (!visitedVariables.add(varName)) { + String methodKey = ""; + MethodDeclaration enclosingMethod = findEnclosingMethod(expr); + if (enclosingMethod != null) { + TypeDeclaration enclosingType = findEnclosingType(enclosingMethod); + if (enclosingType != null) { + methodKey = context.getFqn(enclosingType) + "." + enclosingMethod.getName().getIdentifier() + "#" + varName; + } + } + if (methodKey.isEmpty()) { + methodKey = varName; + } + if (!visitedVariables.add(methodKey)) { return results; // Break infinite loop } - MethodDeclaration enclosingMethod = findEnclosingMethod(expr); if (enclosingMethod != null) { enclosingMethod.accept(new ASTVisitor() { @Override @@ -2160,7 +2170,7 @@ import java.util.*; } }); if (!results.isEmpty()) { - visitedVariables.remove(varName); + visitedVariables.remove(methodKey); return results; } @@ -2200,14 +2210,14 @@ import java.util.*; } }); if (!callerExprs.isEmpty()) { - visitedVariables.remove(varName); + visitedVariables.remove(methodKey); return callerExprs; } } } } } - visitedVariables.remove(varName); + visitedVariables.remove(methodKey); } results.add(expr); return results;