Skip to content

Commit f6b4c04

Browse files
committed
Making ICompilation 'Emit' path async
1 parent a4a4c5a commit f6b4c04

File tree

15 files changed

+44
-33
lines changed

15 files changed

+44
-33
lines changed

src/WebJobs.Script/Description/Compilation/ICompilation.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Collections.Immutable;
66
using System.Threading;
7+
using System.Threading.Tasks;
78
using Microsoft.CodeAnalysis;
89

910
namespace Microsoft.Azure.WebJobs.Script.Description
@@ -12,11 +13,11 @@ public interface ICompilation
1213
{
1314
ImmutableArray<Diagnostic> GetDiagnostics();
1415

15-
object Emit(CancellationToken cancellationToken);
16+
Task<object> EmitAsync(CancellationToken cancellationToken);
1617
}
1718

1819
public interface ICompilation<TOutput> : ICompilation
1920
{
20-
new TOutput Emit(CancellationToken cancellationToken);
21+
new Task<TOutput> EmitAsync(CancellationToken cancellationToken);
2122
}
2223
}

src/WebJobs.Script/Description/DotNet/Compilation/CSharp/CSharpCompilation.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System.Reflection;
1010
using System.Text;
1111
using System.Threading;
12+
using System.Threading.Tasks;
1213
using Microsoft.Azure.WebJobs.Script.Description.DotNet.CSharp.Analyzers;
1314
using Microsoft.CodeAnalysis;
1415
using Microsoft.CodeAnalysis.CSharp;
@@ -87,17 +88,17 @@ private static bool IsOrUsesAssemblyType(ITypeSymbol typeSymbol, IAssemblySymbol
8788
&& namedTypeSymbol.TypeArguments.Any(t => IsOrUsesAssemblyType(t, assemblySymbol));
8889
}
8990

90-
object ICompilation.Emit(CancellationToken cancellationToken) => Emit(cancellationToken);
91+
async Task<object> ICompilation.EmitAsync(CancellationToken cancellationToken) => await EmitAsync(cancellationToken);
9192

