Skip to content

Commit eb3bddd

Browse files
authored
Merge pull request #1042 from adamralph/1040
made Namespaces collection immutable and relevant methods virtual #1040
2 parents a252cd4 + defddcc commit eb3bddd

2 files changed

Lines changed: 8 additions & 19 deletions

File tree

src/ScriptCs.Contracts/IScriptExecutor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public interface IScriptExecutor
77
{
88
AssemblyReferences References { get; }
99

10-
ICollection<string> Namespaces { get; }
10+
IReadOnlyCollection<string> Namespaces { get; }
1111

1212
IScriptEngine ScriptEngine { get; }
1313

src/ScriptCs.Core/ScriptExecutor.cs

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class ScriptExecutor : IScriptExecutor
5151

5252
public AssemblyReferences References { get; private set; }
5353

54-
public ICollection<string> Namespaces { get; private set; }
54+
public IReadOnlyCollection<string> Namespaces { get; private set; }
5555

5656
public ScriptPackSession ScriptPackSession { get; protected set; }
5757

@@ -97,8 +97,7 @@ public ScriptExecutor(
9797
Guard.AgainstNullArgument("composer", composer);
9898

9999
References = new AssemblyReferences(DefaultReferences);
100-
Namespaces = new Collection<string>();
101-
ImportNamespaces(DefaultNamespaces);
100+
Namespaces = new ReadOnlyCollection<string>(DefaultNamespaces);
102101
FileSystem = fileSystem;
103102
FilePreProcessor = filePreProcessor;
104103
ScriptEngine = scriptEngine;
@@ -109,24 +108,16 @@ public ScriptExecutor(
109108
ScriptLibraryComposer = composer;
110109
}
111110

112-
public void ImportNamespaces(params string[] namespaces)
111+
public virtual void ImportNamespaces(params string[] namespaces)
113112
{
114113
Guard.AgainstNullArgument("namespaces", namespaces);
115-
116-
foreach (var @namespace in namespaces)
117-
{
118-
Namespaces.Add(@namespace);
119-
}
114+
Namespaces = new ReadOnlyCollection<string>(Namespaces.Union(namespaces).ToArray());
120115
}
121116

122-
public void RemoveNamespaces(params string[] namespaces)
117+
public virtual void RemoveNamespaces(params string[] namespaces)
123118
{
124119
Guard.AgainstNullArgument("namespaces", namespaces);
125-
126-
foreach (var @namespace in namespaces)
127-
{
128-
Namespaces.Remove(@namespace);
129-
}
120+
Namespaces = new ReadOnlyCollection<string>(Namespaces.Except(namespaces).ToArray());
130121
}
131122

132123
public virtual void AddReferences(params Assembly[] assemblies)
@@ -176,9 +167,7 @@ public virtual void Initialize(
176167
public virtual void Reset()
177168
{
178169
References = new AssemblyReferences(DefaultReferences);
179-
Namespaces.Clear();
180-
ImportNamespaces(DefaultNamespaces);
181-
170+
Namespaces = new ReadOnlyCollection<string>(DefaultNamespaces);
182171
ScriptPackSession.State.Clear();
183172
}
184173

0 commit comments

Comments
 (0)