metaInvocation function

String metaInvocation(
  1. DartObject annotation
)

Implementation

String metaInvocation(DartObject annotation) {
  final name = annotation.type!.getDisplayString();
  final revived = ConstantReader(annotation).revive();

  final accessor = revived.accessor.isEmpty ? '' : '.${revived.accessor}';
  final posArgs = revived.positionalArguments.map(_dartLiteral).join(', ');
  final namedArgs = revived.namedArguments.entries
      .map((e) => '${e.key}: ${_dartLiteral(e.value)}')
      .join(', ');

  final args = [
    if (posArgs.isNotEmpty) posArgs,
    if (namedArgs.isNotEmpty) namedArgs,
  ].join(', ');

  return 'const $name$accessor($args)';
}