This commit is contained in:
2026-06-23 22:31:47 +02:00
parent 135e4278ef
commit 652435a58d

View File

@@ -157,22 +157,34 @@ public class ConstantResolver {
private String evaluateMethodOutput(MethodInvocation mi, MethodDeclaration md, CodebaseContext context, Set<String> visited) { private String evaluateMethodOutput(MethodInvocation mi, MethodDeclaration md, CodebaseContext context, Set<String> visited) {
if (md.getBody() == null || mi.arguments().size() != md.parameters().size()) return null; if (md.getBody() == null || mi.arguments().size() != md.parameters().size()) return null;
java.util.Map<String, String> localVars = new java.util.HashMap<>(); TypeDeclaration td = findEnclosingType(md);
java.util.Set<String> declaredLocals = new java.util.HashSet<>(); if (td == null) return null;
String methodFqn = context.getFqn(td) + "." + md.getName().getIdentifier();
for (int i = 0; i < mi.arguments().size(); i++) {
Expression arg = (Expression) mi.arguments().get(i); if (!visited.add(methodFqn)) {
String val = resolveInternal(arg, context, visited); return null; // Cycle detected in method evaluation
if (val != null) {
org.eclipse.jdt.core.dom.SingleVariableDeclaration param =
(org.eclipse.jdt.core.dom.SingleVariableDeclaration) md.parameters().get(i);
String paramName = param.getName().getIdentifier();
localVars.put(paramName, val);
declaredLocals.add(paramName);
}
} }
return evaluateBody(md.getBody(), localVars, declaredLocals, context, visited); try {
java.util.Map<String, String> localVars = new java.util.HashMap<>();
java.util.Set<String> declaredLocals = new java.util.HashSet<>();
for (int i = 0; i < mi.arguments().size(); i++) {
Expression arg = (Expression) mi.arguments().get(i);
String val = resolveInternal(arg, context, visited);
if (val != null) {
org.eclipse.jdt.core.dom.SingleVariableDeclaration param =
(org.eclipse.jdt.core.dom.SingleVariableDeclaration) md.parameters().get(i);
String paramName = param.getName().getIdentifier();
localVars.put(paramName, val);
declaredLocals.add(paramName);
}
}
return evaluateBody(md.getBody(), localVars, declaredLocals, context, visited);
} finally {
visited.remove(methodFqn);
}
} }
/** /**
@@ -187,9 +199,22 @@ public class ConstantResolver {
CodebaseContext context, CodebaseContext context,
Set<String> visited) { Set<String> visited) {
if (md.getBody() == null) return null; if (md.getBody() == null) return null;
java.util.Map<String, String> localVars = new java.util.HashMap<>(prebuiltLocals);
java.util.Set<String> declaredLocals = new java.util.HashSet<>(prebuiltLocals.keySet()); TypeDeclaration td = findEnclosingType(md);
return evaluateBody(md.getBody(), localVars, declaredLocals, context, visited); if (td == null) return null;
String methodFqn = context.getFqn(td) + "." + md.getName().getIdentifier();
if (!visited.add(methodFqn)) {
return null; // Cycle detected in method evaluation
}
try {
java.util.Map<String, String> localVars = new java.util.HashMap<>(prebuiltLocals);
java.util.Set<String> declaredLocals = new java.util.HashSet<>(prebuiltLocals.keySet());
return evaluateBody(md.getBody(), localVars, declaredLocals, context, visited);
} finally {
visited.remove(methodFqn);
}
} }
/** /**