return null;
// Get the return type
VariableType resultType = factory.fromSootType(target.getReturnType());
MethodResolution resolution = getResolution(expr, target);
// give up if no resolver could resolve the method
if (resolution == null)
return null;
// make return value
Variable result;
if (resolution.getReturnedAutomaton() != null) {
Automaton auto = resolution.getReturnedAutomaton();
Variable temp = factory.createVariable(VariableType.STRING);
factory.addStatement(new StringInit(temp, auto));
switch (resultType) {
case ARRAY:
result = factory.createVariable(resultType);
factory.addStatement(new ArrayNew(result));
factory.addStatement(new ArrayWriteElement(result, temp));
break;
case STRINGBUFFER:
result = factory.createVariable(resultType);
factory.addStatement(new StringBufferInit(result, temp));
break;
case STRING:
case OBJECT:
case PRIMITIVE:
result = temp;
break;
default:
result = factory.getNothing();
}
} else if (resolution.getReturnedArgument() != -1) {
result = arguments.get(resolution.getReturnedArgument());
} else {
result = factory.createVariable(resultType);
factory.addStatement(new ObjectCorrupt(result));
}
// handle corrupted arguments
if (resolution.getCorruptedArguments().size() != arguments.size()) {
throw new InvalidResolutionException("Incorrect number of arguments in method resolution");
}
for (int i=0; i<arguments.size(); i++) {
if (arguments.get(i).isMutable() && resolution.isArgumentCorrupted(i)) {
factory.addStatement(new ObjectCorrupt(arguments.get(i)));
}
}
return result;