From 10f5730087e1a2d602ed90b19ec3cd8c7ad57425 Mon Sep 17 00:00:00 2001 From: Lukas Buhler Date: Thu, 7 May 2015 16:49:49 -0400 Subject: [PATCH 1/2] made Namespaces collection immutable and relevant methods virtual #1040 --- src/ScriptCs.Contracts/IScriptExecutor.cs | 2 +- src/ScriptCs.Core/ScriptExecutor.cs | 25 +++++++---------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/ScriptCs.Contracts/IScriptExecutor.cs b/src/ScriptCs.Contracts/IScriptExecutor.cs index 0dba0d22..fe9b992d 100644 --- a/src/ScriptCs.Contracts/IScriptExecutor.cs +++ b/src/ScriptCs.Contracts/IScriptExecutor.cs @@ -7,7 +7,7 @@ public interface IScriptExecutor { AssemblyReferences References { get; } - ICollection Namespaces { get; } + IReadOnlyCollection Namespaces { get; } IScriptEngine ScriptEngine { get; } diff --git a/src/ScriptCs.Core/ScriptExecutor.cs b/src/ScriptCs.Core/ScriptExecutor.cs index c72a26a7..dda03c75 100644 --- a/src/ScriptCs.Core/ScriptExecutor.cs +++ b/src/ScriptCs.Core/ScriptExecutor.cs @@ -47,7 +47,7 @@ public class ScriptExecutor : IScriptExecutor public AssemblyReferences References { get; private set; } - public ICollection Namespaces { get; private set; } + public IReadOnlyCollection Namespaces { get; private set; } public ScriptPackSession ScriptPackSession { get; protected set; } @@ -75,8 +75,7 @@ public ScriptExecutor( Guard.AgainstNullArgument("composer", composer); References = new AssemblyReferences(DefaultReferences); - Namespaces = new Collection(); - ImportNamespaces(DefaultNamespaces); + Namespaces = new ReadOnlyCollection(DefaultNamespaces); FileSystem = fileSystem; FilePreProcessor = filePreProcessor; ScriptEngine = scriptEngine; @@ -84,24 +83,16 @@ public ScriptExecutor( ScriptLibraryComposer = composer; } - public void ImportNamespaces(params string[] namespaces) + public virtual void ImportNamespaces(params string[] namespaces) { Guard.AgainstNullArgument("namespaces", namespaces); - - foreach (var @namespace in namespaces) - { - Namespaces.Add(@namespace); - } + Namespaces = new ReadOnlyCollection(Namespaces.Union(namespaces).ToArray()); } - public void RemoveNamespaces(params string[] namespaces) + public virtual void RemoveNamespaces(params string[] namespaces) { Guard.AgainstNullArgument("namespaces", namespaces); - - foreach (var @namespace in namespaces) - { - Namespaces.Remove(@namespace); - } + Namespaces = new ReadOnlyCollection(Namespaces.Except(namespaces).ToArray()); } public virtual void AddReferences(params Assembly[] assemblies) @@ -151,9 +142,7 @@ public virtual void Initialize( public virtual void Reset() { References = new AssemblyReferences(DefaultReferences); - Namespaces.Clear(); - ImportNamespaces(DefaultNamespaces); - + Namespaces = new ReadOnlyCollection(DefaultNamespaces); ScriptPackSession.State.Clear(); } From 8a8a1900281be04ddb9397e0422289730c1fd0ae Mon Sep 17 00:00:00 2001 From: Lukas Buhler Date: Thu, 7 May 2015 16:49:49 -0400 Subject: [PATCH 2/2] made Namespaces collection immutable and relevant methods virtual #1040 --- src/ScriptCs.Contracts/IScriptExecutor.cs | 2 +- src/ScriptCs.Core/ScriptExecutor.cs | 25 +++++++---------------- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/ScriptCs.Contracts/IScriptExecutor.cs b/src/ScriptCs.Contracts/IScriptExecutor.cs index 0dba0d22..fe9b992d 100644 --- a/src/ScriptCs.Contracts/IScriptExecutor.cs +++ b/src/ScriptCs.Contracts/IScriptExecutor.cs @@ -7,7 +7,7 @@ public interface IScriptExecutor { AssemblyReferences References { get; } - ICollection Namespaces { get; } + IReadOnlyCollection Namespaces { get; } IScriptEngine ScriptEngine { get; } diff --git a/src/ScriptCs.Core/ScriptExecutor.cs b/src/ScriptCs.Core/ScriptExecutor.cs index c72a26a7..dda03c75 100644 --- a/src/ScriptCs.Core/ScriptExecutor.cs +++ b/src/ScriptCs.Core/ScriptExecutor.cs @@ -47,7 +47,7 @@ public class ScriptExecutor : IScriptExecutor public AssemblyReferences References { get; private set; } - public ICollection Namespaces { get; private set; } + public IReadOnlyCollection Namespaces { get; private set; } public ScriptPackSession ScriptPackSession { get; protected set; } @@ -75,8 +75,7 @@ public ScriptExecutor( Guard.AgainstNullArgument("composer", composer); References = new AssemblyReferences(DefaultReferences); - Namespaces = new Collection(); - ImportNamespaces(DefaultNamespaces); + Namespaces = new ReadOnlyCollection(DefaultNamespaces); FileSystem = fileSystem; FilePreProcessor = filePreProcessor; ScriptEngine = scriptEngine; @@ -84,24 +83,16 @@ public ScriptExecutor( ScriptLibraryComposer = composer; } - public void ImportNamespaces(params string[] namespaces) + public virtual void ImportNamespaces(params string[] namespaces) { Guard.AgainstNullArgument("namespaces", namespaces); - - foreach (var @namespace in namespaces) - { - Namespaces.Add(@namespace); - } + Namespaces = new ReadOnlyCollection(Namespaces.Union(namespaces).ToArray()); } - public void RemoveNamespaces(params string[] namespaces) + public virtual void RemoveNamespaces(params string[] namespaces) { Guard.AgainstNullArgument("namespaces", namespaces); - - foreach (var @namespace in namespaces) - { - Namespaces.Remove(@namespace); - } + Namespaces = new ReadOnlyCollection(Namespaces.Except(namespaces).ToArray()); } public virtual void AddReferences(params Assembly[] assemblies) @@ -151,9 +142,7 @@ public virtual void Initialize( public virtual void Reset() { References = new AssemblyReferences(DefaultReferences); - Namespaces.Clear(); - ImportNamespaces(DefaultNamespaces); - + Namespaces = new ReadOnlyCollection(DefaultNamespaces); ScriptPackSession.State.Clear(); }