Inheritance: CompNamed, ICompAttributeContainer
Exemplo n.º 1
0
        void CompareTypeParameters(ComparisonNode parent, ICompGenericParameter reference, ICompGenericParameter target)
        {
            var r = reference.GetTypeParameters();
            var t = target.GetTypeParameters();

            if (r == null && t == null)
            {
                return;
            }

            if (r.Count != t.Count)
            {
                throw new NotImplementedException(string.Format("Should never happen with valid data ({0} != {1})", r.Count, t.Count));
            }

            for (int i = 0; i < r.Count; ++i)
            {
                var r_i = r [i];
                var t_i = t [i];

                if (r_i.GenericAttributes != t_i.GenericAttributes)
                {
                    HandleError(parent, string.Format("reference type parameter {2} has {0} generic attributes, target type parameter {3} has {1} generic attributes",
                                                      CompGenericParameter.GetGenericAttributeDesc(r_i.GenericAttributes),
                                                      CompGenericParameter.GetGenericAttributeDesc(t_i.GenericAttributes),
                                                      r_i.Name,
                                                      t_i.Name));
                }

                CompareAttributes(parent, r_i, t_i);

                // TODO: Compare contraints
            }
        }
        void CompareTypeParameters(ComparisonNode parent, ICompGenericParameter reference, ICompGenericParameter target)
        {
            var r = reference.GetTypeParameters();
            var t = target.GetTypeParameters();

            if (r == null && t == null || (r == null && t != null) || (r != null && t == null))
            {
                return;
            }

            for (int i = 0; i < r.Count; ++i)
            {
                var r_i = r [i];
                var t_i = t [i];

                if (r_i.GenericAttributes != t_i.GenericAttributes)
                {
                    parent.AddError(string.Format("Expected type parameter {2} with {0} generic attributes but found type parameter {3} with {1} generic attributes",
                                                  CompGenericParameter.GetGenericAttributeDesc(r_i.GenericAttributes),
                                                  CompGenericParameter.GetGenericAttributeDesc(t_i.GenericAttributes),
                                                  r_i.Name,
                                                  t_i.Name));
                }

                // TODO: Compare constraints properly
                if (r_i.HasConstraints != t_i.HasConstraints)
                {
                    parent.AddError(string.Format("Type parameter `{0}' constraints mismatch", r_i.Name));
                }

                CompareAttributes(parent, r_i, t_i);
            }
        }