renderMcpParamExtraction function
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;";
}