protected void AddCodeFile(string fileName, string code)
        {
            var oldFile = projectContent.GetFile(fileName);

            Assert.IsNull(oldFile, "Duplicate file name: " + fileName);
            var newFile = Parse(fileName, code);

            projectContent = projectContent.AddOrUpdateFiles(newFile);
            assemblyModel.Update(oldFile, newFile);
        }
        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);
        }
        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);
        }
 public void ParseInformationUpdated(IUnresolvedFile oldFile, IUnresolvedFile newFile)
 {
     // This method is called by the parser service within the parser service (per-file) lock.
     lock (lockObj) {
         if (!disposed)
         {
             if (newFile != null)
             {
                 projectContent = projectContent.AddOrUpdateFiles(newFile);
             }
             else
             {
                 projectContent = projectContent.RemoveFiles(oldFile.FileName);
             }
             serializedProjectContentIsUpToDate = false;
             SD.ParserService.InvalidateCurrentSolutionSnapshot();
             SD.MainThread.InvokeAsyncAndForget(delegate { assemblyModel.Update(oldFile, newFile); });
         }
     }
 }