Browse Source

Fixed resolving event declarations.

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
9de8c14c02
  1. 9
      ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
  2. 42
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/ResolveAtLocationTests.cs

9
ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

@ -580,7 +580,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -580,7 +580,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
for (AstNode node = fieldOrEventDeclaration.FirstChild; node != null; node = node.NextSibling) {
if (node.Role == FieldDeclaration.Roles.Variable) {
if (resolver.CurrentTypeDefinition != null) {
resolver.CurrentMember = resolver.CurrentTypeDefinition.Fields.FirstOrDefault(f => f.Region.IsInside(node.StartLocation));
IEnumerable<IMember> members;
if (fieldOrEventDeclaration is EventDeclaration)
members = resolver.CurrentTypeDefinition.Events;
else
members = resolver.CurrentTypeDefinition.Fields;
resolver.CurrentMember = members.FirstOrDefault(f => f.Region.IsInside(node.StartLocation));
}
if (resolverEnabled && initializerCount == 1) {
@ -601,7 +606,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -601,7 +606,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
if (resolverEnabled) {
ResolveResult result = errorResult;
if (variableInitializer.Parent is FieldDeclaration) {
if (variableInitializer.Parent is FieldDeclaration || variableInitializer.Parent is EventDeclaration) {
if (resolver.CurrentMember != null) {
result = new MemberResolveResult(null, resolver.CurrentMember, resolver.CurrentMember.ReturnType.Resolve(resolver.Context));
}

42
ICSharpCode.NRefactory.Tests/CSharp/Resolver/ResolveAtLocationTests.cs

@ -75,5 +75,47 @@ class A { void M() { @@ -75,5 +75,47 @@ class A { void M() {
class A { public A() : ba$se() {} }");
Assert.AreEqual("System.Object..ctor", rr.Member.FullName);
}
[Test]
public void Field()
{
var rr = ResolveAtLocation<MemberResolveResult>("public class A { int te$st; }");
Assert.AreEqual("test", rr.Member.Name);
}
[Test]
public void Field1InLineWithTwoFields()
{
var rr = ResolveAtLocation<MemberResolveResult>("public class A { int te$st, test2; }");
Assert.AreEqual("test", rr.Member.Name);
}
[Test]
public void Field2InLineWithTwoFields()
{
var rr = ResolveAtLocation<MemberResolveResult>("public class A { int test, te$st2; }");
Assert.AreEqual("test2", rr.Member.Name);
}
[Test]
public void Event()
{
var rr = ResolveAtLocation<MemberResolveResult>("public class A { event EventHandler Te$st; }");
Assert.AreEqual("Test", rr.Member.Name);
}
[Test]
public void Event1InLineWithTwoEvents()
{
var rr = ResolveAtLocation<MemberResolveResult>("public class A { event EventHandler Te$st, Test2; }");
Assert.AreEqual("Test", rr.Member.Name);
}
[Test]
public void Event2InLineWithTwoEvents()
{
var rr = ResolveAtLocation<MemberResolveResult>("public class A { event EventHandler Test, Te$st2; }");
Assert.AreEqual("Test2", rr.Member.Name);
}
}
}

Loading…
Cancel
Save