construct method

ConstObjectImpl construct(
  1. ArgumentList args,
  2. ConstantEvaluator evaluator, [
  3. String? name,
  4. Map<String, String> argNameToPropName = const {},
])

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(),
  );
}