diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs
index b6bd9b8a93..173288c3b5 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs
@@ -24,11 +24,17 @@ namespace ICSharpCode.PythonBinding
///
public class PythonLocalVariableResolver : PythonWalker, IPythonResolver
{
+ PythonClassResolver classResolver;
string variableName = String.Empty;
string typeName;
AssignmentStatement currentAssignStatement;
bool foundVariableAssignment;
+ public PythonLocalVariableResolver(PythonClassResolver classResolver)
+ {
+ this.classResolver = classResolver;
+ }
+
///
/// The resolved type name.
///
@@ -141,7 +147,7 @@ namespace ICSharpCode.PythonBinding
LocalResolveResult CreateLocalResolveResult(string typeName, string identifier, PythonResolverContext resolverContext)
{
- IClass resolvedClass = resolverContext.GetClass(typeName);
+ IClass resolvedClass = classResolver.GetClass(resolverContext, typeName);
if (resolvedClass != null) {
return CreateLocalResolveResult(identifier, resolvedClass);
}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
index daa57b23ce..1f15bc3997 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonResolver.cs
@@ -20,7 +20,7 @@ namespace ICSharpCode.PythonBinding
PythonSelfResolver selfResolver = new PythonSelfResolver();
PythonMethodResolver methodResolver;
PythonMemberResolver memberResolver;
- PythonLocalVariableResolver localVariableResolver = new PythonLocalVariableResolver();
+ PythonLocalVariableResolver localVariableResolver;
List resolvers = new List();
@@ -28,6 +28,7 @@ namespace ICSharpCode.PythonBinding
{
methodResolver = new PythonMethodResolver(classResolver, standardModuleResolver);
memberResolver = new PythonMemberResolver(classResolver);
+ localVariableResolver = new PythonLocalVariableResolver(classResolver);
resolvers.Add(importResolver);
resolvers.Add(classResolver);
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs
index 9977ebf536..24e5d2b6aa 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs
@@ -16,7 +16,8 @@ namespace PythonBinding.Tests.Resolver
void Resolve(string variableName, string code)
{
- PythonLocalVariableResolver resolver = new PythonLocalVariableResolver();
+ PythonClassResolver classResolver = new PythonClassResolver();
+ PythonLocalVariableResolver resolver = new PythonLocalVariableResolver(classResolver);
typeName = resolver.Resolve(variableName, code);
}
diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTests.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTests.cs
index 68d24f040d..4660385048 100644
--- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTests.cs
+++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/ResolveLocalClassInstanceTests.cs
@@ -22,20 +22,25 @@ namespace PythonBinding.Tests.Resolver
PythonResolverTestsHelper resolverHelper;
MockClass testClass;
- [SetUp]
- public void Init()
+ void CreateResolver()
{
- resolverHelper = new PythonResolverTestsHelper();
+ CreateResolver(String.Empty);
+ }
+
+ void CreateResolver(string code)
+ {
+ resolverHelper = new PythonResolverTestsHelper(code);
testClass = resolverHelper.CreateClass("Test.Test1");
resolverHelper.ProjectContent.ClassesInProjectContent.Add(testClass);
resolverHelper.ProjectContent.SetClassToReturnFromGetClass("Test.Test1", testClass);
-
}
[Test]
public void Resolve_LocalVariableIsCreatedOnPreviousLine_ResolveResultVariableNameIsA()
{
+ CreateResolver();
+
string python =
"a = Test.Test1()\r\n" +
"a";
@@ -50,6 +55,8 @@ namespace PythonBinding.Tests.Resolver
[Test]
public void Resolve_LocalVariableIsCreatedOnPreviousLine_ResolveResultResolvedTypeIsTestClass()
{
+ CreateResolver();
+
string python =
"a = Test.Test1()\r\n" +
"a";
@@ -65,6 +72,8 @@ namespace PythonBinding.Tests.Resolver
[Test]
public void Resolve_LocalVariableIsReDefinedAfterLineBeingConsidered_ResolveResultResolvedTypeIsTestClass()
{
+ CreateResolver();
+
string python =
"a = Test.Test1()\r\n" +
"a\r\n" +
@@ -88,6 +97,8 @@ namespace PythonBinding.Tests.Resolver
[Test]
public void Resolve_LocalVariableIsReDefinedAfterLineBeingConsideredAndExpressionRegionEndLineIsMinusOne_ResolveResultResolvedTypeIsTestClass()
{
+ CreateResolver();
+
string python =
"a = Test.Test1()\r\n" +
"a\r\n" +
@@ -107,5 +118,27 @@ namespace PythonBinding.Tests.Resolver
Assert.AreEqual(testClass, underlyingClass);
}
+
+ [Test]
+ public void Resolve_LocalVariableTypeIsImported_ResolveResultResolvedTypeDeterminedFromImportedTypes()
+ {
+ string python =
+ "from MyNamespace import MyClass\r\n" +
+ "\r\n" +
+ "a = MyClass()\r\n" +
+ "a";
+
+ CreateResolver(python);
+
+ MockClass myClass = resolverHelper.CreateClass("MyNamespace.MyClass");
+ resolverHelper.ProjectContent.SetClassToReturnFromGetClass("MyNamespace.MyClass", myClass);
+
+ resolverHelper.Resolve("a", python);
+
+ IReturnType resolvedType = resolverHelper.LocalResolveResult.ResolvedType;
+ IClass underlyingClass = resolvedType.GetUnderlyingClass();
+
+ Assert.AreEqual(myClass, underlyingClass);
+ }
}
}