getExpString method

String? getExpString(
  1. Iterable<SyntacticEntity> ast,
  2. String exportUri,
  3. bool def
)

Implementation

String? getExpString(
  Iterable<SyntacticEntity> ast,
  String exportUri,
  bool def,
) {
  int ignoreCount = 0;
  int exportCount = 0;
  List<String> ignoreList = <String>[];
  List<String> exportList = <String>[];
  List<String> normalList = <String>[];

  ast.whereType<NamedCompilationUnitMember>().forEach((e) {
    Iterable<String> meta = e.metadata.map((e) => e.toString());
    if (meta.contains('@internal')) {
      ignoreCount++;
      ignoreList.add(e.name.toString());
    } else if (meta.contains('@external')) {
      exportCount++;
      exportList.add(e.name.toString());
    } else {
      normalList.add(e.name.toString());
    }
  });

  ast.whereType<TopLevelVariableDeclaration>().forEach((e) {
    Iterable<String> meta = e.metadata.map((e) => e.toString());
    if (meta.contains('@internal')) {
      ignoreCount++;
      ignoreList.add(e.variables.variables.first.name.toString());
    } else if (meta.contains('@external')) {
      exportCount++;
      exportList.add(e.variables.variables.first.name.toString());
    } else {
      normalList.add(e.variables.variables.first.name.toString());
    }
  });

  if (def) {
    if (ignoreCount == 0) {
      return "export 'package:$exportUri';";
    }

    String toExpLst = [...normalList, ...exportList].join(', ');
    if (toExpLst.isNotEmpty) {
      return "export 'package:$exportUri' show $toExpLst;";
    } else {
      return null;
    }
  } else {
    if (exportCount == 0) {
      return null;
    }

    String toExpLst = exportList.join(',');
    return "export 'package:$exportUri' show $toExpLst;";
  }
}