diff --git a/src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs b/src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs index 99682c80bd..7d15662650 100644 --- a/src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs +++ b/src/AddIns/BackendBindings/Python/PyWalker/NRefactoryAstVisitor.cs @@ -278,11 +278,6 @@ namespace PyWalker return base.VisitIfElseStatement(ifElseStatement, data); } - public override object VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration, object data) - { - return base.VisitIndexerDeclaration(indexerDeclaration, data); - } - public override object VisitIndexerExpression(IndexerExpression indexerExpression, object data) { return base.VisitIndexerExpression(indexerExpression, data); diff --git a/src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj b/src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj index 71f993685b..50c0c251a6 100644 --- a/src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj +++ b/src/AddIns/BackendBindings/Python/PyWalker/PyWalker.csproj @@ -1,5 +1,5 @@  - + {55329704-6046-48EC-8A20-5C80B3092A63} Debug @@ -7,7 +7,7 @@ WinExe PyWalker PyWalker - v3.5 + v4.0 False False 4 diff --git a/src/AddIns/BackendBindings/Python/PythonBinding.sln b/src/AddIns/BackendBindings/Python/PythonBinding.sln index 7676dba062..9f4db98c7a 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding.sln +++ b/src/AddIns/BackendBindings/Python/PythonBinding.sln @@ -38,6 +38,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", ".. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting.Tests", "..\Scripting\Test\ICSharpCode.Scripting.Tests.csproj", "{85C09AD8-183B-403A-869A-7226646218A9}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PyWalker", "PyWalker\PyWalker.csproj", "{55329704-6046-48EC-8A20-5C80B3092A63}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -128,5 +130,13 @@ Global {85C09AD8-183B-403A-869A-7226646218A9}.Release|Any CPU.ActiveCfg = Release|x86 {85C09AD8-183B-403A-869A-7226646218A9}.Release|x86.Build.0 = Release|x86 {85C09AD8-183B-403A-869A-7226646218A9}.Release|x86.ActiveCfg = Release|x86 + {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|x86.Build.0 = Debug|Any CPU + {55329704-6046-48EC-8A20-5C80B3092A63}.Debug|x86.ActiveCfg = Debug|Any CPU + {55329704-6046-48EC-8A20-5C80B3092A63}.Release|Any CPU.Build.0 = Release|Any CPU + {55329704-6046-48EC-8A20-5C80B3092A63}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55329704-6046-48EC-8A20-5C80B3092A63}.Release|x86.Build.0 = Release|Any CPU + {55329704-6046-48EC-8A20-5C80B3092A63}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection EndGlobal diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs index 9479733afa..f9d148dce6 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonLocalVariableResolver.cs @@ -105,33 +105,13 @@ namespace ICSharpCode.PythonBinding /// /// then the expression will be a name expression referring to Class1. /// - static string GetTypeName(Expression node) + public static string GetTypeName(Expression node) { - // Collect the names that make up the type name. - NameExpression nameExpression = null; - List names = new List(); - do { - nameExpression = node as NameExpression; - MemberExpression memberExpression = node as MemberExpression; - string name = String.Empty; - if (memberExpression != null) { - name = memberExpression.Name; - node = memberExpression.Target; - } else if (nameExpression != null) { - name = nameExpression.Name; - } - names.Add(name); - } while (nameExpression == null); - - // Create the fully qualified type name by adding the names - // in reverse order. - StringBuilder typeName = new StringBuilder(); - typeName.Append(names[names.Count - 1]); - for (int i = names.Count - 2; i >= 0; --i) { - typeName.Append('.'); - typeName.Append(names[i]); + NameExpression nameExpression = node as NameExpression; + if (nameExpression != null) { + return nameExpression.Name; } - return typeName.ToString(); + return PythonControlFieldExpression.GetMemberName(node as MemberExpression); } public ResolveResult Resolve(PythonResolverContext resolverContext, ExpressionResult expressionResult) diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs index a67afecc5e..9977ebf536 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Resolver/PythonLocalVariableResolverTests.cs @@ -3,7 +3,9 @@ using System; using ICSharpCode.PythonBinding; +using IronPython.Compiler.Ast; using NUnit.Framework; +using PythonBinding.Tests.Utils; namespace PythonBinding.Tests.Resolver { @@ -74,5 +76,14 @@ namespace PythonBinding.Tests.Resolver Resolve("a", code); Assert.AreEqual("Root.Test.Class1", typeName); } + + [Test] + public void GetTypeName_ExpressionIsNotNameOrMemberExpression_ReturnsEmptyStringAndDoesNotGetStuckInInfiniteLoop() + { + AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("a = 2"); + Expression expression = statement.Right; + string typeName = PythonLocalVariableResolver.GetTypeName(expression); + Assert.AreEqual(String.Empty, typeName); + } } }