renderMcpParamExtraction function

String renderMcpParamExtraction(
  1. Map<String, dynamic> p,
  2. String dartType
)

Renders a single MCP parameter extraction line for either transport.

Honors the original Dart-type nullability captured by the builder (isNullable) and any default-value source code (defaultValueCode) so optional non-nullable parameters with defaults compile under AOT.

Implementation

String renderMcpParamExtraction(Map<String, dynamic> p, String dartType) {
  final paramName = p['name'] as String;
  final isOptional = p['isOptional'] == true;
  final defaultCode = p['defaultValueCode'] as String?;
  final externalName =
      (p['parameterMetadata']?['alias'] as String?) ?? paramName;

  if (!isOptional) {
    return "    final $paramName = request.arguments!['$externalName'] as $dartType;";
  }

  // dynamic is inherently nullable — no ? suffix needed
  final nullableCast = (dartType.endsWith('?') || dartType == 'dynamic')
      ? dartType
      : '$dartType?';

  if (defaultCode != null) {
    return "    final $paramName = (request.arguments?['$externalName'] as $nullableCast) ?? $defaultCode;";
  }

  return "    final $paramName = request.arguments?['$externalName'] as $nullableCast;";
}