This commit is contained in:
2026-07-06 17:59:58 +02:00
parent 092fbe49fa
commit 89736a4aa1
2 changed files with 29 additions and 0 deletions

View File

@@ -238,6 +238,20 @@ public abstract class AbstractCallGraphEngine implements CallGraphEngine {
} }
} }
} }
if (!found) {
// Bridge polymorphic interfaces to implementations without graph edges
String callerSimple = caller.contains(".") ? caller.substring(caller.lastIndexOf('.') + 1) : caller;
String targetSimple = target.contains(".") ? target.substring(target.lastIndexOf('.') + 1) : target;
if (callerSimple.equals(targetSimple)) {
String interfaceParamName = typeResolver.getParameterName(caller, paramIndex);
if (interfaceParamName != null) {
currentParamName = interfaceParamName;
if (finalParamNameRef != null) finalParamNameRef[0] = currentParamName;
resolvedValue = currentParamName + methodSuffix;
found = true;
}
}
}
if (!found) break; if (!found) break;
} }

View File

@@ -30,6 +30,21 @@ public class TypeResolver {
return -1; return -1;
} }
public String getParameterName(String methodFqn, int index) {
if (methodFqn == null || !methodFqn.contains(".") || index < 0) return null;
String className = methodFqn.substring(0, methodFqn.lastIndexOf('.'));
String methodName = methodFqn.substring(methodFqn.lastIndexOf('.') + 1);
TypeDeclaration td = context.getTypeDeclaration(className);
if (td != null) {
MethodDeclaration md = context.findMethodDeclaration(td, methodName, true);
if (md != null && index < md.parameters().size()) {
SingleVariableDeclaration svd = (SingleVariableDeclaration) md.parameters().get(index);
return svd.getName().getIdentifier();
}
}
return null;
}
public String getParameterType(String methodFqn, int index) { public String getParameterType(String methodFqn, int index) {
if (methodFqn == null || !methodFqn.contains(".") || index < 0) return null; if (methodFqn == null || !methodFqn.contains(".") || index < 0) return null;
String className = methodFqn.substring(0, methodFqn.lastIndexOf('.')); String className = methodFqn.substring(0, methodFqn.lastIndexOf('.'));