test
This commit is contained in:
@@ -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++) {
|
if (!visited.add(methodFqn)) {
|
||||||
Expression arg = (Expression) mi.arguments().get(i);
|
return null; // Cycle detected in method evaluation
|
||||||
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);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user