MoreInternals.Context.Merge C# (CSharp) Method

Merge() public method

public Merge ( Context other ) : Context
other Context
return Context
        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;
        }

Usage Example

示例#1
0
        public void MergeContexts()
        {
            var a = new Context(new FileCache());
            var b = new Context(new FileCache());

            a.Errors[ErrorType.Compiler] = new List<Error>() { Error.Create(ErrorType.Compiler, -1, -1, "test error", "dummy file 1") };
            a.Errors[ErrorType.Parser] = new List<Error>() { Error.Create(ErrorType.Parser, -1, -1, "test error", "dummy file 1") };
            a.Warnings[ErrorType.Parser] = new List<Error>() { Error.Create(ErrorType.Parser, -1, -1, "test error", "dummy file 1"), Error.Create(ErrorType.Compiler, -1, -1, "test error", "dummy file 3") };
            a.Warnings[ErrorType.Compiler] = new List<Error>() { Error.Create(ErrorType.Compiler, -1, -1, "test error", "dummy file 1") };

            b.Errors[ErrorType.Compiler] = new List<Error>() { Error.Create(ErrorType.Compiler, -1, -1, "test error", "dummy file 2") };
            b.Errors[ErrorType.Parser] = new List<Error>() { Error.Create(ErrorType.Parser, -1, -1, "test error", "dummy file 2") };
            b.Warnings[ErrorType.Parser] = new List<Error>() { Error.Create(ErrorType.Parser, -1, -1, "test error", "dummy file 2"), Error.Create(ErrorType.Compiler, -1, -1, "test error", "dummy file 3") };
            b.Warnings[ErrorType.Compiler] = new List<Error>() { Error.Create(ErrorType.Compiler, -1, -1, "test error", "dummy file 2") };

            var c = a.Merge(b);

            Assert.AreEqual(2, c.Errors.Count);
            Assert.AreEqual(2, c.Warnings.Count);

            Assert.AreEqual(2, c.GetErrors()[ErrorType.Compiler].Count());
            Assert.AreEqual(2, c.GetErrors()[ErrorType.Parser].Count());
            Assert.AreEqual(2, c.GetWarnings()[ErrorType.Parser].Count());
            Assert.AreEqual(4, c.GetWarnings()[ErrorType.Compiler].Count());
        }