diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj
index 06dbede0cb..e30237378c 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj
@@ -114,6 +114,7 @@
+
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs
index 408b680c8e..ef62a48825 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs
@@ -25,11 +25,16 @@ namespace ICSharpCode.PythonBinding
public ResolveResult Resolve(PythonResolverContext resolverContext)
{
- this.resolverContext = resolverContext;
- IMember member = FindMember();
+ IMember member = FindMember(resolverContext);
return CreateResolveResult(member);
}
+ public IMember FindMember(PythonResolverContext resolverContext)
+ {
+ this.resolverContext = resolverContext;
+ return FindMember();
+ }
+
IMember FindMember()
{
return FindMember(resolverContext.Expression);
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodReturnValueResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodReturnValueResolver.cs
new file mode 100644
index 0000000000..62a46484f2
--- /dev/null
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodReturnValueResolver.cs
@@ -0,0 +1,46 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.SharpDevelop.Dom;
+
+namespace ICSharpCode.PythonBinding
+{
+ public class PythonMethodReturnValueResolver : IPythonResolver
+ {
+ PythonMemberResolver memberResolver;
+
+ public PythonMethodReturnValueResolver(PythonMemberResolver memberResolver)
+ {
+ this.memberResolver = memberResolver;
+ }
+
+ public ResolveResult Resolve(PythonResolverContext resolverContext)
+ {
+ string methodName = GetMethodName(resolverContext.Expression);
+ if (methodName != null) {
+ PythonResolverContext newResolverContext = resolverContext.Clone(methodName);
+ IMember member = memberResolver.FindMember(newResolverContext);
+ return CreateResolveResult(member);
+ }
+ return null;
+ }
+
+ string GetMethodName(string expression)
+ {
+ int methodParametersStartIndex = expression.IndexOf('(');
+ if ((methodParametersStartIndex > 0) && expression.EndsWith(")")) {
+ return expression.Substring(0, methodParametersStartIndex);
+ }
+ return null;
+ }
+
+ MemberResolveResult CreateResolveResult(IMember member)
+ {
+ if (member != null) {
+ return new MemberResolveResult(null, null, member);
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
index c428da1e9e..225628d7e2 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
@@ -21,6 +21,7 @@ namespace ICSharpCode.PythonBinding
PythonStandardModuleMethodResolver methodResolver;
PythonMemberResolver memberResolver;
PythonLocalVariableResolver localVariableResolver;
+ PythonMethodReturnValueResolver methodReturnValueResolver;
List resolvers = new List();
@@ -29,10 +30,12 @@ namespace ICSharpCode.PythonBinding
methodResolver = new PythonStandardModuleMethodResolver(standardModuleResolver);
localVariableResolver = new PythonLocalVariableResolver(classResolver);
memberResolver = new PythonMemberResolver(classResolver, localVariableResolver);
+ methodReturnValueResolver = new PythonMethodReturnValueResolver(memberResolver);
resolvers.Add(importResolver);
resolvers.Add(classResolver);
resolvers.Add(standardModuleResolver);
+ resolvers.Add(methodReturnValueResolver);
resolvers.Add(memberResolver);
resolvers.Add(methodResolver);
resolvers.Add(selfResolver);
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
index 4d53119545..cfbaac957e 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
@@ -370,6 +370,7 @@
+
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMethodReturnValueTests.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMethodReturnValueTests.cs
new file mode 100644
index 0000000000..94cd5d4550
--- /dev/null
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveMethodReturnValueTests.cs
@@ -0,0 +1,66 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using ICSharpCode.SharpDevelop.Dom;
+using NUnit.Framework;
+using PythonBinding.Tests.Utils;
+using UnitTesting.Tests.Utils;
+
+namespace PythonBinding.Tests.Resolver
+{
+ [TestFixture]
+ public class ResolveMethodReturnValueTests
+ {
+ PythonResolverTestsHelper resolverHelper;
+ MockClass myClass;
+ DefaultMethod myMethod;
+
+ void CreateResolver()
+ {
+ resolverHelper = new PythonResolverTestsHelper();
+ myClass = resolverHelper.CreateClass("MyClass");
+ myMethod = myClass.AddMethod("MyMethod");
+ myMethod.ReturnType = new DefaultReturnType(myClass);
+
+ resolverHelper.ProjectContent.SetClassToReturnFromGetClass("MyClass", myClass);
+ }
+
+ [Test]
+ public void Resolve_ExpressionToResolveIsMethodCallWithNoParameters_ReturnsMemberResolveResultWithResolvedMemberAsMethod()
+ {
+ CreateResolver();
+ string code = "MyClass.MyMethod()";
+ resolverHelper.Resolve(code);
+
+ MemberResolveResult result = resolverHelper.MemberResolveResult;
+ IMember resolvedMember = result.ResolvedMember;
+
+ Assert.AreEqual(myMethod, resolvedMember);
+ }
+
+ [Test]
+ public void Resolve_ExpressionToResolveIsMethodCallWithNoParameters_ReturnsMemberResolveResultWithMethodReturnValueAsResolvedType()
+ {
+ CreateResolver();
+ string code = "MyClass.MyMethod()";
+ resolverHelper.Resolve(code);
+
+ MemberResolveResult result = resolverHelper.MemberResolveResult;
+ IReturnType resolvedType = result.ResolvedType;
+ IReturnType expectedResolvedType = myMethod.ReturnType;
+
+ Assert.AreEqual(expectedResolvedType, resolvedType);
+ }
+
+ [Test]
+ public void Resolve_ExpressionHasCloseParenthesisButNoOpenParenthesis_NoArgumentOutOfRangeExceptionThrownAndResolveResultIsNull()
+ {
+ CreateResolver();
+ string code = "MyClass.MyMethod)";
+ resolverHelper.Resolve(code);
+
+ Assert.IsNull(resolverHelper.ResolveResult);
+ }
+ }
+}