Skip to content

Commit defddcc

Browse files
lukebuehleradamralph
authored andcommitted
made Namespaces collection immutable and relevant methods virtual #1040
1 parent 243f541 commit defddcc

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
@@ -47,7 +47,7 @@ public class ScriptExecutor : IScriptExecutor
4747

4848
public AssemblyReferences References { get; private set; }
4949

50-
public ICollection<string> Namespaces { get; private set; }
50+
public IReadOnlyCollection<string> Namespaces { get; private set; }
5151

5252
public ScriptPackSession ScriptPackSession { get; protected set; }
5353

@@ -75,33 +75,24 @@ public ScriptExecutor(
7575
Guard.AgainstNullArgument("composer", composer);
7676

7777
References = new AssemblyReferences(DefaultReferences);
78-
Namespaces = new Collection<string>();
79-
ImportNamespaces(DefaultNamespaces);
78+
Namespaces = new ReadOnlyCollection<string>(DefaultNamespaces);
8079
FileSystem = fileSystem;
8180
FilePreProcessor = filePreProcessor;
8281
ScriptEngine = scriptEngine;
8382
Logger = logger;
8483
ScriptLibraryComposer = composer;
8584
}
8685

87-
public void ImportNamespaces(params string[] namespaces)
86+
public virtual void ImportNamespaces(params string[] namespaces)
8887
{
8988
Guard.AgainstNullArgument("namespaces", namespaces);
90-
91-
foreach (var @namespace in namespaces)
92-
{
93-
Namespaces.Add(@namespace);
94-
}
89+
Namespaces = new ReadOnlyCollection<string>(Namespaces.Union(namespaces).ToArray());
9590
}
9691

97-
public void RemoveNamespaces(params string[] namespaces)
92+
public virtual void RemoveNamespaces(params string[] namespaces)
9893
{
9994
Guard.AgainstNullArgument("namespaces", namespaces);
100-
101-
foreach (var @namespace in namespaces)
102-
{
103-
Namespaces.Remove(@namespace);
104-
}
95+
Namespaces = new ReadOnlyCollection<string>(Namespaces.Except(namespaces).ToArray());
10596
}
10697

10798
public virtual void AddReferences(params Assembly[] assemblies)
@@ -151,9 +142,7 @@ public virtual void Initialize(
151142
public virtual void Reset()
152143
{
153144
References = new AssemblyReferences(DefaultReferences);
154-
Namespaces.Clear();
155-
ImportNamespaces(DefaultNamespaces);
156-
145+
Namespaces = new ReadOnlyCollection<string>(DefaultNamespaces);
157146
ScriptPackSession.State.Clear();
158147
}
159148

0 commit comments

Comments
 (0)