diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index f9b57fad1c..660b699fe3 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -702,6 +702,8 @@ + + diff --git a/src/Main/Base/Project/Src/Dom/Implementations/AnonymousMethodReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/AnonymousMethodReturnType.cs new file mode 100644 index 0000000000..62ecb43bf2 --- /dev/null +++ b/src/Main/Base/Project/Src/Dom/Implementations/AnonymousMethodReturnType.cs @@ -0,0 +1,55 @@ +// +// 2002-2005 AlphaSierraPapa +// GNU General Public License +// +// $Revision$ +// + +using System; +using System.Collections.Generic; +using ICSharpCode.Core; + +namespace ICSharpCode.SharpDevelop.Dom +{ + /// + /// The return type of anonymous method expressions or lambda expressions. + /// + public sealed class AnonymousMethodReturnType : ProxyReturnType + { + public override bool IsDefaultReturnType { + get { + return false; + } + } + + public override IReturnType BaseType { + get { + return ReflectionReturnType.Delegate; + } + } + + public override string Name { + get { + return "delegate"; + } + } + + public override string FullyQualifiedName { + get { + return Name; + } + } + + public override string Namespace { + get { + return ""; + } + } + + public override string DotNetName { + get { + return Name; + } + } + } +} diff --git a/src/Main/Base/Project/Src/Dom/Implementations/NullReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/NullReturnType.cs new file mode 100644 index 0000000000..35903dbd77 --- /dev/null +++ b/src/Main/Base/Project/Src/Dom/Implementations/NullReturnType.cs @@ -0,0 +1,42 @@ +// +// 2002-2005 AlphaSierraPapa +// GNU General Public License +// +// $Revision$ +// + +using System; +using System.Collections.Generic; +using ICSharpCode.Core; + +namespace ICSharpCode.SharpDevelop.Dom +{ + /// The type of the 'null'/'nothing' literal. + [Serializable] + public sealed class NullReturnType : AbstractReturnType + { + public static readonly NullReturnType Instance = new NullReturnType(); + + public override bool Equals(object o) + { + return o is NullReturnType; + } + + public override int GetHashCode() + { + return 0; + } + + public override bool IsDefaultReturnType { + get { + return false; + } + } + + public override IClass GetUnderlyingClass() { return null; } + public override List GetMethods() { return new List(); } + public override List GetProperties() { return new List(); } + public override List GetFields() { return new List(); } + public override List GetEvents() { return new List(); } + } +} diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs index d3d00c9723..2f2775e16a 100644 --- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs +++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs @@ -30,10 +30,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver public override object Visit(PrimitiveExpression primitiveExpression, object data) { - if (primitiveExpression.Value != null) { + if (primitiveExpression.Value == null) { + return NullReturnType.Instance; + } else { return ReflectionReturnType.CreatePrimitive(primitiveExpression.Value.GetType()); } - return null; } public override object Visit(BinaryOperatorExpression binaryOperatorExpression, object data) @@ -444,7 +445,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver public override object Visit(AnonymousMethodExpression anonymousMethodExpression, object data) { - return ReflectionReturnType.Delegate; + return new AnonymousMethodReturnType(); } public override object Visit(ArrayInitializerExpression arrayInitializerExpression, object data) diff --git a/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs b/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs index f10aeeafca..d485138567 100644 --- a/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs +++ b/src/Main/Base/Project/Src/Services/Debugger/DefaultDebugger.cs @@ -57,8 +57,8 @@ namespace ICSharpCode.Core { attachedProcess.Exited -= new EventHandler(AttachedProcessExited); attachedProcess.Dispose(); - attachedProcess = null; - OnDebugStopped(EventArgs.Empty); + attachedProcess = null; + WorkbenchSingleton.SafeThreadAsyncCall(this, "OnDebugStopped", EventArgs.Empty); } public void StartWithoutDebugging(ProcessStartInfo processStartInfo)