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>
. .
EventMemberSpecifier<out string name> EventMemberSpecifier<out string name>
(. string type; name = String.Empty; .) = (. string eventName; .)
Identifier (. type = t.val; .) =
( Identifier | "MyBase" | "Me" )
(. name = t.val; .)
"." "."
Identifier (. name = type + "." + t.val; .) IdentifierOrKeyword<out eventName>
| "MyBase" "." (. name = name + "." + eventName; .)
( .
Identifier (. name = "MyBase." + t.val; .)
| "Error" (. name = "MyBase.Error"; .)
)
.
Expr<out Expression expr> Expr<out Expression expr>
= =

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

@ -200,32 +200,6 @@ namespace ICSharpCode.NRefactory.Tests.Ast
#region VB.NET #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] [Test]
public void VBNetMethodWithModifiersRegionTest() public void VBNetMethodWithModifiersRegionTest()
{ {
@ -321,6 +295,25 @@ End Interface
Assert.AreEqual("ISomeInterface", md.Templates[0].Bases[0].Type); 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 #endregion
} }
} }

Loading…
Cancel
Save