Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/NRefactory.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Grunwald <daniel@danielgrunwald.de>2015-05-30 20:30:12 +0300
committerDaniel Grunwald <daniel@danielgrunwald.de>2015-05-30 20:30:12 +0300
commit3af570c381d98b9560f38058c728e0a97d918b07 (patch)
treea4855138d00cc1f29076ed03fb2e0110c8b33664 /ICSharpCode.NRefactory
parent4637c1f67229a51b97e1f7fa4c02fd76180ad38d (diff)
Fix accessibility of properties overriding just one accessor.
Diffstat (limited to 'ICSharpCode.NRefactory')
-rw-r--r--ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedEntity.cs14
-rw-r--r--ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultResolvedProperty.cs24
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; }
}