Browse Source

Fixed SD2-1338: VB "Handles" cause cannot be parsed when handling an event on "Me"

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2437 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
39bfcc0013
  1. 1433
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  2. 16
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  3. 45
      src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs

1433
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

16
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -1524,16 +1524,14 @@ ImplementsClause<out List<InterfaceImplementation> baseInterfaces> @@ -1524,16 +1524,14 @@ ImplementsClause<out List<InterfaceImplementation> baseInterfaces>
.
EventMemberSpecifier<out string name>
(. string type; name = String.Empty; .) =
Identifier (. type = t.val; .)
(. string eventName; .)
=
( Identifier | "MyBase" | "Me" )
(. name = t.val; .)
"."
Identifier (. name = type + "." + t.val; .)
| "MyBase" "."
(
Identifier (. name = "MyBase." + t.val; .)
| "Error" (. name = "MyBase.Error"; .)
)
.
IdentifierOrKeyword<out eventName>
(. name = name + "." + eventName; .)
.
Expr<out Expression expr>
=

45
src/Libraries/NRefactory/Test/Parser/TypeLevel/MethodDeclarationTests.cs

@ -200,32 +200,6 @@ namespace ICSharpCode.NRefactory.Tests.Ast @@ -200,32 +200,6 @@ namespace ICSharpCode.NRefactory.Tests.Ast
#region VB.NET
[Test]
public void VBNetSimpleMethodDeclarationTest()
{
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyMethod() {} ");
Assert.AreEqual("void", md.TypeReference.Type);
Assert.AreEqual(0, md.Parameters.Count);
}
[Test]
public void VBNetSimpleMethodRegionTest()
{
const string program = @"
void MyMethod()
{
OtherMethod();
}
";
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program);
Assert.AreEqual(2, md.StartLocation.Y, "StartLocation.Y");
Assert.AreEqual(2, md.EndLocation.Y, "EndLocation.Y");
Assert.AreEqual(3, md.StartLocation.X, "StartLocation.X");
// endLocation.X is currently 20. It should be 18, but that error is not critical
//Assert.AreEqual(18, md.EndLocation.X, "EndLocation.X");
}
[Test]
public void VBNetMethodWithModifiersRegionTest()
{
@ -321,6 +295,25 @@ End Interface @@ -321,6 +295,25 @@ End Interface
Assert.AreEqual("ISomeInterface", md.Templates[0].Bases[0].Type);
}
[Test]
public void VBNetMethodWithHandlesClause()
{
MethodDeclaration md = ParseUtilVBNet.ParseTypeMember<MethodDeclaration>(
@"Public Sub MyMethod(sender As Object, e As EventArgs) Handles x.y
End Sub");
Assert.AreEqual(new string[] { "x.y" }, md.HandlesClause.ToArray());
md = ParseUtilVBNet.ParseTypeMember<MethodDeclaration>(
@"Public Sub MyMethod() Handles Me.FormClosing
End Sub");
Assert.AreEqual(new string[] { "Me.FormClosing" }, md.HandlesClause.ToArray());
md = ParseUtilVBNet.ParseTypeMember<MethodDeclaration>(
@"Public Sub MyMethod() Handles MyBase.Event, Button1.Click
End Sub");
Assert.AreEqual(new string[] { "MyBase.Event", "Button1.Click" }, md.HandlesClause.ToArray());
}
#endregion
}
}

Loading…
Cancel
Save