in lib/extract_messages.dart [359:400]
MainMessage _messageFromNode(
MethodInvocation node,
MainMessage extract(MainMessage message, List<AstNode> arguments),
void setAttribute(
MainMessage message, String fieldName, Object fieldValue)) {
var message = new MainMessage();
message.sourcePosition = node.offset;
message.endPosition = node.end;
message.arguments =
parameters.parameters.map((x) => x.identifier.name).toList();
var arguments = node.argumentList.arguments;
var extractionResult = extract(message, arguments);
if (extractionResult == null) return null;
for (var namedArgument in arguments.whereType<NamedExpression>()) {
var name = namedArgument.name.label.name;
var exp = namedArgument.expression;
var evaluator = new ConstantEvaluator();
var basicValue = exp.accept(evaluator);
var value = basicValue == ConstantEvaluator.NOT_A_CONSTANT
? exp.toString()
: basicValue;
setAttribute(message, name, value);
}
// We only rewrite messages with parameters, otherwise we use the literal
// string as the name and no arguments are necessary.
if (!message.hasName) {
if (generateNameAndArgs && message.arguments.isNotEmpty) {
// Always try for class_method if this is a class method and
// generating names/args.
message.name = Message.classPlusMethodName(node, name) ?? name;
} else if (arguments.first is SimpleStringLiteral ||
arguments.first is AdjacentStrings) {
// If there's no name, and the message text is a simple string, compute
// a name based on that plus meaning, if present.
var simpleName = (arguments.first as StringLiteral).stringValue;
message.name =
computeMessageName(message.name, simpleName, message.meaning);
}
}
return message;
}