generateLPIStatic static method

void generateLPIStatic(
  1. AFCommandContext context,
  2. String identifier,
  3. AFCommandArgumentsParsed args, {
  4. String? fullId,
  5. AFLibraryID? fromLib,
  6. String parentType = "AFLibraryProgrammingInterface",
})

Implementation

static void generateLPIStatic(AFCommandContext context, String identifier, AFCommandArgumentsParsed args, {
  String? fullId,
  AFLibraryID? fromLib,
  String parentType = "AFLibraryProgrammingInterface"
}) {
  final generator = context.generator;

  if(!identifier.startsWith(generator.appNamespaceUpper)) {
    throw AFCommandError(error: "$identifier must start with ${generator.appNamespaceUpper}");
  }

  // create the LPI file
  final isOverride = fullId != null;
  final lpiPath = generator.pathLPI(identifier, isOverride: isOverride);
  final lpiFile = context.createFile(lpiPath, LPIT.core(), insertions: {
    AFSourceTemplate.insertMainTypeInsertion: identifier,
    AFSourceTemplate.insertMainParentTypeInsertion: parentType
  });

  if(fromLib != null) {
    lpiFile.importFlutterFile(context, fromLib);
  }

  final idIdentifier = generator.removeSuffixAndCamel(generator.removePrefix(identifier, generator.appNamespaceUpper), "LPI");

  // create an ID for the LPI
  if(!isOverride) {
    final declareId = context.createSnippet(SnippetDeclareLPIIDT(), insertions: {
      SnippetCallDefineLPIT.insertLPIID: idIdentifier,
    });
    final idFile = generator.modifyFile(context,  generator.pathIdFile);
    const kind = "LibraryProgrammingInterface";
    final after = AFCodeRegExp.startUIID(kind, kind);
    idFile.addLinesAfter(context, after, declareId.lines);
  }

  // register the LPI
  final definesFile = generator.modifyFile(context, generator.pathDefineCore);
  final defineLPI = context.createSnippet(SnippetCallDefineLPIT(), insertions: {
    SnippetCallDefineLPIT.insertLPIID: fullId ?? "${generator.appNamespaceUpper}LibraryProgrammingInterfaceID.$idIdentifier",
    SnippetCallDefineLPIT.insertLPIType: identifier,
  });
  definesFile.addLinesAfter(context, AFCodeRegExp.startDefineLPI, defineLPI.lines);
  definesFile.importFile(context, lpiFile);

  if(isOverride && fromLib != null) {
    definesFile.importIDFile(context, fromLib);
  }

  if(!isOverride) {
    generator.addExportsForFiles(context, args, [lpiFile]);
  }
}