From a2798aa7a7900a4e15683f1651e830242d5e1081 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 10 Jun 2012 10:27:48 +0200 Subject: [PATCH] Fixed resolving accessors. --- .../TypeSystem/IMethod.cs | 2 +- .../Implementation/DefaultUnresolvedMethod.cs | 27 +++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IMethod.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IMethod.cs index 844c810ecc..74a7cc6b0b 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IMethod.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IMethod.cs @@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.TypeSystem /// If this method is an accessor, returns a reference to the corresponding property/event. /// Otherwise, returns null. /// - IMemberReference AccessorOwner { get; } + IUnresolvedMember AccessorOwner { get; } /// /// Resolves the member. diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedMethod.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedMethod.cs index 8ec9e65727..8b0e16d345 100644 --- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedMethod.cs +++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedMethod.cs @@ -32,7 +32,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation IList returnTypeAttributes; IList typeParameters; IList parameters; - IMemberReference accessorOwner; + IUnresolvedMember accessorOwner; protected override void FreezeInternal() { @@ -126,7 +126,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation } } - public IMemberReference AccessorOwner { + public IUnresolvedMember AccessorOwner { get { return accessorOwner; } set { ThrowIfFrozen(); @@ -159,6 +159,29 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation public override IMember Resolve(ITypeResolveContext context) { + if (accessorOwner != null) { + var owner = accessorOwner.Resolve(context); + if (owner != null) { + IProperty p = owner as IProperty; + if (p != null) { + if (p.CanGet && p.Getter.Name == this.Name) + return p.Getter; + if (p.CanSet && p.Setter.Name == this.Name) + return p.Setter; + } + IEvent e = owner as IEvent; + if (e != null) { + if (e.CanAdd && e.AddAccessor.Name == this.Name) + return e.AddAccessor; + if (e.CanRemove && e.RemoveAccessor.Name == this.Name) + return e.RemoveAccessor; + if (e.CanInvoke && e.InvokeAccessor.Name == this.Name) + return e.InvokeAccessor; + } + } + return null; + } + ITypeReference interfaceTypeReference = null; if (this.IsExplicitInterfaceImplementation && this.ExplicitInterfaceImplementations.Count == 1) interfaceTypeReference = this.ExplicitInterfaceImplementations[0].DeclaringTypeReference;