This commit is contained in:
2026-06-20 14:31:11 +02:00
parent ff16c1bbe7
commit 34a4e2ab98

View File

@@ -437,7 +437,7 @@ public class CallGraphBuilder {
});
if (initializer[0] != null) {
Expression expr = traceVariable(initializer[0]);
Expression expr = traceVariable(initializer[0], new HashSet<>());
if (expr instanceof MethodInvocation mi) {
// Unwrapper logic: If wrapper method is called, extract its arguments recursively
Expression innerMost = unwrapMethodInvocation(mi, 0);
@@ -636,7 +636,7 @@ public class CallGraphBuilder {
}
// Extract from constructor args (e.g., new CustomMessage(OrderEvent.PROCESS, ...))
Expression tracedExpr = traceVariable(expr);
Expression tracedExpr = traceVariable(expr, new HashSet<>());
if (tracedExpr instanceof QualifiedName || tracedExpr instanceof ClassInstanceCreation || tracedExpr instanceof StringLiteral || tracedExpr instanceof NumberLiteral) {
expr = tracedExpr; // Only accept trace if it resolves to a pure constant/primitive/constructor
}
@@ -917,7 +917,10 @@ public class CallGraphBuilder {
}
return (TypeDeclaration) parent;
}
private Expression traceVariable(Expression expr) {
private Expression traceVariable(Expression expr, Set<Expression> visited) {
if (!visited.add(expr)) {
return expr; // Cycle detected
}
if (expr instanceof SimpleName sn) {
String varName = sn.getIdentifier();
MethodDeclaration enclosingMethod = findEnclosingMethod(expr);
@@ -940,7 +943,7 @@ public class CallGraphBuilder {
}
});
if (initializer[0] != null) {
return traceVariable(initializer[0]);
return traceVariable(initializer[0], visited);
}
}
}