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);
        }
Пример #6
0
        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);
            }
        }