diff options
author | Daniel Grunwald <daniel@danielgrunwald.de> | 2015-05-30 20:30:12 +0300 |
---|---|---|
committer | Daniel Grunwald <daniel@danielgrunwald.de> | 2015-05-30 20:30:12 +0300 |
commit | 3af570c381d98b9560f38058c728e0a97d918b07 (patch) | |
tree | a4855138d00cc1f29076ed03fb2e0110c8b33664 /ICSharpCode.NRefactory | |
parent | 4637c1f67229a51b97e1f7fa4c02fd76180ad38d (diff) |
Fix accessibility of properties overriding just one accessor.
Diffstat (limited to 'ICSharpCode.NRefactory')
-rw-r--r-- | ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs | 14 | ||||
-rw-r--r-- | ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs | 24 |
2 files changed, 31 insertions, 7 deletions
diff --git a/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs b/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs index dfa2ba93..cefc1aa7 100644 --- a/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs +++ b/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs @@ -108,13 +108,13 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation public string ReflectionName { get { return unresolved.ReflectionName; } } public string Namespace { get { return unresolved.Namespace; } } - public Accessibility Accessibility { get { return unresolved.Accessibility; } } - public bool IsPrivate { get { return unresolved.IsPrivate; } } - public bool IsPublic { get { return unresolved.IsPublic; } } - public bool IsProtected { get { return unresolved.IsProtected; } } - public bool IsInternal { get { return unresolved.IsInternal; } } - public bool IsProtectedOrInternal { get { return unresolved.IsProtectedOrInternal; } } - public bool IsProtectedAndInternal { get { return unresolved.IsProtectedAndInternal; } } + public virtual Accessibility Accessibility { get { return unresolved.Accessibility; } } + public bool IsPrivate { get { return Accessibility == Accessibility.Private; } } + public bool IsPublic { get { return Accessibility == Accessibility.Public; } } + public bool IsProtected { get { return Accessibility == Accessibility.Protected; } } + public bool IsInternal { get { return Accessibility == Accessibility.Internal; } } + public bool IsProtectedOrInternal { get { return Accessibility == Accessibility.ProtectedOrInternal; } } + public bool IsProtectedAndInternal { get { return Accessibility == Accessibility.ProtectedAndInternal; } } public override string ToString() { diff --git a/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs b/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs index 953e0ffd..8dd3c4ee 100644 --- a/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs +++ b/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs @@ -29,6 +29,8 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation readonly IList<IParameter> parameters; IMethod getter; IMethod setter; + const Accessibility InvalidAccessibility = (Accessibility)0xff; + volatile Accessibility cachedAccessiblity = InvalidAccessibility; public DefaultResolvedProperty(IUnresolvedProperty unresolved, ITypeResolveContext parentContext) : base(unresolved, parentContext) @@ -41,6 +43,28 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation get { return parameters; } } + public override Accessibility Accessibility { + get { + var acc = cachedAccessiblity; + if (acc == InvalidAccessibility) + return cachedAccessiblity = ComputeAccessibility(); + else + return acc; + } + } + + Accessibility ComputeAccessibility() + { + var baseAcc = base.Accessibility; + if (IsOverride && !(CanGet && CanSet)) { + foreach (var baseMember in InheritanceHelper.GetBaseMembers(this, false)) { + if (!baseMember.IsOverride) + return baseMember.Accessibility; + } + } + return baseAcc; + } + public bool CanGet { get { return unresolved.CanGet; } } |