/// <summary> /// </summary> /// <param name="assemblyMetadata"> /// </param> /// <returns> /// </returns> private AssemblySymbol LoadAssemblySymbol(AssemblyMetadata assemblyMetadata, bool noCache = false) { AssemblySymbol symbol; if (!noCache && this.cache.TryGetValue(assemblyMetadata.GetAssembly().Identity, out symbol)) { return(symbol); } var assemblySymbol = new PEAssemblySymbol(assemblyMetadata.GetAssembly(), DocumentationProvider.Default, isLinked: false, importOptions: MetadataImportOptions.All); this.cache[assemblyMetadata.GetAssembly().Identity] = assemblySymbol; this.unifiedAssemblies.Add(new UnifiedAssembly <AssemblySymbol>(assemblySymbol, assemblyMetadata.GetAssembly().Identity)); var moduleReferences = this.LoadReferences(assemblyMetadata); foreach (var module in assemblySymbol.Modules) { module.SetReferences(moduleReferences); } this.SetCorLib(assemblySymbol); return(assemblySymbol); }
/// <summary> /// </summary> /// <param name="assemblyMetadata"> /// </param> /// <returns> /// </returns> private ModuleReferences <AssemblySymbol> LoadReferences(AssemblyMetadata assemblyMetadata) { var peReferences = ImmutableArray.CreateRange(assemblyMetadata.GetAssembly().AssemblyReferences.Select(this.LoadAssemblySymbolOrMissingAssemblySymbol)); var moduleReferences = new ModuleReferences <AssemblySymbol>( assemblyMetadata.GetAssembly().AssemblyReferences, peReferences, ImmutableArray.CreateRange(this.unifiedAssemblies)); return(moduleReferences); }
public void ContainsNoPiaLocalTypes() { using ( AssemblyMetadata piaMetadata = AssemblyMetadata.CreateFromImage( TestResources.SymbolsTests.NoPia.Pia1 ), metadata1 = AssemblyMetadata.CreateFromImage( TestResources.SymbolsTests.NoPia.LocalTypes1 ), metadata2 = AssemblyMetadata.CreateFromImage( TestResources.SymbolsTests.NoPia.LocalTypes2 ) ) { var pia1 = piaMetadata.GetAssembly().Modules[0]; var localTypes1 = metadata1.GetAssembly().Modules[0]; var localTypes2 = metadata2.GetAssembly().Modules[0]; Assert.False(pia1.ContainsNoPiaLocalTypes()); Assert.False(pia1.ContainsNoPiaLocalTypes()); Assert.True(localTypes1.ContainsNoPiaLocalTypes()); Assert.True(localTypes1.ContainsNoPiaLocalTypes()); Assert.True(localTypes2.ContainsNoPiaLocalTypes()); Assert.True(localTypes2.ContainsNoPiaLocalTypes()); } }
private void RemoveUnusedAssemblies(AssemblyMetadata assemblyMetadata) { var referencesInCompiledAssemblies = assemblyMetadata.GetAssembly().AssemblyReferences.Union(this.EnumerateAllReferencesInAssembly(assemblyMetadata.GetAssembly().AssemblyReferences)); var usedAssemblies = this.Assemblies.Where(a => referencesInCompiledAssemblies.Contains(a)).ToArray(); this.Assemblies = new HashSet <AssemblyIdentity>(usedAssemblies); }