public Context Merge(Context other)
{
if (this.Options != other.Options ||
this.WriterMode != other.WriterMode)
{
throw new InvalidOperationException();
}
var errors = this.Errors.ToDictionary(d => d.Key, d => d.Value.ToList());
foreach (var k in other.Errors.Keys)
{
if (errors.ContainsKey(k))
{
errors[k].AddRange(other.Errors[k]);
}
else
{
errors[k] = other.Errors[k].ToList();
}
}
var warnings = this.Warnings.ToDictionary(d => d.Key, d => d.Value.ToList());
foreach (var k in other.Warnings.Keys)
{
if (warnings.ContainsKey(k))
{
warnings[k].AddRange(other.Warnings[k]);
}
else
{
warnings[k] = other.Warnings[k].ToList();
}
}
var infos = this.GetInfoMessages().ToList();
infos.AddRange(other.GetInfoMessages());
// Dupes should be removed here, thus Union()
var sprites = this.GetSpriteFiles().Union(other.GetSpriteFiles()).ToList();
var dependencies = this.Dependecies.Merge(other.Dependecies);
var ret = new Context(this.FileCache);
ret.Errors = errors;
ret.Warnings = warnings;
ret.InfoMessages = infos;
ret.SpriteFiles = sprites;
ret.Options = this.Options;
ret.WriterMode = this.WriterMode;
ret.Dependecies = dependencies;
return(ret);
}