Skip to content

Commit 85edeee

Browse files
committed
minor refactor
1 parent 95b8b06 commit 85edeee

5 files changed

Lines changed: 22 additions & 33 deletions

File tree

com.unity.multiplayer.mlapi/Editor/CodeGen/CodeGenHelpers.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,26 +170,25 @@ public static void AddError(this List<DiagnosticMessage> diagnostics, SequencePo
170170
});
171171
}
172172

173-
internal static AssemblyDefinition AssemblyDefinitionFor(ICompiledAssembly compiledAssembly)
173+
public static AssemblyDefinition AssemblyDefinitionFor(ICompiledAssembly compiledAssembly)
174174
{
175-
var resolver = new PostProcessorAssemblyResolver(compiledAssembly);
175+
var assemblyResolver = new PostProcessorAssemblyResolver(compiledAssembly);
176176
var readerParameters = new ReaderParameters
177177
{
178-
SymbolStream = new MemoryStream(compiledAssembly.InMemoryAssembly.PdbData.ToArray()),
178+
SymbolStream = new MemoryStream(compiledAssembly.InMemoryAssembly.PdbData),
179179
SymbolReaderProvider = new PortablePdbReaderProvider(),
180-
AssemblyResolver = resolver,
180+
AssemblyResolver = assemblyResolver,
181181
ReflectionImporterProvider = new PostProcessorReflectionImporterProvider(),
182182
ReadingMode = ReadingMode.Immediate
183183
};
184184

185-
var peStream = new MemoryStream(compiledAssembly.InMemoryAssembly.PeData.ToArray());
186-
var assemblyDefinition = AssemblyDefinition.ReadAssembly(peStream, readerParameters);
185+
var assemblyDefinition = AssemblyDefinition.ReadAssembly(new MemoryStream(compiledAssembly.InMemoryAssembly.PeData), readerParameters);
187186

188187
//apparently, it will happen that when we ask to resolve a type that lives inside Unity.Entities, and we
189188
//are also postprocessing Unity.Entities, type resolving will fail, because we do not actually try to resolve
190189
//inside the assembly we are processing. Let's make sure we do that, so that we can use postprocessor features inside
191190
//unity.entities itself as well.
192-
resolver.AddAssemblyDefinitionBeingOperatedOn(assemblyDefinition);
191+
assemblyResolver.AddAssemblyDefinitionBeingOperatedOn(assemblyDefinition);
193192

194193
return assemblyDefinition;
195194
}

com.unity.multiplayer.mlapi/Editor/CodeGen/NetworkBehaviourILPP.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
2929
if (!WillProcess(compiledAssembly)) return null;
3030
_diagnostics.Clear();
3131

32-
3332
// read
3433
var assemblyDefinition = CodeGenHelpers.AssemblyDefinitionFor(compiledAssembly);
3534
if (assemblyDefinition == null)
@@ -38,7 +37,6 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
3837
return null;
3938
}
4039

41-
4240
// process
4341
var mainModule = assemblyDefinition.MainModule;
4442
if (mainModule != null)
@@ -55,7 +53,6 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
5553
}
5654
else _diagnostics.AddError($"Cannot get main module from assembly definition: {compiledAssembly.Name}");
5755

58-
5956
// write
6057
var pe = new MemoryStream();
6158
var pdb = new MemoryStream();

com.unity.multiplayer.mlapi/Editor/CodeGen/PostProcessorAssemblyResolver.cs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,32 @@
44
using System.Linq;
55
using System.Threading;
66
using Mono.Cecil;
7-
using Mono.Cecil.Cil;
87
using Unity.CompilationPipeline.Common.ILPostProcessing;
98

