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();
+ }
}
}