construct method
Creates a new constant object by applying constructor arguments to this object.
This is used during constant evaluation to create new objects based on existing ones with constructor arguments applied.
@param args The argument list from the constructor call @param evaluator The constant evaluator to evaluate arguments @param name The constructor name (optional) @param argNameToPropName Mapping from visible argument names to actual property/field names @return A new constant object with arguments applied
Implementation
ConstObjectImpl construct(
ArgumentList args,
ConstantEvaluator evaluator, [
String? name,
Map<String, String> argNameToPropName = const {},
]) {
final Map<String, Constant?> props = Map<String, Constant?>.of(this.props);
for (int i = 0; i < args.arguments.length; i++) {
final Argument arg = args.arguments[i];
if (arg is NamedArgument) {
final String argName = arg.name.lexeme;
final String propName = argNameToPropName[argName] ?? argName;
props[propName] = evaluator.evaluate(arg.argumentExpression);
} else {
final String? propName = positionalNames[i];
if (propName != null) {
props[propName] = evaluator.evaluate(arg);
}
}
}
return ConstObjectImpl(
props,
type,
positionalNames: positionalNames,
constructorName: name,
constructorArguments: args.arguments.map((arg) => arg.argumentExpression).toList(),
);
}