109
namespace MLAPI.Editor.CodeGen
1110
{
1211
class PostProcessorAssemblyResolver : IAssemblyResolver
1312
{
14-
private readonly string[] _references;
15-
Dictionary<string, AssemblyDefinition> _cache = new Dictionary<string, AssemblyDefinition>();
16-
private ICompiledAssembly _compiledAssembly;
13+
private readonly string[] _assemblyReferences;
14+
private readonly Dictionary<string, AssemblyDefinition> _assemblyCache = new Dictionary<string, AssemblyDefinition>();
15+
private readonly ICompiledAssembly _compiledAssembly;
1716
private AssemblyDefinition _selfAssembly;
1817

1918
public PostProcessorAssemblyResolver(ICompiledAssembly compiledAssembly)
2019
{
2120
_compiledAssembly = compiledAssembly;
22-
_references = compiledAssembly.References;
21+
_assemblyReferences = compiledAssembly.References;
2322
}
2423

2524
public void Dispose()
2625
{
2726
}
2827

29-
public AssemblyDefinition Resolve(AssemblyNameReference name)
30-
{
31-
return Resolve(name, new ReaderParameters(ReadingMode.Deferred));
32-
}
28+
public AssemblyDefinition Resolve(AssemblyNameReference name) => Resolve(name, new ReaderParameters(ReadingMode.Deferred));
3329

3430
public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters)
3531
{
36-
lock (_cache)
32+
lock (_assemblyCache)
3733
{
3834
if (name.Name == _compiledAssembly.Name)
3935
return _selfAssembly;
@@ -44,9 +40,9 @@ public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters p
4440

4541
var lastWriteTime = File.GetLastWriteTime(fileName);
4642

47-
var cacheKey = fileName + lastWriteTime.ToString();
43+
var cacheKey = fileName + lastWriteTime;
4844

49-
if (_cache.TryGetValue(cacheKey, out var result))
45+
if (_assemblyCache.TryGetValue(cacheKey, out var result))
5046
return result;
5147

5248
parameters.AssemblyResolver = this;
@@ -58,19 +54,19 @@ public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters p
5854
parameters.SymbolStream = MemoryStreamFor(pdb);
5955

6056
var assemblyDefinition = AssemblyDefinition.ReadAssembly(ms, parameters);
61-
_cache.Add(cacheKey, assemblyDefinition);
57+
_assemblyCache.Add(cacheKey, assemblyDefinition);
6258
return assemblyDefinition;
6359
}
6460
}
6561

6662
private string FindFile(AssemblyNameReference name)
6763
{
68-
var fileName = _references.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".dll");
64+
var fileName = _assemblyReferences.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".dll");
6965
if (fileName != null)
7066
return fileName;
7167

7268
// perhaps the type comes from an exe instead
73-
fileName = _references.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".exe");
69+
fileName = _assemblyReferences.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".exe");
7470
if (fileName != null)
7571
return fileName;
7672

@@ -81,7 +77,7 @@ private string FindFile(AssemblyNameReference name)
8177
//in the ILPostProcessing api. As a workaround, we rely on the fact here that the indirect references
8278
//are always located next to direct references, so we search in all directories of direct references we
8379
//got passed, and if we find the file in there, we resolve to it.
84-
foreach (var parentDir in _references.Select(Path.GetDirectoryName).Distinct())
80+
foreach (var parentDir in _assemblyReferences.Select(Path.GetDirectoryName).Distinct())
8581
{
8682
var candidate = Path.Combine(parentDir, name.Name + ".dll");
8783
if (File.Exists(candidate))
@@ -99,7 +95,7 @@ static MemoryStream MemoryStreamFor(string fileName)
9995
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
10096
{
10197
byteArray = new byte[fs.Length];
102-
var readLength = fs.Read(byteArray, 0, (int) fs.Length);
98+
var readLength = fs.Read(byteArray, 0, (int)fs.Length);
10399
if (readLength != fs.Length)
104100
throw new InvalidOperationException("File read length is not full length of file.");
105101
}

com.unity.multiplayer.mlapi/Editor/CodeGen/PostProcessorReflectionImporter.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace MLAPI.Editor.CodeGen
77
internal class PostProcessorReflectionImporter : DefaultReflectionImporter
88
{
99
private const string SystemPrivateCoreLib = "System.Private.CoreLib";
10-
private AssemblyNameReference _correctCorlib;
10+
private readonly AssemblyNameReference _correctCorlib;
1111

1212
public PostProcessorReflectionImporter(ModuleDefinition module) : base(module)
1313
{
@@ -16,10 +16,7 @@ public PostProcessorReflectionImporter(ModuleDefinition module) : base(module)
1616

1717
public override AssemblyNameReference ImportReference(AssemblyName reference)
1818
{
19-
if (_correctCorlib != null && reference.Name == SystemPrivateCoreLib)
20-
return _correctCorlib;
21-
22-
return base.ImportReference(reference);
19+
return _correctCorlib != null && reference.Name == SystemPrivateCoreLib ? _correctCorlib : base.ImportReference(reference);
2320
}
2421
}
2522
}

com.unity.multiplayer.mlapi/Editor/CodeGen/RuntimeAccessModifiersILPP.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
2020
if (!WillProcess(compiledAssembly)) return null;
2121
_diagnostics.Clear();
2222

23+
// read
2324
var assemblyDefinition = CodeGenHelpers.AssemblyDefinitionFor(compiledAssembly);
2425
if (assemblyDefinition == null)
2526
{
@@ -48,7 +49,6 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly)
4849
}
4950
else _diagnostics.AddError($"Cannot get main module from MLAPI Runtime assembly definition: {compiledAssembly.Name}");
5051

51-
5252
// write
5353
var pe = new MemoryStream();
5454
var pdb = new MemoryStream();

0 commit comments

Comments
 (0)