92-
public Assembly Emit(CancellationToken cancellationToken)
93+
public async Task<Assembly> EmitAsync(CancellationToken cancellationToken)
9394
{
9495
try
9596
{
9697
using (var assemblyStream = new MemoryStream())
9798
using (var pdbStream = new MemoryStream())
9899
{
99100
var compilationWithAnalyzers = _compilation.WithAnalyzers(GetAnalyzers());
100-
var diagnostics = compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync().Result;
101+
var diagnostics = await compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync();
101102
var emitOptions = new EmitOptions().WithDebugInformationFormat(PlatformHelper.IsMono ? DebugInformationFormat.PortablePdb : DebugInformationFormat.Pdb);
102103
var emitResult = compilationWithAnalyzers.Compilation.Emit(assemblyStream, pdbStream, options: emitOptions, cancellationToken: cancellationToken);
103104

src/WebJobs.Script/Description/DotNet/Compilation/FSharp/FSharpCompilation.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Linq;
88
using System.Reflection;
99
using System.Threading;
10+
using System.Threading.Tasks;
1011
using Microsoft.CodeAnalysis;
1112
using Microsoft.CodeAnalysis.Scripting;
1213
using Microsoft.CodeAnalysis.Text;
@@ -81,13 +82,13 @@ private static RefKind GetParameterRefKind(ParameterInfo x)
8182
return RefKind.None;
8283
}
8384

84-
object ICompilation.Emit(CancellationToken cancellationToken) => Emit(cancellationToken);
85+
async Task<object> ICompilation.EmitAsync(CancellationToken cancellationToken) => await EmitAsync(cancellationToken);
8586

86-
public Assembly Emit(CancellationToken cancellationToken)
87+
public Task<Assembly> EmitAsync(CancellationToken cancellationToken)
8788
{
8889
EnsureAssemblyOption();
8990

90-
return _assemblyOption.Value;
91+
return Task.FromResult(_assemblyOption.Value);
9192
}
9293

9394
private void EnsureAssemblyOption(bool includeDiagnostics = true)

src/WebJobs.Script/Description/DotNet/Compilation/Raw/RawAssemblyCompilation.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Reflection;
88
using System.Text.RegularExpressions;
99
using System.Threading;
10+
using System.Threading.Tasks;
1011
using Microsoft.CodeAnalysis;
1112

1213
namespace Microsoft.Azure.WebJobs.Script.Description
@@ -26,11 +27,11 @@ public RawAssemblyCompilation(string assemblyFilePath, string entryPointName)
2627

2728
public Assembly FunctionAssembly => _functionAssembly ?? (_functionAssembly = Assembly.LoadFrom(_assemblyFilePath));
2829

29-
object ICompilation.Emit(CancellationToken cancellationToken) => Emit(cancellationToken);
30+
async Task<object> ICompilation.EmitAsync(CancellationToken cancellationToken) => await EmitAsync(cancellationToken);
3031

31-
public Assembly Emit(CancellationToken cancellationToken)
32+
public Task<Assembly> EmitAsync(CancellationToken cancellationToken)
3233
{
33-
return FunctionAssembly;
34+
return Task.FromResult(FunctionAssembly);
3435
}
3536

3637
public ImmutableArray<Diagnostic> GetDiagnostics() => ImmutableArray<Diagnostic>.Empty;

src/WebJobs.Script/Description/DotNet/DotNetFunctionInvoker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ private async Task<MethodInfo> CreateFunctionTarget(CancellationToken cancellati
301301
{
302302
IDotNetCompilation compilation = await _compilationService.GetFunctionCompilationAsync(Metadata);
303303

304-
Assembly assembly = compilation.Emit(cancellationToken);
304+
Assembly assembly = await compilation.EmitAsync(cancellationToken);
305305
_assemblyLoader.CreateOrUpdateContext(Metadata, assembly, _metadataResolver, TraceWriter, Host.ScriptConfig.HostConfig.LoggerFactory);
306306

307307
FunctionSignature functionSignature = compilation.GetEntryPointSignature(_functionEntryPointResolver);

src/WebJobs.Script/Description/Node/Compilation/ConditionalJavaScriptCompilationService.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ public async Task<IJavaScriptCompilation> GetFunctionCompilationAsync(FunctionMe
4242
{
4343
IJavaScriptCompilation compilation = await _compilationService.GetFunctionCompilationAsync(functionMetadata);
4444

45-
await PersistCompilationResult(functionMetadata, compilation.Emit(CancellationToken.None), compilation.GetDiagnostics());
45+
string emitResult = await compilation.EmitAsync(CancellationToken.None);
46+
47+
await PersistCompilationResult(functionMetadata, emitResult, compilation.GetDiagnostics());
4648

4749
return compilation;
4850
}
@@ -150,9 +152,9 @@ public enum CompilationState
150152

151153
public ImmutableArray<Diagnostic> GetDiagnostics() => Diagnostics?.ToImmutableArray() ?? ImmutableArray<Diagnostic>.Empty;
152154

153-
public string Emit(CancellationToken cancellationToken) => EmitResult;
155+
public Task<string> EmitAsync(CancellationToken cancellationToken) => Task.FromResult(EmitResult);
154156

155-
object ICompilation.Emit(CancellationToken cancellationToken) => Emit(cancellationToken);
157+
async Task<object> ICompilation.EmitAsync(CancellationToken cancellationToken) => await EmitAsync(cancellationToken);
156158
}
157159
}
158160
}

src/WebJobs.Script/Description/Node/Compilation/Raw/RawJavaScriptCompilation.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Collections.Immutable;
66
using System.Threading;
7+
using System.Threading.Tasks;
78
using Microsoft.CodeAnalysis;
89

910
namespace Microsoft.Azure.WebJobs.Script.Description
@@ -21,8 +22,8 @@ public RawJavaScriptCompilation(string scriptFilePath)
2122

2223
public ImmutableArray<Diagnostic> GetDiagnostics() => ImmutableArray<Diagnostic>.Empty;
2324

24-
object ICompilation.Emit(CancellationToken cancellationToken) => Emit(cancellationToken);
25+
async Task<object> ICompilation.EmitAsync(CancellationToken cancellationToken) => await EmitAsync(cancellationToken);
2526

26-
public string Emit(CancellationToken cancellationToken) => _scriptFilePath;
27+
public Task<string> EmitAsync(CancellationToken cancellationToken) => Task.FromResult(_scriptFilePath);
2728
}
2829
}

src/WebJobs.Script/Description/Node/Compilation/TypeScript/TypeScriptCompilation.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,16 @@ public static async Task<TypeScriptCompilation> CompileAsync(string inputFile, T
4444

4545
public ImmutableArray<Diagnostic> GetDiagnostics() => ImmutableArray.Create(_diagnostics.ToArray());
4646

47-
object ICompilation.Emit(CancellationToken cancellationToken) => Emit(cancellationToken);
47+
async Task<object> ICompilation.EmitAsync(CancellationToken cancellationToken) => await EmitAsync(cancellationToken);
4848

49-
public string Emit(CancellationToken cancellationToken)
49+
public Task<string> EmitAsync(CancellationToken cancellationToken)
5050
{
5151
string relativeInputFilePath = FileUtility.GetRelativePath(_options.RootDir, _inputFilePath);
5252
string outputFileName = Path.ChangeExtension(relativeInputFilePath, ".js");
5353

54-
return Path.Combine(Path.GetDirectoryName(_inputFilePath), _options.OutDir, outputFileName);
54+
string scriptPath = Path.Combine(Path.GetDirectoryName(_inputFilePath), _options.OutDir, outputFileName);
55+
56+
return Task.FromResult(scriptPath);
5557
}
5658
}
5759
}

src/WebJobs.Script/Description/Node/NodeFunctionInvoker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ private async Task<ScriptFunc> CreateFunctionTarget(CancellationToken cancellati
132132
{
133133
IJavaScriptCompilation compilation = await CompileAndTraceAsync(LogTargets.System, suppressCompilationSummary: true);
134134

135-
string functionScriptPath = compilation.Emit(cancellationToken);
135+
string functionScriptPath = await compilation.EmitAsync(cancellationToken);
136136
string script = string.Format(CultureInfo.InvariantCulture, _functionTemplate, functionScriptPath.Replace('\\', '/'));
137137

138138
return Edge.Func(script);

test/WebJobs.Script.Tests.Integration/Properties/Resources.Designer.cs

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)