Browse Source

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
shortcuts
Daniel Grunwald 20 years ago
parent
commit
579134aeec
  1. 10
      src/Main/Base/Project/Src/Dom/IDecoration.cs
  2. 5
      src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs
  3. 30
      src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs
  4. 11
      src/Main/StartUp/Project/Dialogs/ExceptionBox.cs

10
src/Main/Base/Project/Src/Dom/IDecoration.cs

@ -46,6 +46,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -46,6 +46,10 @@ namespace ICSharpCode.SharpDevelop.Dom
get;
}
/// <summary>
/// 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.
/// </summary>
bool IsVirtual {
get;
}
@ -86,6 +90,12 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -86,6 +90,12 @@ namespace ICSharpCode.SharpDevelop.Dom
bool IsOverride {
get;
}
/// <summary>
/// Gets if the member can be overridden. Returns true when the member is "virtual" or "override" but not "sealed".
/// </summary>
bool IsOverridable {
get;
}
bool IsNew {
get;

5
src/Main/Base/Project/Src/Dom/Implementations/AbstractDecoration.cs

@ -164,6 +164,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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;

30
src/Main/Base/Project/Src/Dom/Implementations/DefaultReturnType.cs

@ -57,12 +57,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -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 @@ -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;
}
}
}
}

11
src/Main/StartUp/Project/Dialogs/ExceptionBox.cs

@ -12,6 +12,7 @@ using System.Diagnostics; @@ -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 @@ -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();
}
}
}

Loading…
Cancel
Save