public void Generate(IMetadataSource source, IMetadataReferenceResolver metadataReferenceResolver, IMetadataWriter writer)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            writer.Write(new IgnoredNamespaceFilter(source, IgnoredNamespaces, metadataReferenceResolver), WriteAssemblyMetadata);
        }
            public static IReadOnlyList <IMetadataNamespace> CalculateNonignoredTransitiveClosure(IMetadataSource source, IEnumerable <string> ignoredNamespaces, IMetadataReferenceResolver metadataReferenceResolver)
            {
                var regexBuilder = (StringBuilder)null;

                foreach (var ignoredNamespace in ignoredNamespaces)
                {
                    if (regexBuilder == null)
                    {
                        regexBuilder = new StringBuilder(@"\A(?:");
                    }
                    else
                    {
                        regexBuilder.Append('|');
                    }

                    regexBuilder.Append(Regex.Escape(ignoredNamespace));
                }

                if (regexBuilder == null)
                {
                    return(source.Namespaces);
                }

                var namespaceIgnoreRegex = new Regex(regexBuilder.Append(@")(\Z|\.)").ToString(), RegexOptions.IgnoreCase);

                var ignoredNamespaceLookup = new Dictionary <string, PartiallyIgnoredNamespaceBuilder>();

                var includedNamespaces = new List <IMetadataNamespace>(source.Namespaces.Count);

                foreach (var ns in source.Namespaces)
                {
                    if (namespaceIgnoreRegex.IsMatch(ns.Name))
                    {
                        ignoredNamespaceLookup.Add(ns.Name, new PartiallyIgnoredNamespaceBuilder(ns));
                    }
                    else
                    {
                        includedNamespaces.Add(ns);
                    }
                }

                if (ignoredNamespaceLookup.Count != 0)
                {
                    var visitor = new ReferencedIgnoredMetadataVisitor(ignoredNamespaceLookup, metadataReferenceResolver);

                    foreach (var ns in includedNamespaces)
                    {
                        var prefix = string.IsNullOrEmpty(ns.Name) ? null : TextNode.Root(ns.Name) + ".";
                        foreach (var type in ns.Types)
                        {
                            visitor.VisitNonignoredType(prefix + type.Name, type);
                        }
                    }

                    foreach (var ns in visitor.ignoredNamespaces.Values)
                    {
                        if (ns.Types.Count != 0)
                        {
                            includedNamespaces.Add(ns);
                        }
                    }
                }

                return(includedNamespaces);
            }
 private ReferencedIgnoredMetadataVisitor(IReadOnlyDictionary <string, PartiallyIgnoredNamespaceBuilder> ignoredNamespaces, IMetadataReferenceResolver metadataReferenceResolver)
 {
     this.ignoredNamespaces         = ignoredNamespaces;
     this.metadataReferenceResolver = metadataReferenceResolver;
 }
 public IgnoredNamespaceFilter(IMetadataSource source, IEnumerable <string> ignoredNamespaces, IMetadataReferenceResolver metadataReferenceResolver)
 {
     this.source                    = source ?? throw new ArgumentNullException(nameof(source));
     this.ignoredNamespaces         = ignoredNamespaces ?? throw new ArgumentNullException(nameof(ignoredNamespaces));
     this.metadataReferenceResolver = metadataReferenceResolver ?? throw new ArgumentNullException(nameof(metadataReferenceResolver));
 }
Пример #5
0
 public TypeReferenceTypeProvider(IMetadataReferenceResolver metadataReferenceResolver)
 {
     this.metadataReferenceResolver = metadataReferenceResolver;
 }
 public MetadataReaderSource(Stream stream, IMetadataReferenceResolver metadataReferenceResolver)
 {
     peReader     = new PEReader(stream);
     reader       = peReader.GetMetadataReader();
     typeProvider = new TypeReferenceTypeProvider(metadataReferenceResolver);
 }