public IAssemblyModel GetAssemblyModel(FileName fileName, bool includeInternalMembers = false) { LoadedAssembly assembly = GetLoadedAssembly(fileName, includeInternalMembers); if (assembly.Model == null) { // Get references DefaultAssemblySearcher assemblySearcher = new DefaultAssemblySearcher(fileName); var referencedAssemblies = new List <IUnresolvedAssembly>(); foreach (var referencedAssemblyName in assembly.References) { var assemblyFileName = assemblySearcher.FindAssembly(referencedAssemblyName); if (assemblyFileName != null) { var loadedRefAssembly = GetLoadedAssembly(assemblyFileName, includeInternalMembers); if (loadedRefAssembly != null) { referencedAssemblies.Add(loadedRefAssembly.ProjectContent); } } } IEntityModelContext context = new AssemblyEntityModelContext(assembly.ProjectContent, referencedAssemblies.ToArray()); IUpdateableAssemblyModel model = SD.GetService <IModelFactory>().CreateAssemblyModel(context); model.Update(EmptyList <IUnresolvedTypeDefinition> .Instance, assembly.ProjectContent.TopLevelTypeDefinitions.ToList()); model.AssemblyName = assembly.ProjectContent.AssemblyName; model.FullAssemblyName = assembly.ProjectContent.FullAssemblyName; model.UpdateReferences(assembly.References); assembly.Model = model; } return(assembly.Model); }
public ProjectContentContainer(MSBuildBasedProject project, IProjectContent initialProjectContent) { if (project == null) throw new ArgumentNullException("project"); this.project = project; this.projectContent = initialProjectContent.SetAssemblyName(project.AssemblyName).SetLocation(project.OutputAssemblyFullPath); this.assemblyModel = (IUpdateableAssemblyModel)project.AssemblyModel; this.assemblyModel.AssemblyName = this.projectContent.AssemblyName; this.assemblyModel.FullAssemblyName = this.projectContent.FullAssemblyName; this.cacheFileName = GetCacheFileName(project.FileName); SD.ProjectService.ProjectItemAdded += OnProjectItemAdded; SD.ProjectService.ProjectItemRemoved += OnProjectItemRemoved; SD.AssemblyParserService.AssemblyRefreshed += OnAssemblyRefreshed; List<FileName> filesToParse = new List<FileName>(); foreach (var file in project.Items.OfType<FileProjectItem>()) { if (IsParseableFile(file)) { var fileName = file.FileName; parserService.AddOwnerProject(fileName, project, startAsyncParse: false, isLinkedFile: file.IsLink); filesToParse.Add(fileName); } } SD.ParserService.LoadSolutionProjectsThread.AddJob( monitor => Initialize(monitor, filesToParse), "Loading " + project.Name + "...", filesToParse.Count + LoadingReferencesWorkAmount); }
public ProjectContentContainer(MSBuildBasedProject project, IProjectContent initialProjectContent) { if (project == null) { throw new ArgumentNullException("project"); } this.project = project; this.projectContent = initialProjectContent.SetAssemblyName(project.AssemblyName).SetLocation(project.OutputAssemblyFullPath).AddAssemblyReferences(references); this.assemblyModel = (IUpdateableAssemblyModel)project.AssemblyModel; this.assemblyModel.AssemblyName = this.projectContent.AssemblyName; this.assemblyModel.FullAssemblyName = this.projectContent.FullAssemblyName; this.cacheFileName = GetCacheFileName(project.FileName); SD.ProjectService.ProjectItemAdded += OnProjectItemAdded; SD.ProjectService.ProjectItemRemoved += OnProjectItemRemoved; SD.AssemblyParserService.AssemblyRefreshed += OnAssemblyRefreshed; List <FileName> filesToParse = new List <FileName>(); foreach (var file in project.Items.OfType <FileProjectItem>()) { if (IsParseableFile(file)) { var fileName = file.FileName; parserService.AddOwnerProject(fileName, project, startAsyncParse: false, isLinkedFile: file.IsLink); filesToParse.Add(fileName); } } SD.ParserService.LoadSolutionProjectsThread.AddJob( monitor => Initialize(monitor, filesToParse), "Loading " + project.Name + "...", filesToParse.Count + LoadingReferencesWorkAmount); }
public virtual void SetUp() { SD.InitializeForUnitTests(); SD.Services.AddStrictMockService <IParserService>(); project = MockRepository.GenerateStrictMock <IProject>(); projectContent = new CSharpProjectContent().AddAssemblyReferences(AssemblyLoader.Corlib); context = new ProjectEntityModelContext(project, ".cs"); assemblyModel = new AssemblyModel(context); SD.ParserService.Stub(p => p.GetCompilation(project)).WhenCalled(c => c.ReturnValue = projectContent.CreateCompilation()); }
static IAssemblyModel CreateAssemblyModel(Module module) { IEntityModelContext context = new DebuggerProcessEntityModelContext(module.Process, module); IUpdateableAssemblyModel model = SD.GetRequiredService <IModelFactory>().CreateAssemblyModel(context); var types = module.Assembly.TopLevelTypeDefinitions.SelectMany(td => td.Parts).ToList(); model.AssemblyName = module.UnresolvedAssembly.AssemblyName; model.FullAssemblyName = module.UnresolvedAssembly.FullAssemblyName; model.Update(EmptyList <IUnresolvedTypeDefinition> .Instance, types); model.UpdateReferences(module.GetReferences().Select(r => new DomAssemblyName(r)).ToArray()); return(model); }
static IAssemblyModel SafelyCreateAssemblyModelFromFile(string fileName) { var modelFactory = SD.GetRequiredService <IModelFactory>(); try { return(SD.AssemblyParserService.GetAssemblyModel(new FileName(fileName), true)); } catch (Exception) { // Special AssemblyModel for unresolved file references string fakedAssemblyName = Path.GetFileName(fileName); IEntityModelContext unresolvedContext = new UnresolvedAssemblyEntityModelContext(fakedAssemblyName, fakedAssemblyName, fileName); IUpdateableAssemblyModel unresolvedModel = modelFactory.CreateAssemblyModel(unresolvedContext); unresolvedModel.AssemblyName = unresolvedContext.AssemblyName; unresolvedModel.FullAssemblyName = unresolvedContext.FullAssemblyName; return(unresolvedModel); } }