Browse Source

Fixed bugs with events: 1) Assignment of IsOverride to IsOverridable, and 2) AccessorOwner not being set for auto-events.

newNRvisualizers
erikkallen 13 years ago
parent
commit
8431aa0039
  1. 3
      ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs
  2. 16
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs
  3. 26
      ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs

3
ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs

@ -756,11 +756,12 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem @@ -756,11 +756,12 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
DefaultUnresolvedMethod CreateDefaultEventAccessor(IUnresolvedEvent ev, string name, IUnresolvedParameter valueParameter)
{
var a = new DefaultUnresolvedMethod(currentTypeDefinition, name);
a.AccessorOwner = ev;
a.Region = ev.BodyRegion;
a.BodyRegion = ev.BodyRegion;
a.Accessibility = ev.Accessibility;
a.IsAbstract = ev.IsAbstract;
a.IsOverride = ev.IsOverridable;
a.IsOverride = ev.IsOverride;
a.IsSealed = ev.IsSealed;
a.IsStatic = ev.IsStatic;
a.IsSynthetic = ev.IsSynthetic;

16
ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.TestCase.cs

@ -275,4 +275,20 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase @@ -275,4 +275,20 @@ namespace ICSharpCode.NRefactory.TypeSystem.TestCase
int IInterfaceWithIndexers.this[string x] { get { return 0; } set {} }
int IInterfaceWithIndexers.this[int x, int y] { get { return 0; } set {} }
}
public interface IHasEvent {
event EventHandler Event;
}
public class ClassThatImplementsEvent : IHasEvent {
public event EventHandler Event;
}
public class ClassThatImplementsEventWithCustomAccessors : IHasEvent {
public event EventHandler Event { add {} remove {} }
}
public class ClassThatImplementsEventExplicitly : IHasEvent {
event EventHandler IHasEvent.Event { add {} remove {} }
}
}

26
ICSharpCode.NRefactory.Tests/TypeSystem/TypeSystemTests.cs

@ -961,5 +961,31 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -961,5 +961,31 @@ namespace ICSharpCode.NRefactory.TypeSystem
Assert.That(prop.Setter.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IInterfaceWithProperty.set_Prop" }));
}
[Test]
public void EventAccessorsShouldBeReportedAsImplementingInterfaceAccessors() {
ITypeDefinition type = GetTypeDefinition(typeof(ClassThatImplementsEvent));
var evt = type.Events.Single(p => p.Name == "Event");
Assert.That(evt.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.Event" }));
Assert.That(evt.AddAccessor.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.add_Event" }));
Assert.That(evt.RemoveAccessor.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.remove_Event" }));
}
[Test]
public void EventAccessorsShouldBeReportedAsImplementingInterfaceAccessorsWhenCustomAccessorMethodsAreUsed() {
ITypeDefinition type = GetTypeDefinition(typeof(ClassThatImplementsEventWithCustomAccessors));
var evt = type.Events.Single(p => p.Name == "Event");
Assert.That(evt.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.Event" }));
Assert.That(evt.AddAccessor.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.add_Event" }));
Assert.That(evt.RemoveAccessor.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.remove_Event" }));
}
[Test]
public void ExplicitlyImplementedEventsShouldBeReportedAsBeingImplemented() {
ITypeDefinition type = GetTypeDefinition(typeof(ClassThatImplementsEventExplicitly));
var evt = type.Events.Single();
Assert.That(evt.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.Event" }));
Assert.That(evt.AddAccessor.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.add_Event" }));
Assert.That(evt.RemoveAccessor.ImplementedInterfaceMembers.Select(p => p.ReflectionName).ToList(), Is.EqualTo(new[] { "ICSharpCode.NRefactory.TypeSystem.TestCase.IHasEvent.remove_Event" }));
}
}
}

Loading…
Cancel
Save