/// <summary>
/// Executes the translation process.
/// </summary>
/// <param name="context">The compilation context.</param>
public void Execute(CompilationContext context)
{
if (context == null || context.Model == null)
{
return;
}
if (context.OutputStream == null || !context.OutputStream.CanWrite)
{
throw new CompilationException("The translation output stream is null or not writable.");
}
var translationCtx = new TranslationContext();
translationCtx.OutputStream = context.OutputStream;
// write enum declarations
var enumTranslator = new EnumTranslator();
foreach (var item in context.Model.Enums)
{
enumTranslator.Translate(item, translationCtx);
}
// write class declarations
var classTranslator = new ClassTranslator();
foreach (var item in ClassSorter.Sort(context.Model.Classes))
{
classTranslator.Translate(item, translationCtx);
}
// write global statements
if (context.Model.GlobalStatements.Any())
{
translationCtx.WriteLine();
translationCtx.IsWritingGlobalStatements = true;
foreach (var item in context.Model.GlobalStatements)
{
translationCtx.WriteModel(item);
}
translationCtx.IsWritingGlobalStatements = false;
}
}