public CSharpAdapter(IAssemblyReferenceCollector referenceCollector, IAssemblyDocumentationResolver documentationResolver) { var referencedAssemblies = referenceCollector.SlowGetAllReferencedAssembliesRecursive( // Essential NetFrameworkRuntime.AssemblyOfValueTask, NetFrameworkRuntime.AssemblyOfValueTuple, NetFrameworkRuntime.AssemblyOfSpan, typeof(Binder).Assembly, // Runtime typeof(JitGenericAttribute).Assembly, // Requested typeof(XDocument).Assembly, // System.Xml.Linq typeof(IDataReader).Assembly, // System.Data typeof(HttpUtility).Assembly // System.Web ).ToImmutableList(); var assemblyReferenceTaskSource = new AssemblyReferenceDiscoveryTaskSource(); assemblyReferenceTaskSource.Complete(referencedAssemblies.Select(a => a.Location).ToImmutableList()); AssemblyReferenceDiscoveryTask = assemblyReferenceTaskSource.Task; _references = referencedAssemblies .Select(a => (MetadataReference)MetadataReference.CreateFromFile(a.Location, documentation: documentationResolver.GetDocumentation(a))) .ToImmutableList(); }
public void SlowSetup(MirrorSharpOptions options) { // ReSharper disable HeapView.ObjectAllocation.Evident // ReSharper disable HeapView.DelegateAllocation options.EnableVisualBasic(o => { // This setup will only run if the language is used, so branches // where no one ever used VB will be faster to open. var maxLanguageVersion = Enum.GetValues(typeof(LanguageVersion)).Cast <LanguageVersion>().Max(); o.ParseOptions = new VisualBasicParseOptions( maxLanguageVersion, documentationMode: DocumentationMode.Diagnose ); var referencedAssemblies = _referenceCollector.SlowGetAllReferencedAssembliesRecursive( // Essential NetFrameworkRuntime.AssemblyOfValueTuple, NetFrameworkRuntime.AssemblyOfValueTask, NetFrameworkRuntime.AssemblyOfSpan, typeof(StandardModuleAttribute).Assembly, // Runtime typeof(JitGenericAttribute).Assembly, // Requested typeof(XDocument).Assembly, // System.Xml.Linq typeof(HttpUtility).Assembly // System.Web ).ToImmutableList(); _assemblyReferenceDiscoveryTaskSource.Complete(referencedAssemblies.Select(a => a.Location).ToImmutableList()); o.MetadataReferences = referencedAssemblies .Select(a => (MetadataReference)MetadataReference.CreateFromFile(a.Location, documentation: _documentationResolver.GetDocumentation(a))) .ToImmutableList(); }); // ReSharper restore HeapView.DelegateAllocation // ReSharper restore HeapView.ObjectAllocation.Evident }
public void SlowSetup(MirrorSharpOptions options) { options.EnableFSharp(o => { var assemblyOfObject = typeof(object).Assembly; var referencedAssemblies = _referenceCollector.SlowGetAllReferencedAssembliesRecursive( // Essential assemblyOfObject, NetFrameworkRuntime.AssemblyOfValueTask, typeof(TaskExtensions).Assembly, typeof(FSharpOption <>).Assembly, // Runtime typeof(JitGenericAttribute).Assembly, // Requested typeof(XDocument).Assembly, // System.Xml.Linq typeof(IDataReader).Assembly, // System.Data typeof(HttpUtility).Assembly // System.Web ); var referencedAssemblyPaths = referencedAssemblies.Select(a => a.Location).ToImmutableArray(); if (assemblyOfObject.GetName().Name != "mscorlib") { var mscorlibPath = Path.Combine(Path.GetDirectoryName(assemblyOfObject.Location) !, "mscorlib.dll"); referencedAssemblyPaths = referencedAssemblyPaths.Add(mscorlibPath); } _referencedAssembliesTaskSource.Complete(referencedAssemblyPaths); o.AssemblyReferencePaths = referencedAssemblyPaths; }); }