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); }
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 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; return ret; }