From a378209c70ba6e8c3ec3b2e0503e557bd3b1fad2 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 27 Apr 2010 18:21:03 +0000 Subject: [PATCH] Fixed bug that caused VB resolver to not resolve fields of the current class within expressions like 'field(i)'. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5726 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../NRefactoryResolver/NRefactoryResolver.cs | 5 +++ .../CodeSnippetConverterTests.cs | 32 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs index d2908c63b8..11d19e6b9a 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryResolver.cs @@ -642,6 +642,11 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver List typeArguments, bool isInvocation, bool allowExtensionMethods, bool? isAccessThoughReferenceOfCurrentClass) { + // in VB everything can be used with invocation syntax (because the same syntax also accesses indexers), + // do don't use 'isInvocation'. + if (language == NR.SupportedLanguage.VBNet) + isInvocation = false; + List> members = MemberLookupHelper.LookupMember(declaringType, memberName, callingClass, languageProperties, isInvocation, isAccessThoughReferenceOfCurrentClass); List typeArgs = null; if (members != null && typeArguments != null && typeArguments.Count != 0) { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/CodeSnippetConverterTests.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/CodeSnippetConverterTests.cs index 68f418b011..c808c09e23 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/CodeSnippetConverterTests.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Tests/ICSharpCode.SharpDevelop.Dom.Tests/CodeSnippetConverterTests.cs @@ -140,6 +140,38 @@ namespace ICSharpCode.SharpDevelop.Dom.Tests out errors))); } + [Test] + public void ListAccessWithinForNextLoop() + { + Assert.AreEqual("public void A(System.Collections.Generic.List l)\n" + + "{\n" + + " for (int i = 0; i <= l.Count - 1; i++) {\n" + + " sum += l[i].Length;\n" + + " }\n" + + "}", + Normalize(converter.VBToCSharp("Sub A(l As Generic.List(Of String))\n" + + " For i As Integer = 0 To l.Count - 1\n" + + " sum += l(i).Length\n" + + " Next\n" + + "End Sub", + out errors))); + } + + [Test] + public void ListAccessOnField() + { + Assert.AreEqual("private System.Collections.Generic.List> ParsedText = new System.Collections.Generic.List>();\n" + + "public void A()\n" + + "{\n" + + " ParsedText[0].ToString();\n" + + "}", + Normalize(converter.VBToCSharp("Private ParsedText As New Generic.List(Of Generic.List(Of String))\n" + + "Sub A()\n" + + " ParsedText(0).ToString()\n" + + "End Sub", + out errors))); + } + string Normalize(string text) { return text.Replace("\t", " ").Replace("\r", "").Trim();