Beispiel #1
0
        private static ICciDifferenceWriter GetDifferenceWriter(TextWriter writer, IDifferenceFilter filter)
        {
            CompositionHost container = GetCompositionHost();

            Func <IDifferenceRuleMetadata, bool> ruleFilter =
                delegate(IDifferenceRuleMetadata ruleMetadata)
            {
                if (ruleMetadata.OptionalRule && !s_enforceOptionalRules)
                {
                    return(false);
                }

                if (ruleMetadata.MdilServicingRule && !s_mdil)
                {
                    return(false);
                }
                return(true);
            };

            if (s_mdil && s_excludeNonBrowsable)
            {
                Trace.TraceWarning("Enforcing MDIL servicing rules and exclusion of non-browsable types are both enabled, but they are not compatible so non-browsable types will not be excluded.");
            }

            MappingSettings settings = new MappingSettings();

            settings.Comparers             = GetComparers();
            settings.Filter                = GetCciFilter(s_mdil, s_excludeNonBrowsable);
            settings.DiffFilter            = GetDiffFilter(settings.Filter);
            settings.DiffFactory           = new ElementDifferenceFactory(container, ruleFilter);
            settings.GroupByAssembly       = s_groupByAssembly;
            settings.IncludeForwardedTypes = true;

            if (filter == null)
            {
                filter = new DifferenceFilter <IncompatibleDifference>();
            }

            ICciDifferenceWriter diffWriter = new DifferenceWriter(writer, settings, filter);

            ExportCciSettings.StaticSettings = settings.TypeComparer;
            ExportCciSettings.StaticOperands = new DifferenceOperands()
            {
                Contract       = s_contractOperand,
                Implementation = s_implementationOperand,
            };
            ExportCciSettings.StaticAttributeFilter = new AttributeFilter(s_excludeAttributesList);

            // Always compose the diff writer to allow it to import or provide exports
            container.SatisfyImports(diffWriter);

            return(diffWriter);
        }
Beispiel #2
0
        private static ICciDifferenceWriter GetDifferenceWriter(TextWriter writer,
                                                                IDifferenceFilter filter,
                                                                bool enforceOptionalRules,
                                                                bool mdil,
                                                                bool excludeNonBrowsable,
                                                                string remapFile,
                                                                bool groupByAssembly,
                                                                string leftOperand,
                                                                string rightOperand,
                                                                string excludeAttributes,
                                                                bool allowDefaultInterfaceMethods)
        {
            CompositionHost container = GetCompositionHost();

            bool RuleFilter(IDifferenceRuleMetadata ruleMetadata)
            {
                if (ruleMetadata.OptionalRule && !enforceOptionalRules)
                {
                    return(false);
                }

                if (ruleMetadata.MdilServicingRule && !mdil)
                {
                    return(false);
                }
                return(true);
            }

            if (mdil && excludeNonBrowsable)
            {
                Trace.TraceWarning("Enforcing MDIL servicing rules and exclusion of non-browsable types are both enabled, but they are not compatible so non-browsable types will not be excluded.");
            }

            var settings = new MappingSettings
            {
                Comparers = GetComparers(remapFile),
                Filter    = GetCciFilter(mdil, excludeNonBrowsable)
            };

            settings.DiffFilter            = GetDiffFilter(settings.Filter);
            settings.DiffFactory           = new ElementDifferenceFactory(container, RuleFilter);
            settings.GroupByAssembly       = groupByAssembly;
            settings.IncludeForwardedTypes = true;

            if (filter == null)
            {
                filter = new DifferenceFilter <IncompatibleDifference>();
            }

            var diffWriter = new DifferenceWriter(writer, settings, filter);

            ExportCciSettings.StaticSettings = settings.TypeComparer;
            ExportCciSettings.StaticOperands = new DifferenceOperands()
            {
                Contract       = leftOperand,
                Implementation = rightOperand
            };
            ExportCciSettings.StaticAttributeFilter = new AttributeFilter(excludeAttributes);
            ExportCciSettings.StaticRuleSettings    = new RuleSettings {
                AllowDefaultInterfaceMethods = allowDefaultInterfaceMethods
            };

            // Always compose the diff writer to allow it to import or provide exports
            container.SatisfyImports(diffWriter);

            return(diffWriter);
        }