public MetadataLoader?CreateLoader(TypeLibraryDefinition tlElement, string filename, byte[] bytes) { Type?loaderType = null; if (string.IsNullOrEmpty(tlElement.Loader)) { // By default, assume TypeLibraryLoader is intended. loaderType = typeof(TypeLibraryLoader); } else { var cfgSvc = services.RequireService <IConfigurationService>(); var listener = services.RequireService <DecompilerEventListener>(); var ldrElement = cfgSvc.GetImageLoader(tlElement.Loader !); if (ldrElement != null && !string.IsNullOrEmpty(ldrElement.TypeName)) { var svc = services.RequireService <IPluginLoaderService>(); loaderType = svc.GetType(ldrElement.TypeName); } if (loaderType == null) { listener.Warn( "Metadata loader type '{0}' is unknown.", tlElement.Loader !); return(null); } } return((MetadataLoader)Activator.CreateInstance(loaderType, services, filename, bytes)); }
public TypeLibrary LoadMetadataIntoLibrary(IPlatform platform, TypeLibraryDefinition tlElement, TypeLibrary libDst) { var cfgSvc = services.RequireService <IConfigurationService>(); var fsSvc = services.RequireService <IFileSystemService>(); var listener = services.RequireService <DecompilerEventListener>(); try { if (tlElement.Name == null) { return(libDst); } string libFileName = cfgSvc.GetInstallationRelativePath(tlElement.Name); if (!fsSvc.FileExists(libFileName)) { return(libDst); } byte[] bytes = fsSvc.ReadAllBytes(libFileName); MetadataLoader?loader = CreateLoader(tlElement, libFileName, bytes); if (loader == null) { return(libDst); } var lib = loader.Load(platform, tlElement.Module, libDst); return(lib); } catch (Exception ex) { listener.Error(ex, string.Format("Unable to load metadata file {0}.", tlElement.Name)); return(libDst); } }
public MetadataLoader CreateLoader(TypeLibraryDefinition tlElement, string filename, byte[] bytes) { Type loaderType = null; if (string.IsNullOrEmpty(tlElement.Loader)) { // By default, assume TypeLibraryLoader is intended. loaderType = typeof(TypeLibraryLoader); } else { var cfgSvc = services.RequireService <IConfigurationService>(); var diagSvc = services.RequireService <IDiagnosticsService>(); var ldrElement = cfgSvc.GetImageLoader(tlElement.Loader); if (ldrElement != null && !string.IsNullOrEmpty(ldrElement.TypeName)) { loaderType = Type.GetType(ldrElement.TypeName, false); } if (loaderType == null) { diagSvc.Warn( "Metadata loader type '{0}' is unknown.", tlElement.Loader); return(null); } } return((MetadataLoader)Activator.CreateInstance(loaderType, services, filename, bytes)); }
private void Expect_TypeLibraryLoaderService_LoadLibrary(TypeLibraryDefinition expected, TypeLibrary dstLib) { environmentMetadata = dstLib; tlSvc.Setup(t => t.LoadMetadataIntoLibrary( It.IsNotNull <IPlatform>(), It.Is <TypeLibraryDefinition>(a => a.Name == expected.Name), It.IsNotNull <TypeLibrary>())) .Returns(dstLib) .Verifiable(); }