diff --git a/src/AddIns/Analysis/UnitTesting/Test/Utils/MockClass.cs b/src/AddIns/Analysis/UnitTesting/Test/Utils/MockClass.cs
index da0cb9b97c..3f1bcb7598 100644
--- a/src/AddIns/Analysis/UnitTesting/Test/Utils/MockClass.cs
+++ b/src/AddIns/Analysis/UnitTesting/Test/Utils/MockClass.cs
@@ -155,5 +155,12 @@ namespace UnitTesting.Tests.Utils
Fields.Add(field);
return field;
}
+
+ public DefaultMethod AddMethod(string name)
+ {
+ DefaultMethod method = new DefaultMethod(this, name);
+ Methods.Add(method);
+ return method;
+ }
}
}
diff --git a/src/AddIns/Analysis/UnitTesting/Test/Utils/Tests/MockClassTests.cs b/src/AddIns/Analysis/UnitTesting/Test/Utils/Tests/MockClassTests.cs
index 8373db55e4..2fac8a5d02 100644
--- a/src/AddIns/Analysis/UnitTesting/Test/Utils/Tests/MockClassTests.cs
+++ b/src/AddIns/Analysis/UnitTesting/Test/Utils/Tests/MockClassTests.cs
@@ -255,5 +255,27 @@ namespace UnitTesting.Tests.Utils.Tests
Assert.AreEqual("MyField", name);
}
+
+ [Test]
+ public void AddMethod_PassedName_AddsMethodToClass()
+ {
+ MockClass c = new MockClass();
+ c.AddMethod("MyMethod");
+
+ IMethod myMethod = c.Methods[0];
+ string name = myMethod.Name;
+
+ Assert.AreEqual("MyMethod", name);
+ }
+
+ [Test]
+ public void AddMethod_PassedMethodName_ReturnsMethodWithExpectedName()
+ {
+ MockClass c = new MockClass();
+ IMethod myMethod = c.AddMethod("MyMethod");
+ string name = myMethod.Name;
+
+ Assert.AreEqual("MyMethod", name);
+ }
}
}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj
index efc54d5625..f7468c9d24 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/PythonBinding.csproj
@@ -101,7 +101,6 @@
-
@@ -114,7 +113,6 @@
-
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs
index bf44d6e6e2..73c67db924 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonClassMembers.cs
@@ -32,6 +32,7 @@ namespace ICSharpCode.PythonBinding
members.AddRange(declaringType.Events);
members.AddRange(declaringType.Fields);
members.AddRange(declaringType.Properties);
+ members.AddRange(declaringType.Methods);
return members;
}
}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDotNetMethodResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDotNetMethodResolver.cs
deleted file mode 100644
index e225b78d00..0000000000
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDotNetMethodResolver.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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 PythonDotNetMethodResolver
- {
- PythonClassResolver classResolver;
-
- public PythonDotNetMethodResolver(PythonClassResolver classResolver)
- {
- this.classResolver = classResolver;
- }
-
- public ResolveResult Resolve(PythonResolverContext resolverContext)
- {
- MemberName memberName = resolverContext.CreateExpressionMemberName();
- IClass matchingClass = classResolver.GetClass(resolverContext, memberName.Type);
- if (matchingClass != null) {
- return new PythonMethodGroupResolveResult(matchingClass, memberName.Name);
- }
- return null;
- }
- }
-}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs
index cab49606d7..475fc17f62 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMemberResolver.cs
@@ -26,7 +26,7 @@ namespace ICSharpCode.PythonBinding
{
this.resolverContext = resolverContext;
IMember member = FindMember();
- return CreateMemberResolveResult(member);
+ return CreateResolveResult(member);
}
IMember FindMember()
@@ -72,9 +72,12 @@ namespace ICSharpCode.PythonBinding
return null;
}
- MemberResolveResult CreateMemberResolveResult(IMember member)
+ ResolveResult CreateResolveResult(IMember member)
{
if (member != null) {
+ if (member is IMethod) {
+ return new PythonMethodGroupResolveResult(member.DeclaringType, member.Name);
+ }
return new MemberResolveResult(null, null, member);
}
return null;
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodResolver.cs
deleted file mode 100644
index eb552b9cef..0000000000
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonMethodResolver.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// 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 PythonMethodResolver : IPythonResolver
- {
- PythonDotNetMethodResolver dotNetMethodResolver;
- PythonStandardModuleMethodResolver standardModuleMethodResolver;
-
- public PythonMethodResolver(PythonClassResolver classResolver, PythonStandardModuleResolver standardModuleResolver)
- {
- dotNetMethodResolver = new PythonDotNetMethodResolver(classResolver);
- standardModuleMethodResolver = new PythonStandardModuleMethodResolver(standardModuleResolver);
- }
-
- public ResolveResult Resolve(PythonResolverContext resolverContext)
- {
- ResolveResult resolveResult = dotNetMethodResolver.Resolve(resolverContext);
- if (resolveResult != null) {
- return resolveResult;
- }
- return standardModuleMethodResolver.Resolve(resolverContext);
- }
- }
-}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
index 4f4e4e86f8..c428da1e9e 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
@@ -18,7 +18,7 @@ namespace ICSharpCode.PythonBinding
PythonClassResolver classResolver = new PythonClassResolver();
PythonStandardModuleResolver standardModuleResolver = new PythonStandardModuleResolver();
PythonSelfResolver selfResolver = new PythonSelfResolver();
- PythonMethodResolver methodResolver;
+ PythonStandardModuleMethodResolver methodResolver;
PythonMemberResolver memberResolver;
PythonLocalVariableResolver localVariableResolver;
@@ -26,7 +26,7 @@ namespace ICSharpCode.PythonBinding
public PythonResolver()
{
- methodResolver = new PythonMethodResolver(classResolver, standardModuleResolver);
+ methodResolver = new PythonStandardModuleMethodResolver(standardModuleResolver);
localVariableResolver = new PythonLocalVariableResolver(classResolver);
memberResolver = new PythonMemberResolver(classResolver, localVariableResolver);
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleMethodResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleMethodResolver.cs
index 86e4d534b0..9ac53ca70e 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleMethodResolver.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonStandardModuleMethodResolver.cs
@@ -6,7 +6,7 @@ using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PythonBinding
{
- public class PythonStandardModuleMethodResolver
+ public class PythonStandardModuleMethodResolver : IPythonResolver
{
PythonStandardModuleResolver standardModuleResolver;
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
index f2b8498cbb..f73928cf9a 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
@@ -367,6 +367,7 @@
+
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTests.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTests.cs
index ef116d3c5b..2230da1614 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTests.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveConsoleWriteLineTests.cs
@@ -24,6 +24,7 @@ namespace PythonBinding.Tests.Resolver
protected override ExpressionResult GetExpressionResult()
{
systemConsoleClass = new MockClass(projectContent, "System.Console");
+ systemConsoleClass.AddMethod("WriteLine");
projectContent.SetClassToReturnFromGetClass("Console", systemConsoleClass);
return new ExpressionResult("Console.WriteLine", new DomRegion(2, 2), null, null);
}
@@ -35,26 +36,23 @@ namespace PythonBinding.Tests.Resolver
"Console.WriteLine\r\n";
}
- [Test]
- public void ResolveResultExists()
- {
- Assert.IsNotNull(resolveResult);
- }
-
///
/// Gets the class name used in IProjectContent.GetClass call.
///
[Test]
- public void GetClassName()
+ public void Resolve_ExpressionIsSystemConsoleWriteLine_ProjectContentGetClassNamePassedConsole()
{
- Assert.AreEqual("Console", projectContent.GetClassName);
+ string className = projectContent.GetClassName;
+ Assert.AreEqual("Console", className);
}
[Test]
- public void MethodNameResolveIsWriteLine()
+ public void Resolve_ExpressionIsSystemConsoleWriteLine_MethodNameResolvedIsWriteLine()
{
MethodGroupResolveResult methodResolveResult = (MethodGroupResolveResult)resolveResult;
- Assert.AreEqual("WriteLine", methodResolveResult.Name);
+ string name = methodResolveResult.Name;
+ string expectedName = "WriteLine";
+ Assert.AreEqual(expectedName, name);
}
}
}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalVariableMethodTests.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalVariableMethodTests.cs
new file mode 100644
index 0000000000..6d30d2aeb1
--- /dev/null
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalVariableMethodTests.cs
@@ -0,0 +1,57 @@
+// 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 ResolveLocalVariableMethodTests
+ {
+ PythonResolverTestsHelper resolverHelper;
+ MockClass myClass;
+
+ void CreateClassWithOneProperty()
+ {
+ resolverHelper = new PythonResolverTestsHelper();
+ myClass = resolverHelper.CreateClass("MyClass");
+ myClass.AddMethod("MyMethod");
+
+ resolverHelper.ProjectContent.SetClassToReturnFromGetClass("MyClass", myClass);
+ }
+
+ [Test]
+ public void Resolve_ExpressionIsForMethodOnLocalVariable_MethodGroupResolveResultNameIsMethodName()
+ {
+ CreateClassWithOneProperty();
+ string code =
+ "a = MyClass()\r\n" +
+ "a.MyMethod";
+
+ resolverHelper.Resolve("a.MyMethod", code);
+ string methodName = resolverHelper.MethodGroupResolveResult.Name;
+ string expectedMethodName = "MyMethod";
+
+ Assert.AreEqual(expectedMethodName, methodName);
+ }
+
+ [Test]
+ public void Resolve_ExpressionIsForMethodOnLocalVariable_MethodGroupResolveResultContainingTypeUnderlyingClassIsMyClass()
+ {
+ CreateClassWithOneProperty();
+ string code =
+ "a = MyClass()\r\n" +
+ "a.MyMethod";
+
+ resolverHelper.Resolve("a.MyMethod", code);
+ IClass c = resolverHelper.MethodGroupResolveResult.ContainingType.GetUnderlyingClass();
+
+ Assert.AreEqual(myClass, c);
+ }
+
+ }
+}