From 6bd1258a25e000e18c4782022d82dbeb2b7334f2 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 21 Aug 2013 10:50:18 +0200 Subject: [PATCH] use specific DebuggerProcessEntityModelContext with all modules as references, to make resolving work properly --- .../Pads/ClassBrowserSupport.cs | 42 ++++++++++++++++++- .../Parser/AssemblyParserService.cs | 1 + 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs b/src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs index 32b3cf495c..a757815cfe 100644 --- a/src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs +++ b/src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs @@ -7,6 +7,7 @@ using Debugger; using ICSharpCode.Core.Presentation; using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom.ClassBrowser; using System.Linq; @@ -197,7 +198,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads static IAssemblyModel CreateAssemblyModel(Module module) { // references?? - IEntityModelContext context = new AssemblyEntityModelContext(module.Assembly.UnresolvedAssembly); + IEntityModelContext context = new DebuggerProcessEntityModelContext(module.Process); IUpdateableAssemblyModel model = SD.GetRequiredService().CreateAssemblyModel(context); var types = module.Assembly.TopLevelTypeDefinitions.SelectMany(td => td.Parts).ToList(); model.AssemblyName = module.UnresolvedAssembly.AssemblyName; @@ -238,6 +239,45 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads } } + class DebuggerProcessEntityModelContext : IEntityModelContext + { + Debugger.Process process; + + public DebuggerProcessEntityModelContext(Process process) + { + if (process == null) + throw new ArgumentNullException("process"); + this.process = process; + } + + public ICompilation GetCompilation() + { + var mainModule = process.GetModule(Path.GetFileName(process.Filename)); + return new SimpleCompilation(mainModule.UnresolvedAssembly, process.Modules.Where(m => m != mainModule).Select(m => m.UnresolvedAssembly)); + } + + public bool IsBetterPart(IUnresolvedTypeDefinition part1, IUnresolvedTypeDefinition part2) + { + return false; + } + + public ICSharpCode.SharpDevelop.Project.IProject Project { + get { return null; } + } + + public string AssemblyName { + get { return Path.GetFileNameWithoutExtension(process.Filename); } + } + + public string Location { + get { return process.Filename; } + } + + public bool IsValid { + get { return true; } + } + } + /// /// AddModuleToWorkspaceCommand. /// diff --git a/src/Main/SharpDevelop/Parser/AssemblyParserService.cs b/src/Main/SharpDevelop/Parser/AssemblyParserService.cs index 22961daf61..ed66405e0b 100644 --- a/src/Main/SharpDevelop/Parser/AssemblyParserService.cs +++ b/src/Main/SharpDevelop/Parser/AssemblyParserService.cs @@ -322,6 +322,7 @@ namespace ICSharpCode.SharpDevelop.Parser public IAssemblyModel GetAssemblyModel(FileName fileName, bool includeInternalMembers = false) { LoadedAssembly assembly = GetLoadedAssembly(fileName, includeInternalMembers); + // TODO context might need references as well IEntityModelContext context = new AssemblyEntityModelContext(assembly.ProjectContent); IUpdateableAssemblyModel model = SD.GetService().CreateAssemblyModel(context);