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); }); } } }