Browse Source

use specific DebuggerProcessEntityModelContext with all modules as references, to make resolving work properly

newNRILSpyDebugger
Siegfried Pammer 12 years ago
parent
commit
6bd1258a25
  1. 42
      src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs
  2. 1
      src/Main/SharpDevelop/Parser/AssemblyParserService.cs

42
src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs

@ -7,6 +7,7 @@ using Debugger; @@ -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 @@ -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<IModelFactory>().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 @@ -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; }
}
}
/// <summary>
/// AddModuleToWorkspaceCommand.
/// </summary>

1
src/Main/SharpDevelop/Parser/AssemblyParserService.cs

@ -322,6 +322,7 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -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<IModelFactory>().CreateAssemblyModel(context);

Loading…
Cancel
Save