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)); }
public TypeReferenceTypeProvider(IMetadataReferenceResolver metadataReferenceResolver) { this.metadataReferenceResolver = metadataReferenceResolver; }
public MetadataReaderSource(Stream stream, IMetadataReferenceResolver metadataReferenceResolver) { peReader = new PEReader(stream); reader = peReader.GetMetadataReader(); typeProvider = new TypeReferenceTypeProvider(metadataReferenceResolver); }