writeMainHeader method

void writeMainHeader(
  1. IndentingWriter out, [
  2. OutputConfiguration config = const DefaultOutputConfiguration()
])

Writes the header and imports for the .pb.dart file.

Implementation

void writeMainHeader(IndentingWriter out,
    [OutputConfiguration config = const DefaultOutputConfiguration()]) {
  _writeHeading(out);

  // We only add the dart:async import if there are generic client API
  // generators for services in the FileDescriptorProto.
  if (clientApiGenerators.isNotEmpty) {
    out.println(_asyncImport);
  }

  out.println(_coreImport);
  out.println();

  if (_needsFixnumImport) {
    out.println(
        "import 'package:fixnum/fixnum.dart' as $_fixnumImportPrefix;");
  }

  if (_needsProtobufImport) {
    out.println(_protobufImport);
    out.println();
  }

  final mixinImports = findMixinImports();
  for (var libraryUri in mixinImports) {
    out.println("import '$libraryUri' as $mixinImportPrefix;");
  }
  if (mixinImports.isNotEmpty) out.println();

  // Import the .pb.dart files we depend on.
  var imports = Set<FileGenerator>.identity();
  var enumImports = Set<FileGenerator>.identity();
  _findProtosToImport(imports, enumImports);

  for (var target in imports) {
    _writeImport(out, config, target, '.pb.dart');
  }
  if (imports.isNotEmpty) out.println();

  for (var target in enumImports) {
    _writeImport(out, config, target, '.pbenum.dart');
  }
  if (enumImports.isNotEmpty) out.println();

  for (var publicDependency in descriptor.publicDependency) {
    _writeExport(out, config,
        Uri.file(descriptor.dependency[publicDependency]), '.pb.dart');
  }

  // Export enums in main file for backward compatibility.
  if (enumCount > 0) {
    var resolvedImport =
        config.resolveImport(protoFileUri, protoFileUri, '.pbenum.dart');
    out.println("export '$resolvedImport';");
    out.println();
  }
}