From 579134aeecc315633c15d668a7c9427b5b35f2a3 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 25 Feb 2006 16:24:07 +0000 Subject: [PATCH] Fixed SD2-676: Code completion for a class with many methods can be slow Overrides are now only searched for overridable methods - this speeds up code-completion on classes with many non-virtual (or static) methods. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1182 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- src/Main/Base/Project/Src/Dom/IDecoration.cs | 10 +++++++ .../Dom/Implementations/AbstractDecoration.cs | 5 ++++ .../Dom/Implementations/DefaultReturnType.cs | 30 +++++++++++-------- .../StartUp/Project/Dialogs/ExceptionBox.cs | 11 ++++++- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/Main/Base/Project/Src/Dom/IDecoration.cs b/src/Main/Base/Project/Src/Dom/IDecoration.cs index 6b2a0cfccd..e23da782d5 100644 --- a/src/Main/Base/Project/Src/Dom/IDecoration.cs +++ b/src/Main/Base/Project/Src/Dom/IDecoration.cs @@ -46,6 +46,10 @@ namespace ICSharpCode.SharpDevelop.Dom get; } + /// + /// Gets if the member is virtual. Is true only if the "virtual" modifier was used, but non-virtual + /// members can be overridden, too; if they are already overriding a method. + /// bool IsVirtual { get; } @@ -86,6 +90,12 @@ namespace ICSharpCode.SharpDevelop.Dom bool IsOverride { get; } + /// + /// Gets if the member can be overridden. Returns true when the member is "virtual" or "override" but not "sealed". + /// + bool IsOverridable { + get; + } bool IsNew { get; diff --git a/src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs b/src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs index ff0dbc7b37..12afb67c04 100644 --- a/src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs +++ b/src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs @@ -164,6 +164,11 @@ namespace ICSharpCode.SharpDevelop.Dom return (modifiers & ModifierEnum.Override) == ModifierEnum.Override; } } + public bool IsOverridable { + get { + return (IsOverride || IsVirtual) && !IsSealed; + } + } public bool IsNew { get { return (modifiers & ModifierEnum.New) == ModifierEnum.New; diff --git a/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs index 606d0aff53..f78dfd5fd9 100644 --- a/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs +++ b/src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs @@ -57,12 +57,15 @@ namespace ICSharpCode.SharpDevelop.Dom // do not add methods that were overridden bool ok = true; - foreach (IMethod oldMethod in l) { - if (string.Equals(oldMethod.Name, m.Name, StringComparison.InvariantCultureIgnoreCase)) { - if (m.IsStatic == oldMethod.IsStatic) { - if (DiffUtility.Compare(oldMethod.Parameters, m.Parameters) == 0) { - ok = false; - break; + if (m.IsOverridable) { + StringComparer comparer = m.DeclaringType.ProjectContent.Language.NameComparer; + foreach (IMethod oldMethod in l) { + if (comparer.Equals(oldMethod.Name, m.Name)) { + if (m.IsStatic == oldMethod.IsStatic) { + if (DiffUtility.Compare(oldMethod.Parameters, m.Parameters) == 0) { + ok = false; + break; + } } } } @@ -84,12 +87,15 @@ namespace ICSharpCode.SharpDevelop.Dom foreach (IProperty p in bc.Properties) { // do not add methods that were overridden bool ok = true; - foreach (IProperty oldProperty in l) { - if (string.Equals(oldProperty.Name, p.Name, StringComparison.InvariantCultureIgnoreCase)) { - if (p.IsStatic == oldProperty.IsStatic) { - if (DiffUtility.Compare(oldProperty.Parameters, p.Parameters) == 0) { - ok = false; - break; + if (p.IsOverridable) { + StringComparer comparer = p.DeclaringType.ProjectContent.Language.NameComparer; + foreach (IProperty oldProperty in l) { + if (comparer.Equals(oldProperty.Name, p.Name)) { + if (p.IsStatic == oldProperty.IsStatic) { + if (DiffUtility.Compare(oldProperty.Parameters, p.Parameters) == 0) { + ok = false; + break; + } } } } diff --git a/src/Main/StartUp/Project/Dialogs/ExceptionBox.cs b/src/Main/StartUp/Project/Dialogs/ExceptionBox.cs index 833335208a..3a6afe41db 100644 --- a/src/Main/StartUp/Project/Dialogs/ExceptionBox.cs +++ b/src/Main/StartUp/Project/Dialogs/ExceptionBox.cs @@ -12,6 +12,7 @@ using System.Diagnostics; using System.Resources; using System.Reflection; using System.Drawing; +using System.Threading; using System.Globalization; using ICSharpCode.Core; @@ -93,7 +94,15 @@ namespace ICSharpCode.SharpDevelop void CopyInfoToClipboard() { if (copyErrorCheckBox.Checked) { - ClipboardWrapper.SetText(getClipboardString()); + if (Application.OleRequired() == ApartmentState.STA) { + ClipboardWrapper.SetText(getClipboardString()); + } else { + Thread th = new Thread((ThreadStart)delegate { + ClipboardWrapper.SetText(getClipboardString()); + }); + th.SetApartmentState(ApartmentState.STA); + th.Start(); + } } }