From b96323878121d2b241dcb543665d757732c0462c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Wed, 22 Jul 2009 16:23:07 +0000 Subject: [PATCH] Created ModuleCollection class git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4512 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Pads/LoadedModulesPad.cs | 16 ++-- .../Project/Src/Control/Process-Modules.cs | 88 ++++++------------- .../Project/Src/Control/Process.cs | 1 + .../Project/Src/Internal/ManagedCallback.cs | 4 +- .../Project/Src/Metadata/DebugType.cs | 4 +- .../Project/Src/DebuggerTestsBase.cs | 4 +- .../Project/Src/TestPrograms/DefinedTypes.cs | 4 +- .../Project/Src/TestPrograms/ThreadName.cs | 2 +- 8 files changed, 45 insertions(+), 78 deletions(-) diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs index ea5bceb6a5..6b7c2dfd33 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs @@ -105,25 +105,25 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads protected override void SelectProcess(Process process) { if (debuggedProcess != null) { - debuggedProcess.ModuleLoaded -= debuggedProcess_ModuleLoaded; - debuggedProcess.ModuleUnloaded -= debuggedProcess_ModuleUnloaded; + debuggedProcess.Modules.Added -= debuggedProcess_ModuleLoaded; + debuggedProcess.Modules.Removed -= debuggedProcess_ModuleUnloaded; } debuggedProcess = process; if (debuggedProcess != null) { - debuggedProcess.ModuleLoaded += debuggedProcess_ModuleLoaded; - debuggedProcess.ModuleUnloaded += debuggedProcess_ModuleUnloaded; + debuggedProcess.Modules.Added += debuggedProcess_ModuleLoaded; + debuggedProcess.Modules.Removed += debuggedProcess_ModuleUnloaded; } RefreshPad(); } - void debuggedProcess_ModuleLoaded(object sender, ModuleEventArgs e) + void debuggedProcess_ModuleLoaded(object sender, CollectionItemEventArgs e) { - AddModule(e.Module); + AddModule(e.Item); } - void debuggedProcess_ModuleUnloaded(object sender, ModuleEventArgs e) + void debuggedProcess_ModuleUnloaded(object sender, CollectionItemEventArgs e) { - RemoveModule(e.Module); + RemoveModule(e.Item); } public override void RefreshPad() diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs index 31e5562f31..8dcf9367c0 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process-Modules.cs @@ -14,47 +14,33 @@ namespace Debugger { public partial class Process { - int lastAssignedModuleOrderOfLoading= 0; - - List moduleCollection = new List(); - - public event EventHandler ModuleLoaded; - public event EventHandler ModuleUnloaded; - - protected void OnModuleLoaded(Module module) - { - if (ModuleLoaded != null) { - ModuleLoaded(this, new ModuleEventArgs(module)); - } - } - - protected void OnModuleUnloaded(Module module) - { - if (ModuleUnloaded != null) { - ModuleUnloaded(this, new ModuleEventArgs(module)); - } - } + ModuleCollection modules; - public IList Modules { - get{ - return moduleCollection.AsReadOnly(); - } + public ModuleCollection Modules { + get { return modules; } } - - public Module GetModule(string filename) - { - foreach(Module module in moduleCollection) { - if (module.Filename == filename) { - return module; + } + + public class ModuleCollection: CollectionWithEvents + { + public ModuleCollection(NDebugger debugger):base (debugger) {} + + int lastAssignedModuleOrderOfLoading = 0; + + public Module this[string filename] { + get { + foreach(Module module in this) { + if (module.Filename == filename) { + return module; + } } + throw new DebuggerException("Module \"" + filename + "\" is not in collection"); } - - throw new DebuggerException("Module \"" + filename + "\" is not in collection"); } - internal Module GetModule(ICorDebugModule corModule) + internal Module Get(ICorDebugModule corModule) { - foreach(Module module in moduleCollection) { + foreach(Module module in this) { if (module.CorModule == corModule) { return module; } @@ -62,39 +48,19 @@ namespace Debugger throw new DebuggerException("Module is not in collection"); } - - internal void AddModule(Module module) + + protected override void OnAdded(Module module) { module.OrderOfLoading = lastAssignedModuleOrderOfLoading; lastAssignedModuleOrderOfLoading++; - moduleCollection.Add(module); - debugger.Breakpoints.SetInModule(module); - OnModuleLoaded(module); - } - - internal void AddModule(ICorDebugModule corModule) - { - AddModule(new Module(this, corModule)); + this.Debugger.Breakpoints.SetInModule(module); + base.OnAdded(module); } - - internal void RemoveModule(Module module) + + protected override void OnRemoved(Module module) { - moduleCollection.Remove(module); - OnModuleUnloaded(module); + base.OnRemoved(module); module.Dispose(); } - - internal void RemoveModule(ICorDebugModule corModule) - { - RemoveModule(GetModule(corModule)); - } - - internal void ClearModules() - { - while(moduleCollection.Count > 0) { - RemoveModule(moduleCollection[0]); - } - lastAssignedModuleOrderOfLoading = 0; - } } } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs index 9209f7dc85..84415126cf 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Control/Process.cs @@ -73,6 +73,7 @@ namespace Debugger this.callbackInterface = new ManagedCallback(this); evals = new EvalCollection(debugger); + modules = new ModuleCollection(debugger); } internal ICorDebugProcess CorProcess { diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs index 2819385bd8..2b5cff7307 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Internal/ManagedCallback.cs @@ -336,7 +336,7 @@ namespace Debugger { EnterCallback(PausedReason.Other, "LoadModule " + pModule.Name, pAppDomain); - process.AddModule(pModule); + process.Modules.Add(new Module(process, pModule)); ExitCallback(); } @@ -395,7 +395,7 @@ namespace Debugger { EnterCallback(PausedReason.Other, "UnloadModule", pAppDomain); - process.RemoveModule(pModule); + process.Modules.Remove(process.Modules.Get(pModule)); ExitCallback(); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs index 13fb4eafa9..db628f45ab 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Metadata/DebugType.cs @@ -337,7 +337,7 @@ namespace Debugger.MetaData this.corElementType = (CorElementType)corType.Type; if (this.IsClass || this.IsValueType) { - this.module = process.GetModule(corType.Class.Module); + this.module = process.Modules.Get(corType.Class.Module); this.classProps = module.MetaData.GetTypeDefProps(corType.Class.Token); } @@ -476,7 +476,7 @@ namespace Debugger.MetaData static public DebugType Create(Process process, ICorDebugClass corClass, params ICorDebugType[] typeArguments) { - MetaDataImport metaData = process.GetModule(corClass.Module).MetaData; + MetaDataImport metaData = process.Modules.Get(corClass.Module).MetaData; bool isValueType = false; uint superClassToken = metaData.GetTypeDefProps(corClass.Token).SuperClassToken; diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs index 5079769c3f..f9c392920b 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTestsBase.cs @@ -144,8 +144,8 @@ namespace Debugger.Tests lastLogMessage = e.Message; LogEvent("LogMessage", e.Message.Replace("\r",@"\r").Replace("\n",@"\n")); }; - process.ModuleLoaded += delegate(object sender, ModuleEventArgs e) { - LogEvent("ModuleLoaded", e.Module.Filename + (e.Module.HasSymbols ? " (Has symbols)" : " (No symbols)")); + process.Modules.Added += delegate(object sender, CollectionItemEventArgs e) { + LogEvent("ModuleLoaded", e.Item.Filename + (e.Item.HasSymbols ? " (Has symbols)" : " (No symbols)")); }; process.Paused += delegate(object sender, ProcessEventArgs e) { LogEvent("DebuggingPaused", e.Process.PauseSession.PausedReason.ToString() + " " + e.Process.SelectedStackFrame.NextStatement.ToString()); diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs index 21ca868d1b..ad6efb36c9 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/DefinedTypes.cs @@ -37,8 +37,8 @@ namespace Debugger.Tests { { StartTest("DefinedTypes.cs"); - ObjectDump("TypesAsString", process.GetModule("DefinedTypes.exe").GetNamesOfDefinedTypes()); - ObjectDump("Types", process.GetModule("DefinedTypes.exe").GetDefinedTypes()); + ObjectDump("TypesAsString", process.Modules["DefinedTypes.exe"].GetNamesOfDefinedTypes()); + ObjectDump("Types", process.Modules["DefinedTypes.exe"].GetDefinedTypes()); EndTest(); } diff --git a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ThreadName.cs b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ThreadName.cs index f44448d004..ec75fd8b78 100644 --- a/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ThreadName.cs +++ b/src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/TestPrograms/ThreadName.cs @@ -30,7 +30,7 @@ namespace Debugger.Tests { { debugger.Processes.Added += debugger_ProcessStarted; StartTest("ThreadName.cs"); - debugger.Processes.Removed -= debugger_ProcessStarted; + debugger.Processes.Added -= debugger_ProcessStarted; ObjectDump("Thread", process.SelectedThread); process.Continue(); ObjectDump("Thread", process.SelectedThread);