emit method

  1. @override
void emit(
  1. StringBuffer buffer, {
  2. required InspectionCache cache,
  3. required AppType appType,
  4. String moduleParentPrefix = "",
})
override

Emits a Dart source for this entry during interface generation.

Implementation

@override
void emit(
  StringBuffer buffer, {
  required InspectionCache cache,
  required AppType appType,
  String moduleParentPrefix = "",
}) {
  buffer.writeln("/// ## $name");
  emitDoc(buffer);
  emitSource(buffer);
  final String qualifiedName = this.qualifiedName;
  final String fullyQualifiedImportName =
      qualifiedName.startsWith(moduleParentPrefix)
          ? qualifiedName
          : "$moduleParentPrefix$qualifiedName";
  final String pythonFfiInstanceName = switch (appType) {
    AppType.console => "PythonFfiDart.instance",
    AppType.flutter => "PythonFfi.instance",
  };
  buffer.writeln("""
final class $sanitizedName extends PythonModule {
$sanitizedName.from(super.pythonModule) : super.from();

static $sanitizedName import() => $pythonFfiInstanceName
    .importModule("$fullyQualifiedImportName", $sanitizedName.from,);
""");
  final Set<String> memberNames = <String>{name};
  _emitFunctionFields(
    buffer,
    memberNames: memberNames,
    cache: cache,
    appType: appType,
    filter: _isMyChild,
  );
  for (final InstantiatedModule child
      in _children.whereType<InstantiatedModule>().where(_isMyChild)) {
    final String moduleName = child.sanitizedName;
    final String fieldName = "\$${child.sanitizedName}";
    if (memberNames.contains(fieldName)) {
      continue;
    }
    memberNames.add(fieldName);
    buffer.writeln("/// ## $moduleName");
    child.emitDoc(buffer);
    buffer.writeln("$moduleName get $fieldName => $moduleName.import();");
  }
  _emitGettersSetters(
    buffer,
    memberNames: memberNames,
    cache: cache,
    filter: _isMyChild,
  );
  buffer.writeln("}");
}