diff options
author | Lluis Sanchez Gual <lluis@novell.com> | 2011-08-16 17:35:06 +0400 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@novell.com> | 2011-08-16 17:35:06 +0400 |
commit | 613ed4c715bb501602b45f43bc863b51957c95c2 (patch) | |
tree | ebb06994f31bb1c8b56965120664585957456c2d /main/src | |
parent | f66a02eb44db4eeee4a7d99a99959a1808460e44 (diff) |
The Invariant policy set should not inherit from user settings
We now use a special class for storing the invariant policies which
does not inherit policies from the user defined settings.
Diffstat (limited to 'main/src')
4 files changed, 48 insertions, 25 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyBag.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyBag.cs index 9f9bb53d62..074bcc8d0d 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyBag.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyBag.cs @@ -53,10 +53,6 @@ namespace MonoDevelop.Projects.Policies public SolutionItem Owner { get; internal set; } - protected override bool InheritDefaultPolicies { - get { return true; } - } - public override bool IsRoot { get { return Owner == null || Owner.ParentFolder == null; } } diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyContainer.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyContainer.cs index 27c328a2f3..315aee9c65 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyContainer.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyContainer.cs @@ -58,16 +58,11 @@ namespace MonoDevelop.Projects.Policies if (policies.TryGetValue (typeof(T), null, out policy)) { if (!PolicyService.IsUndefinedPolicy (policy)) return (T)policy; - else if (InheritDefaultPolicies) - return PolicyService.GetDefaultPolicy<T> (); - else - return null; + return GetDefaultPolicy<T> (); } } - if (!InheritDefaultPolicies) - return null; - else if (IsRoot) - return PolicyService.GetDefaultPolicy<T> (); + if (IsRoot) + return GetDefaultPolicy<T> (); else return ParentPolicies.Get<T> (); } @@ -95,10 +90,7 @@ namespace MonoDevelop.Projects.Policies currentBag = currentBag.ParentPolicies; } } - if (InheritDefaultPolicies) - return PolicyService.GetDefaultPolicy<T>(scopes); - else - return null; + return GetDefaultPolicy<T>(scopes); } public void Set<T> (T value) where T : class, IEquatable<T>, new () @@ -364,18 +356,22 @@ namespace MonoDevelop.Projects.Policies #endregion - /// <summary> - /// When set to true, the container will return a default policy when requesting a - /// policy object that is not defined in the container. - /// </summary> - protected abstract bool InheritDefaultPolicies { get; } - protected virtual void OnPolicyChanged (Type policyType, string scope) { if (PolicyChanged != null) PolicyChanged (this, new PolicyChangedEventArgs (policyType, scope)); } + protected virtual T GetDefaultPolicy<T> () where T : class, IEquatable<T>, new () + { + return PolicyService.GetDefaultPolicy<T> (); + } + + protected virtual T GetDefaultPolicy<T> (IEnumerable<string> scopes) where T : class, IEquatable<T>, new () + { + return PolicyService.GetDefaultPolicy<T> (scopes); + } + public virtual bool ReadOnly { get; internal set; diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs index b5caf79e79..ff4a2e8f4e 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicyService.cs @@ -56,7 +56,7 @@ namespace MonoDevelop.Projects.Policies static PolicySet defaultPolicies; static PolicyBag defaultPolicyBag = new PolicyBag (); - static PolicyBag invariantPolicies = new PolicyBag (); + static InvariantPolicyBag invariantPolicies = new InvariantPolicyBag (); static PolicyService () { @@ -1355,4 +1355,29 @@ namespace MonoDevelop.Projects.Policies get { return scope; } } } + + class InvariantPolicyBag: PolicyContainer + { + public override bool IsRoot { + get { + return true; + } + } + + public override PolicyContainer ParentPolicies { + get { + return null; + } + } + + protected override T GetDefaultPolicy<T> () + { + return new T (); + } + + protected override T GetDefaultPolicy<T> (IEnumerable<string> scopes) + { + return new T (); + } + } }
\ No newline at end of file diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicySet.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicySet.cs index 9b6dc1a337..f7ad6ca61b 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicySet.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.Policies/PolicySet.cs @@ -76,8 +76,14 @@ namespace MonoDevelop.Projects.Policies get { return null; } } - protected override bool InheritDefaultPolicies { - get { return false; } + protected override T GetDefaultPolicy<T> () + { + return null; + } + + protected override T GetDefaultPolicy<T> (IEnumerable<string> scopes) + { + return null; } public string Name { get; set; } |