in src/objc-renderer.ts [1405:1502]
export function renderImplementation(file: Code.File): string | null {
if (fileHasImplementationCodeToRender(file)) {
const commentsStr = file.comments.map(toCommentString).join('\n');
const commentsSection = codeSectionForCodeString(commentsStr);
const imports = file.imports.filter(isPrivateImport).map(toImportString);
const importStr = arrayWithDuplicatesRemoved(imports).join('\n');
const importsSection = codeSectionForCodeString(importStr);
const diagnosticIgnoresStr = file.diagnosticIgnores
.map(toDiagnosticIgnoreString)
.join('\n');
const diagnosticIgnoresSection =
diagnosticIgnoreSectionFromStr(diagnosticIgnoresStr);
const diagnosticIgnoresEndSection =
diagnosticIgnoreEndSectionFromStr(diagnosticIgnoresStr);
const macros = fileMacros(file);
const prefixMacrosSection: string = codeSectionForCodeString(
macros.map(toPrefixMacroString).join('\n'),
);
const staticConstantsStr = file.staticConstants
.map(toStaticConstantString)
.join('\n');
const staticConstantsSection = codeSectionForCodeString(staticConstantsStr);
const globalVariablesStr = file.globalVariables
.map(toglobalVariablestring)
.join('\n');
const globalVariablesSection = codeSectionForCodeString(globalVariablesStr);
const enumerationsStr = file.enumerations
.filter(enumerationIsPublic(false))
.map(toNSEnumDeclaration)
.join('\n');
const enumerationsSection = codeSectionForCodeString(enumerationsStr);
const blocksStr: string = file.blockTypes
.filter(blockTypeIsPublic(false))
.map(toBlockTypeDeclarationWithMacros)
.join('\n');
const blocksSection: string = codeSectionForCodeString(blocksStr);
const macrosStr = file.macros.map(toMacroImplementationString).join('\n\n');
const macrosSection = codeSectionForCodeString(macrosStr);
const staticFunctionProtoStr = file.functions
.filter((func) => !func.isInline && !func.isPublic)
.map((func) => functionDeclarationForFunction(func) + ';')
.join('\n');
const staticFunctionProtoSection = codeSectionForCodeString(
staticFunctionProtoStr,
);
const functionStr = file.functions
.filter((func) => !(func.isInline && func.isPublic))
.map(toFunctionImplementationString)
.join('\n\n');
const functionsSection = codeSectionForCodeString(functionStr);
const classesSection = file.classes
.map(implementationClassSection)
.join('\n\n');
var cppClassesStr = file.cppClasses.map(toCppClassDefinition).join('\n\n');
if (cppClassesStr.length > 0) {
cppClassesStr += '\n';
}
const postfixMacrosSection: string = codeSectionForCodeString(
macros.map(toPostfixMacroString).join('\n'),
);
const contents: string =
commentsSection +
arcCompileFlagCheckSection() +
importsSection +
diagnosticIgnoresSection +
prefixMacrosSection +
staticConstantsSection +
globalVariablesSection +
enumerationsSection +
blocksSection +
macrosSection +
staticFunctionProtoSection +
classesSection +
'\n' +
cppClassesStr +
functionsSection +
postfixMacrosSection +
diagnosticIgnoresEndSection;
return contents.trim() + '\n';
} else {
return null;
}
}