Base:
method
WriteLine
System.IO.TextWriter.WriteLine(System.String)
710 references to WriteLine
Microsoft.AspNetCore.Http.RequestDelegateGenerator (229)
RequestDelegateGenerator.Emitter.cs (54)
26
codeWriter.
WriteLine
(location.GetInterceptsLocationAttributeSyntax());
29
codeWriter.
WriteLine
($"internal static RouteHandlerBuilder {endpoint.HttpMethod}{endpointWithLocations.Index}(");
31
codeWriter.
WriteLine
("this IEndpointRouteBuilder endpoints,");
35
codeWriter.
WriteLine
(@"[StringSyntax(""Route"")] string pattern,");
40
codeWriter.
WriteLine
("IEnumerable<string> httpMethods,");
42
codeWriter.
WriteLine
("Delegate handler)");
45
codeWriter.
WriteLine
("MetadataPopulator populateMetadata = (methodInfo, options) =>");
47
codeWriter.
WriteLine
(@"Debug.Assert(options != null, ""RequestDelegateFactoryOptions not found."");");
48
codeWriter.
WriteLine
(@"Debug.Assert(options.EndpointBuilder != null, ""EndpointBuilder not found."");");
49
codeWriter.
WriteLine
($"options.EndpointBuilder.Metadata.Add(new {RequestDelegateGeneratorSources.GeneratedCodeConstructor});");
51
codeWriter.
WriteLine
("return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };");
53
codeWriter.
WriteLine
("RequestDelegateFactoryFunc createRequestDelegate = (del, options, inferredMetadataResult) =>");
55
codeWriter.
WriteLine
(@"Debug.Assert(options != null, ""RequestDelegateFactoryOptions not found."");");
56
codeWriter.
WriteLine
(@"Debug.Assert(options.EndpointBuilder != null, ""EndpointBuilder not found."");");
57
codeWriter.
WriteLine
(@"Debug.Assert(options.EndpointBuilder.ApplicationServices != null, ""ApplicationServices not found."");");
58
codeWriter.
WriteLine
(@"Debug.Assert(options.EndpointBuilder.FilterFactories != null, ""FilterFactories not found."");");
59
codeWriter.
WriteLine
($"var handler = Cast(del, {endpoint.EmitHandlerDelegateType()} => throw null!);");
60
codeWriter.
WriteLine
("EndpointFilterDelegate? filteredInvocation = null;");
61
codeWriter.
WriteLine
("var serviceProvider = options.ServiceProvider ?? options.EndpointBuilder.ApplicationServices;");
68
codeWriter.
WriteLine
("var parameters = del.Method.GetParameters();");
71
codeWriter.
WriteLine
("if (options.EndpointBuilder.FilterFactories.Count > 0)");
73
codeWriter.
WriteLine
(endpoint.Response?.IsAwaitable == true
77
codeWriter.
WriteLine
("if (ic.HttpContext.Response.StatusCode == 400)");
79
codeWriter.
WriteLine
(endpoint.Response?.IsAwaitable == true
85
codeWriter.
WriteLine
("options.EndpointBuilder,");
86
codeWriter.
WriteLine
("handler.Method);");
93
codeWriter.
WriteLine
("RequestDelegate targetDelegate = filteredInvocation is null ? RequestHandler : RequestHandlerFiltered;");
94
codeWriter.
WriteLine
("var metadata = inferredMetadataResult?.EndpointMetadata ?? ReadOnlyCollection<object>.Empty;");
95
codeWriter.
WriteLine
("return new RequestDelegateResult(targetDelegate, metadata);");
97
codeWriter.
WriteLine
($"var castHandler = Cast(handler, {endpoint.EmitHandlerDelegateType()} => throw null!);");
98
codeWriter.
WriteLine
("return MapCore(");
100
codeWriter.
WriteLine
("endpoints,");
105
codeWriter.
WriteLine
("pattern,");
109
codeWriter.
WriteLine
($"{SymbolDisplay.FormatLiteral("{*path:nonfile}", true)},");
111
codeWriter.
WriteLine
("handler,");
112
codeWriter.
WriteLine
($"{endpoint.EmitVerb()},");
113
codeWriter.
WriteLine
("populateMetadata,");
114
codeWriter.
WriteLine
("createRequestDelegate,");
115
codeWriter.
WriteLine
("castHandler.Method);");
148
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.ResolveFromRouteOrQueryMethod);
153
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.TryResolveBodyAsyncMethod);
158
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.TryResolveFormAsyncMethod);
163
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.BindAsyncMethod);
168
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.ResolveJsonBodyOrServiceMethod);
173
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.TryParseExplicitMethod);
178
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.ExecuteAsyncExplicitMethod);
183
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.PopulateEndpointMetadataMethod);
188
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.PopulateEndpointParameterMetadataMethod);
207
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.AntiforgeryMetadataClass);
212
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.DisableCookieRedirectMetadataClass);
217
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.ContentTypeConstantsType);
222
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.PropertyAsParameterInfoClass);
227
codeWriter.
WriteLine
(RequestDelegateGeneratorSources.ParameterBindingMetadataClass);
248
codeWriter.
WriteLine
(endpoint);
RequestDelegateGeneratorSources.cs (1)
655
codeWriter.
WriteLine
($$"""private static readonly string[] {{verb}}Verb = new[] { global::Microsoft.AspNetCore.Http.HttpMethods.{{verb}} };""");
src\Shared\RoslynUtils\CodeWriter.cs (4)
17
this.
WriteLine
("{");
24
this.
WriteLine
("}");
30
this.
WriteLine
("},");
36
this.
WriteLine
("};");
StaticRouteHandlerModel\Emitters\EndpointEmitter.cs (4)
89
codeWriter.
WriteLine
($@"GeneratedRouteBuilderExtensionsCore.ResolveFromRouteOrQuery(""{parameterName}"", options.RouteParameterNames);");
116
codeWriter.
WriteLine
("var serviceProviderIsService = serviceProvider?.GetService<IServiceProviderIsService>();");
121
codeWriter.
WriteLine
($"ResolveJsonBodyOrService<{parameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)}>(logOrThrowExceptionHelper, {SymbolDisplay.FormatLiteral(shortParameterTypeName, true)}, {SymbolDisplay.FormatLiteral(parameter.SymbolName, true)}, jsonSerializerOptions, serviceProviderIsService);");
130
codeWriter.
WriteLine
("var logOrThrowExceptionHelper = new LogOrThrowExceptionHelper(serviceProvider, options);");
StaticRouteHandlerModel\Emitters\EndpointJsonPreparationEmitter.cs (6)
11
codeWriter.
WriteLine
("var jsonOptions = serviceProvider?.GetService<IOptions<JsonOptions>>()?.Value ?? FallbackJsonOptions;");
12
codeWriter.
WriteLine
("var jsonSerializerOptions = jsonOptions.SerializerOptions;");
13
codeWriter.
WriteLine
("jsonSerializerOptions.MakeReadOnly();");
14
codeWriter.
WriteLine
($"var objectJsonTypeInfo = (JsonTypeInfo<object?>)jsonSerializerOptions.GetTypeInfo(typeof(object));");
19
codeWriter.
WriteLine
($"var responseJsonTypeInfo = (JsonTypeInfo<{responseType.ToDisplayString(NullableFlowState.MaybeNull, EmitterConstants.DisplayFormat)}>)jsonSerializerOptions.GetTypeInfo(typeof({typeName}));");
41
codeWriter.
WriteLine
($"var {parameter.SymbolName}_JsonTypeInfo = (JsonTypeInfo<{typeName}>)jsonSerializerOptions.GetTypeInfo(typeof({parameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}));");
StaticRouteHandlerModel\Emitters\EndpointParameterEmitter.cs (95)
15
=> codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = {endpointParameter.AssigningCode};");
19
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
27
codeWriter.
WriteLine
($"var {endpointParameter.EmitAssigningCodeResult()} = {assigningCode};");
35
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.ToArray();");
39
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.Count > 0 ? (string?){endpointParameter.EmitAssigningCodeResult()} : null;");
43
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()};");
47
codeWriter.
WriteLine
($"if (StringValues.IsNullOrEmpty({endpointParameter.EmitAssigningCodeResult()}))");
49
codeWriter.
WriteLine
("wasParamCheckFailure = true;");
50
codeWriter.
WriteLine
($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});");
52
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = (string?){endpointParameter.EmitAssigningCodeResult()};");
60
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
70
codeWriter.
WriteLine
($"var {resolveFormResult} = {assigningCode};");
73
codeWriter.
WriteLine
($"if (!{resolveFormResult}.Item1)");
75
codeWriter.
WriteLine
("return;");
80
codeWriter.
WriteLine
($"var {endpointParameter.EmitAssigningCodeResult()} = {endpointParameter.AssigningCode};");
83
codeWriter.
WriteLine
($"if ({endpointParameter.EmitAssigningCodeResult()} == null)");
85
codeWriter.
WriteLine
("wasParamCheckFailure = true;");
86
codeWriter.
WriteLine
($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});");
89
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()};");
101
codeWriter.
WriteLine
($"{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)} {endpointParameter.EmitHandlerArgument()} = {createArray};");
103
codeWriter.
WriteLine
($"for (var i = 0; i < {endpointParameter.EmitTempArgument()}.Length; i++)");
105
codeWriter.
WriteLine
($"var element = {endpointParameter.EmitTempArgument()}[i];");
108
codeWriter.
WriteLine
($$"""if (!{{endpointParameter.PreferredTryParseInvocation("element", "parsed_element")}})""");
110
codeWriter.
WriteLine
("if (!string.IsNullOrEmpty(element))");
120
codeWriter.
WriteLine
($"{endpointParameter.EmitHandlerArgument()}[i] = string.IsNullOrEmpty(element) ? null! : parsed_element!;");
124
codeWriter.
WriteLine
($"{endpointParameter.EmitHandlerArgument()}[i] = parsed_element!;");
131
codeWriter.
WriteLine
($"{endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)} {endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitTempArgument()}!;");
144
codeWriter.
WriteLine
($"""{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)} {output_argument} = default;""");
145
codeWriter.
WriteLine
($"""if ({endpointParameter.PreferredTryParseInvocation(temp_argument, temp_argument_parsed_non_nullable)})""");
147
codeWriter.
WriteLine
($"""{output_argument} = {temp_argument_parsed_non_nullable};""");
149
codeWriter.
WriteLine
($"""else if (string.IsNullOrEmpty({temp_argument}))""");
151
codeWriter.
WriteLine
($"""{output_argument} = {endpointParameter.DefaultValue};""");
153
codeWriter.
WriteLine
("else");
155
codeWriter.
WriteLine
("wasParamCheckFailure = true;");
161
codeWriter.
WriteLine
($$"""if (!{{endpointParameter.PreferredTryParseInvocation(temp_argument, output_argument)}})""");
163
codeWriter.
WriteLine
($"if (!string.IsNullOrEmpty({temp_argument}))");
170
codeWriter.
WriteLine
($"{endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)} {endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitParsedTempArgument()}!;");
175
codeWriter.
WriteLine
($"{endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)} {endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitTempArgument()}!;");
182
writer.
WriteLine
("wasParamCheckFailure = true;");
183
writer.
WriteLine
($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(parameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(parameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(parameter.ToMessageString(), true)});");
187
writer.
WriteLine
($@"logOrThrowExceptionHelper.ParameterBindingFailed({SymbolDisplay.FormatLiteral(parameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(parameter.SymbolName, true)}, {inputArgument});");
188
writer.
WriteLine
("wasParamCheckFailure = true;");
195
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
199
codeWriter.
WriteLine
($"""if (options?.RouteParameterNames?.Contains("{endpointParameter.LookupName}", StringComparer.OrdinalIgnoreCase) != true)""");
201
codeWriter.
WriteLine
($$"""throw new InvalidOperationException($"'{{endpointParameter.LookupName}}' is not a route parameter.");""");
205
codeWriter.
WriteLine
($"var {endpointParameter.EmitAssigningCodeResult()} = {assigningCode};");
209
codeWriter.
WriteLine
($"if ({endpointParameter.EmitAssigningCodeResult()} == null)");
211
codeWriter.
WriteLine
("wasParamCheckFailure = true;");
212
codeWriter.
WriteLine
($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});");
216
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = (string?){endpointParameter.EmitAssigningCodeResult()};");
222
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
225
codeWriter.
WriteLine
($"var {endpointParameter.EmitAssigningCodeResult()} = {parameterName}_RouteOrQueryResolver(httpContext);");
229
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.ToArray();");
236
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.Count > 0 ? (string?){endpointParameter.EmitAssigningCodeResult()} : {fallback};");
240
codeWriter.
WriteLine
($"if ({endpointParameter.EmitAssigningCodeResult()} is StringValues {{ Count: 0 }})");
242
codeWriter.
WriteLine
("wasParamCheckFailure = true;");
243
codeWriter.
WriteLine
($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});");
245
codeWriter.
WriteLine
($"var {endpointParameter.EmitTempArgument()} = (string?){endpointParameter.EmitAssigningCodeResult()};");
254
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
261
codeWriter.
WriteLine
($"var {resolveBodyResult} = {assigningCode};");
262
codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = {resolveBodyResult}.Item2;");
267
codeWriter.
WriteLine
($"if (!{resolveBodyResult}.Item1)");
269
codeWriter.
WriteLine
("return;");
276
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
283
codeWriter.
WriteLine
($"var {resolveJsonBodyOrServiceResult} = {assigningCode};");
287
codeWriter.
WriteLine
($"if (!{resolveJsonBodyOrServiceResult}.Item1)");
289
codeWriter.
WriteLine
("return;");
295
codeWriter.
WriteLine
(!endpointParameter.IsOptional
304
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
307
codeWriter.
WriteLine
($"{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)} {endpointParameter.EmitHandlerArgument()} = null!;");
308
codeWriter.
WriteLine
("if (options.DisableInferBodyFromParameters)");
310
codeWriter.
WriteLine
($"""var {endpointParameter.EmitAssigningCodeResult()} = httpContext.Request.Query["{endpointParameter.LookupName}"];""");
311
codeWriter.
WriteLine
($"""{endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitAssigningCodeResult()}!;""");
313
codeWriter.
WriteLine
("else");
322
codeWriter.
WriteLine
($"var {endpointParameter.SymbolName}_JsonTypeInfo = (JsonTypeInfo<{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)}>)jsonOptions.SerializerOptions.GetTypeInfo(typeof({endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}));");
323
codeWriter.
WriteLine
($"var {resolveBodyResult} = {assigningCode};");
324
codeWriter.
WriteLine
($"{endpointParameter.EmitHandlerArgument()} = {resolveBodyResult}.Item2!;");
329
codeWriter.
WriteLine
($"if (!{resolveBodyResult}.Item1)");
331
codeWriter.
WriteLine
("return;");
356
codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = await BindAsync<{unwrappedTypeString}>(httpContext, {resolveParameterInfo});");
359
codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = await {bindMethodReceiverTypeString}.BindAsync(httpContext, {resolveParameterInfo});");
362
codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = await {bindMethodReceiverTypeString}.BindAsync(httpContext);");
375
codeWriter.
WriteLine
(endpointParameter.Type.IsValueType && endpointParameter.GetBindAsyncReturnType().IsNullableOfT()
379
codeWriter.
WriteLine
($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});");
380
codeWriter.
WriteLine
("wasParamCheckFailure = true;");
381
codeWriter.
WriteLine
($"{endpointParameter.EmitHandlerArgument()} = default!;");
388
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
397
codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = {assigningCode};");
402
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
404
codeWriter.
WriteLine
("if (httpContext.RequestServices.GetService<IServiceProviderIsService>() is not IServiceProviderIsKeyedService)");
406
codeWriter.
WriteLine
(@"throw new InvalidOperationException($""Unable to resolve service referenced by {nameof(FromKeyedServicesAttribute)}. The service provider doesn't support keyed services."");");
412
codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = {assigningCode};");
417
codeWriter.
WriteLine
(endpointParameter.EmitParameterDiagnosticComment());
418
codeWriter.
WriteLine
(endpointParameter.EndpointParameters?.EmitParameterPreparation(baseIndent: codeWriter.Indent, emitterContext: emitterContext));
419
codeWriter.
WriteLine
($"var {endpointParameter.EmitHandlerArgument()} = {endpointParameter.AssigningCode};");
StaticRouteHandlerModel\StaticRouteHandlerModel.Emitter.cs (65)
70
codeWriter.
WriteLine
(endpoint.IsAwaitable ? "async Task RequestHandler(HttpContext httpContext)" : "Task RequestHandler(HttpContext httpContext)");
72
codeWriter.
WriteLine
("var wasParamCheckFailure = false;");
79
codeWriter.
WriteLine
("if (wasParamCheckFailure)");
81
codeWriter.
WriteLine
("httpContext.Response.StatusCode = 400;");
82
codeWriter.
WriteLine
(endpoint.IsAwaitable ? "return;" : "return Task.CompletedTask;");
90
codeWriter.
WriteLine
($"var task = handler({endpoint.EmitArgumentList()});");
94
codeWriter.
WriteLine
("if (task == null)");
96
codeWriter.
WriteLine
("""throw new InvalidOperationException("The Task returned by the Delegate must not be null.");""");
103
codeWriter.
WriteLine
(endpoint.Response.IsAwaitable ? "await task;" : $"handler({endpoint.EmitArgumentList()});");
113
codeWriter.
WriteLine
("return Task.CompletedTask;");
125
codeWriter.
WriteLine
("if (result is string)");
127
codeWriter.
WriteLine
($@"httpContext.Response.ContentType ??= ""text/plain; charset=utf-8"";");
129
codeWriter.
WriteLine
("else");
131
codeWriter.
WriteLine
($@"httpContext.Response.ContentType ??= ""application/json; charset=utf-8"";");
142
codeWriter.
WriteLine
("if (result == null)");
144
codeWriter.
WriteLine
("""throw new InvalidOperationException("The IResult returned by the Delegate must not be null.");""");
146
codeWriter.
WriteLine
($"{returnOrAwait} GeneratedRouteBuilderExtensionsCore.ExecuteAsyncExplicit(result, httpContext);");
150
codeWriter.
WriteLine
($"{returnOrAwait} httpContext.Response.WriteAsync(result);");
154
codeWriter.
WriteLine
($"{returnOrAwait} GeneratedRouteBuilderExtensionsCore.ExecuteReturnAsync(result, httpContext, objectJsonTypeInfo);");
158
codeWriter.
WriteLine
($"{returnOrAwait} {endpointResponse.EmitJsonResponse()}");
162
codeWriter.
WriteLine
($"{returnOrAwait} Task.CompletedTask;");
166
codeWriter.
WriteLine
($"{returnOrAwait} httpContext.Response.WriteAsync(result);");
180
codeWriter.
WriteLine
("async Task RequestHandlerFiltered(HttpContext httpContext)");
182
codeWriter.
WriteLine
("var wasParamCheckFailure = false;");
189
codeWriter.
WriteLine
("if (wasParamCheckFailure)");
191
codeWriter.
WriteLine
("httpContext.Response.StatusCode = 400;");
193
codeWriter.
WriteLine
($"var result = await filteredInvocation({invocationCreator}{invocationGenericArgs}(httpContext{argumentList}));");
194
codeWriter.
WriteLine
("if (result is not null)");
196
codeWriter.
WriteLine
("await GeneratedRouteBuilderExtensionsCore.ExecuteReturnAsync(result, httpContext, objectJsonTypeInfo);");
216
codeWriter.
WriteLine
($"options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(string), contentTypes: GeneratedMetadataConstants.PlaintextContentType));");
220
codeWriter.
WriteLine
($$"""options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof({{responseType.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}}), contentTypes: GeneratedMetadataConstants.JsonContentType));""");
221
codeWriter.
WriteLine
("DisableCookieRedirectMetadata.AddMetadataIfMissing(options.EndpointBuilder);");
234
codeWriter.
WriteLine
($"PopulateMetadataForEndpoint<{responseType.ToDisplayString(EmitterConstants.DisplayFormat)}>(methodInfo, options.EndpointBuilder);");
241
codeWriter.
WriteLine
("var parameterInfos = methodInfo.GetParameters();");
271
codeWriter.
WriteLine
($"var {parameter.SymbolName}_ParameterInfo = {resolveParameterInfo};");
272
codeWriter.
WriteLine
($"PopulateMetadataForParameter<{parameterType.ToDisplayString(EmitterConstants.DisplayFormat)}>({parameter.SymbolName}_ParameterInfo, options.EndpointBuilder);");
277
codeWriter.
WriteLine
($"PopulateMetadataForEndpoint<{parameterType.ToDisplayString(EmitterConstants.DisplayFormat)}>(methodInfo, options.EndpointBuilder);");
289
codeWriter.
WriteLine
("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(contentTypes: GeneratedMetadataConstants.FormFileContentType));");
293
codeWriter.
WriteLine
("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(contentTypes: GeneratedMetadataConstants.FormContentType));");
317
codeWriter.
WriteLine
($$"""options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(type: typeof({{explicitBodyParameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}}), isOptional: {{(explicitBodyParameter.IsOptional ? "true" : "false")}}, contentTypes: GeneratedMetadataConstants.JsonContentType));""");
321
codeWriter.
WriteLine
("var serviceProvider = options.ServiceProvider ?? options.EndpointBuilder.ApplicationServices;");
322
codeWriter.
WriteLine
($"var serviceProviderIsService = serviceProvider.GetRequiredService<IServiceProviderIsService>();");
324
codeWriter.
WriteLine
("var jsonBodyOrServiceTypeTuples = new (bool, Type)[] {");
326
codeWriter.
WriteLine
("#nullable disable");
329
codeWriter.
WriteLine
($$"""({{(parameter.IsOptional ? "true" : "false")}}, typeof({{parameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}})),""");
331
codeWriter.
WriteLine
("#nullable enable");
333
codeWriter.
WriteLine
("};");
334
codeWriter.
WriteLine
("foreach (var (isOptional, type) in jsonBodyOrServiceTypeTuples)");
336
codeWriter.
WriteLine
("if (!serviceProviderIsService.IsService(type))");
338
codeWriter.
WriteLine
("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(type: type, isOptional: isOptional, contentTypes: GeneratedMetadataConstants.JsonContentType));");
339
codeWriter.
WriteLine
("options.EndpointBuilder.Metadata.Add(DisableCookieRedirectMetadata.Instance);");
340
codeWriter.
WriteLine
("break;");
346
codeWriter.
WriteLine
("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(contentTypes: GeneratedMetadataConstants.JsonContentType));");
347
codeWriter.
WriteLine
("options.EndpointBuilder.Metadata.Add(DisableCookieRedirectMetadata.Instance);");
357
codeWriter.
WriteLine
("options.EndpointBuilder.Metadata.Add(AntiforgeryMetadata.ValidationRequired);");
383
codeWriter.
WriteLine
("var parameters = methodInfo.GetParameters();");
397
codeWriter.
WriteLine
($"options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata({parameterName}, {parameterInfo}, hasTryParse: {hasTryParse}, hasBindAsync: {hasBindAsync}, isOptional: {isOptional}));");
414
codeWriter.
WriteLine
(endpoint.Response?.IsAwaitable == true
417
codeWriter.
WriteLine
(endpoint.Response?.IsAwaitable == true
423
codeWriter.
WriteLine
($"var task = handler({endpoint.EmitFilteredArgumentList()});");
426
codeWriter.
WriteLine
("if (task == null)");
428
codeWriter.
WriteLine
("return (object?)Results.Empty;");
431
codeWriter.
WriteLine
($"var result = await task;");
432
codeWriter.
WriteLine
("return (object?)result;");
436
codeWriter.
WriteLine
($"return ValueTask.FromResult<object?>(handler({endpoint.EmitFilteredArgumentList()}));");
Microsoft.AspNetCore.OpenApi.SourceGenerators (7)
src\Shared\RoslynUtils\CodeWriter.cs (4)
17
this.
WriteLine
("{");
24
this.
WriteLine
("}");
30
this.
WriteLine
("},");
36
this.
WriteLine
("};");
XmlCommentGenerator.Emitter.cs (3)
680
codeWriter.
WriteLine
(location.GetInterceptsLocationAttributeSyntax());
683
codeWriter.
WriteLine
(GetAddOpenApiInterceptor(source.Variant));
696
codeWriter.
WriteLine
($"cache.Add({FormatStringForCode(memberKey)}, {EmitSourceGeneratedXmlComment(comment)});");
Microsoft.Extensions.Validation.ValidationsGenerator (18)
Emitters\ValidationsGenerator.Emitter.cs (14)
212
cw.
WriteLine
($"if (type == typeof({typeName}))");
214
cw.
WriteLine
($"validatableInfo = new GeneratedValidatableTypeInfo(");
216
cw.
WriteLine
($"type: typeof({typeName}),");
219
cw.
WriteLine
("members: []");
223
cw.
WriteLine
("members: [");
230
cw.
WriteLine
("]");
233
cw.
WriteLine
(");");
234
cw.
WriteLine
("return true;");
242
cw.
WriteLine
("new GeneratedValidatablePropertyInfo(");
244
cw.
WriteLine
($"containingType: typeof({member.ContainingType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}),");
245
cw.
WriteLine
($"propertyType: typeof({member.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}),");
246
cw.
WriteLine
($"name: \"{member.Name}\",");
247
cw.
WriteLine
($"displayName: \"{member.DisplayName}\"");
249
cw.
WriteLine
("),");
src\Shared\RoslynUtils\CodeWriter.cs (4)
17
this.
WriteLine
("{");
24
this.
WriteLine
("}");
30
this.
WriteLine
("},");
36
this.
WriteLine
("};");
Microsoft.Interop.ComInterfaceGenerator (47)
ComClassGenerator.cs (14)
52
writer.
WriteLine
("// <auto-generated />");
54
writer.
WriteLine
($"file sealed unsafe class {ClassInfoTypeName} : global::System.Runtime.InteropServices.Marshalling.IComExposedClass");
57
writer.
WriteLine
("private static volatile global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry* s_vtables;");
59
writer.
WriteLine
("public static global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry* GetComInterfaceEntries(out int count)");
62
writer.
WriteLine
($"count = {implementedInterfaces.Length};");
63
writer.
WriteLine
("if (s_vtables == null)");
66
writer.
WriteLine
($"global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry* vtables = (global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry*)global::System.Runtime.CompilerServices.RuntimeHelpers.AllocateTypeAssociatedMemory(typeof({ClassInfoTypeName}), sizeof(global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry) * {implementedInterfaces.Length});");
67
writer.
WriteLine
("global::System.Runtime.InteropServices.Marshalling.IIUnknownDerivedDetails details;");
73
writer.
WriteLine
($"details = global::System.Runtime.InteropServices.Marshalling.StrategyBasedComWrappers.DefaultIUnknownInterfaceDetailsStrategy.GetIUnknownDerivedDetails(typeof({ifaceName}).TypeHandle);");
74
writer.
WriteLine
($"vtables[{i}] = new() {{ IID = details.Iid, Vtable = (nint)details.ManagedVirtualMethodTable }};");
78
writer.
WriteLine
("s_vtables = vtables;");
82
writer.
WriteLine
("return s_vtables;");
92
writer.
WriteLine
($"[global::System.Runtime.InteropServices.Marshalling.ComExposedClassAttribute<{ClassInfoTypeName}>]");
93
writer.
WriteLine
($"{string.Join(" ", classSyntax.Modifiers)} class {classSyntax.Identifier}{classSyntax.TypeParameters} {{ }}");
ComInterfaceGenerator.cs (33)
138
writer.
WriteLine
("// <auto-generated />");
139
writer.
WriteLine
("#pragma warning disable CS0612, CS0618, CS0649, CS1591"); // Suppress warnings about [Obsolete], "lack of assignment", and missing XML documentation in generated code.
149
writer.
WriteLine
("#pragma warning disable CA2256");
471
writer.
WriteLine
("[global::System.Runtime.InteropServices.StructLayoutAttribute(global::System.Runtime.InteropServices.LayoutKind.Sequential)]");
472
writer.
WriteLine
("file unsafe struct InterfaceImplementationVtable");
475
writer.
WriteLine
("public delegate* unmanaged[MemberFunction]<void*, global::System.Guid*, void**, int> QueryInterface_0;");
476
writer.
WriteLine
("public delegate* unmanaged[MemberFunction]<void*, uint> AddRef_1;");
477
writer.
WriteLine
("public delegate* unmanaged[MemberFunction]<void*, uint> Release_2;");
486
writer.
WriteLine
($"public {functionPointerType.NormalizeWhitespace()} {inheritedMethod.MethodInfo.MethodName}_{inheritedMethod.GenerationContext.VtableIndexData.Index};");
498
writer.
WriteLine
($"public {functionPointerType.NormalizeWhitespace()} {declaredMethod.MethodInfo.MethodName}_{declaredMethod.GenerationContext.VtableIndexData.Index};");
507
writer.
WriteLine
("file unsafe sealed class InterfaceInformation : global::System.Runtime.InteropServices.Marshalling.IIUnknownInterfaceType");
510
writer.
WriteLine
($"public static global::System.Guid Iid {{ get; }} = new([{string.Join(", ", interfaceInfo.InterfaceId.ToByteArray())}]);");
511
writer.
WriteLine
($"public static void** ManagedVirtualMethodTable => {(interfaceInfo.Options.HasFlag(ComInterfaceOptions.ManagedObjectWrapper) ? "(void**)global::System.Runtime.CompilerServices.Unsafe.AsPointer(in InterfaceImplementation.Vtable)" : "null")};");
518
writer.
WriteLine
("[global::System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute]");
519
writer.
WriteLine
($"file unsafe interface InterfaceImplementation : {data.Interface.Info.Type.FullTypeName}");
525
writer.
WriteLine
("[global::System.Runtime.CompilerServices.FixedAddressValueTypeAttribute]");
526
writer.
WriteLine
("public static readonly InterfaceImplementationVtable Vtable;");
528
writer.
WriteLine
("static InterfaceImplementation()");
534
writer.
WriteLine
("global::System.Runtime.InteropServices.NativeMemory.Copy(");
536
writer.
WriteLine
($"global::System.Runtime.InteropServices.Marshalling.StrategyBasedComWrappers.DefaultIUnknownInterfaceDetailsStrategy.GetIUnknownDerivedDetails(typeof({baseInterface.Info.Type.FullTypeName}).TypeHandle).ManagedVirtualMethodTable,");
537
writer.
WriteLine
("global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable),");
538
writer.
WriteLine
($"(nuint)(sizeof(void*) * {data.BaseVTableSize}));");
544
writer.
WriteLine
("global::System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl(");
546
writer.
WriteLine
("out *(nint*)&((InterfaceImplementationVtable*)global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable))->QueryInterface_0,");
547
writer.
WriteLine
("out *(nint*)&((InterfaceImplementationVtable*)global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable))->AddRef_1,");
548
writer.
WriteLine
("out *(nint*)&((InterfaceImplementationVtable*)global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable))->Release_2);");
557
writer.
WriteLine
($"Vtable.{declaredMethodContext.MethodInfo.MethodName}_{declaredMethodContext.GenerationContext.VtableIndexData.Index} = &ABI_{((SourceAvailableIncrementalMethodStubGenerationContext)declaredMethodContext.GenerationContext).StubMethodSyntaxTemplate.Identifier};");
606
writer.
WriteLine
(" => throw new global::System.Diagnostics.UnreachableException();");
619
writer.
WriteLine
("[global::System.Runtime.InteropServices.Marshalling.IUnknownDerivedAttribute<InterfaceInformation, InterfaceImplementation>]");
620
writer.
WriteLine
($"{string.Join(" ", syntax.Modifiers.AddToModifiers(SyntaxKind.UnsafeKeyword))} {syntax.TypeKind.GetDeclarationKeyword()} {syntax.Identifier}{syntax.TypeParameters}");
631
writer.
WriteLine
(additionalAttr.NormalizeWhitespace().ToString());
636
writer.
WriteLine
($"[{attrInfo.Type}({string.Join(", ", attrInfo.Arguments)})]");
642
writer.
WriteLine
($"({string.Join(", ", sigContext.ManagedParameters.Select(mp => $"{(mp.IsByRef ? $"{MarshallerHelpers.GetManagedArgumentRefKindKeyword(mp)} " : "")}{mp.InstanceIdentifier}"))});");
Microsoft.Interop.SourceGeneration (2)
ContainingSyntaxContext.cs (2)
158
writer.
WriteLine
($"namespace {ContainingNamespace}");
172
writer.
WriteLine
($"{string.Join(" ", syntax.Modifiers.AddToModifiers(SyntaxKind.UnsafeKeyword))} {syntax.TypeKind.GetDeclarationKeyword()} {syntax.Identifier}{syntax.TypeParameters}");
Microsoft.Maui.Controls.BindingSourceGen (1)
BindingCodeWriter.cs (1)
435
private void AppendLine(string line) => _indentedTextWriter.
WriteLine
(line);
Microsoft.ML.Core (4)
Utilities\CmdIndenter.cs (4)
45
itw.
WriteLine
(tokens[i++]);
58
itw.
WriteLine
("{");
68
itw.
WriteLine
("}");
74
itw.
WriteLine
(tokens[i++]);
Microsoft.ML.Maml (7)
HelpCommand.cs (7)
117
writer.
WriteLine
("Listing component kinds so ignoring specified component");
119
writer.
WriteLine
("Listing component kinds so ignoring specified kind");
243
writer.
WriteLine
(CmdParser.ArgumentsUsage(_env, args.GetType(), args, false, columns));
258
writer.
WriteLine
("Available commands:");
333
writer.
WriteLine
("Available component kinds:");
337
writer.
WriteLine
(sig);
364
writer.
WriteLine
("Summary:");
Microsoft.ML.Predictor.Tests (7)
CmdLine\CmdIndenterTest.cs (2)
84
wrt.
WriteLine
(CmdIndenter.GetIndentedCommandLine(input));
89
wrt.
WriteLine
("Unknown Exception!");
CmdLine\CmdLine.cs (5)
102
wrt.
WriteLine
("Usage:");
103
wrt.
WriteLine
(CmdParser.ArgumentsUsage(env, defaults.GetType(), defaults, false, 200));
118
wrt.
WriteLine
("*** Failed!");
129
wrt.
WriteLine
("*** BUG: parsing result of GetSettings failed!");
391
wrt.
WriteLine
("Unknown Exception!");
Microsoft.ML.Tests (2)
ExpressionLanguageTests\ExpressionLanguageTests.cs (2)
198
wrt.
WriteLine
("Compiling succeeded.");
417
wrt.
WriteLine
(err.GetMessage());
System.CodeDom (23)
Microsoft\CSharp\CSharpCodeGenerator.cs (23)
202
private void ContinueOnNewLine(string st) => Output.
WriteLine
(st);
223
Output.
WriteLine
(" {");
458
Output.
WriteLine
(e.Value);
1050
Output.
WriteLine
(e.Value);
1100
Output.
WriteLine
("#line default");
1101
Output.
WriteLine
("#line hidden");
1482
Output.
WriteLine
("get;");
1498
Output.
WriteLine
("set;");
1765
Output.
WriteLine
(" : ");
1777
Output.
WriteLine
(" : ");
1912
Output.
WriteLine
(");");
2424
Output.
WriteLine
("//------------------------------------------------------------------------------");
2426
Output.
WriteLine
(SR.AutoGen_Comment_Line1);
2428
Output.
WriteLine
(SR.AutoGen_Comment_Line2);
2429
Output.
WriteLine
("//");
2431
Output.
WriteLine
(SR.AutoGen_Comment_Line4);
2433
Output.
WriteLine
(SR.AutoGen_Comment_Line5);
2435
Output.
WriteLine
(SR.AutoGen_Comment_Line1);
2436
Output.
WriteLine
("//------------------------------------------------------------------------------");
2522
Output.
WriteLine
("\"");
2530
Output.
WriteLine
(regionDirective.RegionText);
2534
Output.
WriteLine
("#endregion");
2882
Output.
WriteLine
(" {");
System.Text.RegularExpressions.Generator (363)
RegexGenerator.cs (20)
177
writer.
WriteLine
(header);
243
writer.
WriteLine
($"namespace {GeneratedNamespace}");
244
writer.
WriteLine
($"{{");
249
writer.
WriteLine
($" using System;");
250
writer.
WriteLine
($" using System.Buffers;");
251
writer.
WriteLine
($" using System.CodeDom.Compiler;");
252
writer.
WriteLine
($" using System.Collections;");
253
writer.
WriteLine
($" using System.ComponentModel;");
254
writer.
WriteLine
($" using System.Globalization;");
255
writer.
WriteLine
($" using System.Runtime.CompilerServices;");
256
writer.
WriteLine
($" using System.Text.RegularExpressions;");
257
writer.
WriteLine
($" using System.Threading;");
258
writer.
WriteLine
($"");
287
writer.
WriteLine
($"/// <summary>Helper methods used by generated <see cref=\"Regex\"/>-derived implementations.</summary>");
288
writer.
WriteLine
($"[{s_generatedCodeAttribute}]");
289
writer.
WriteLine
($"file static class {HelpersTypeName}");
290
writer.
WriteLine
($"{{");
303
writer.
WriteLine
(value);
307
writer.
WriteLine
($"}}");
311
writer.
WriteLine
($"}}");
RegexGenerator.Emitter.cs (343)
67
writer.
WriteLine
($"namespace {parent.Namespace}");
68
writer.
WriteLine
("{");
81
writer.
WriteLine
($"{parentClasses.Pop()}");
82
writer.
WriteLine
("{");
87
writer.
WriteLine
($"/// <remarks>");
88
writer.
WriteLine
($"/// Pattern:<br/>");
89
writer.
WriteLine
($"/// <code>{EscapeXmlComment(regexMethod.Pattern)}</code><br/>");
92
writer.
WriteLine
($"/// Options:<br/>");
93
writer.
WriteLine
($"/// <code>{Literal(regexMethod.Options)}</code><br/>");
95
writer.
WriteLine
($"/// Explanation:<br/>");
96
writer.
WriteLine
($"/// <code>");
98
writer.
WriteLine
($"/// </code>");
99
writer.
WriteLine
($"/// </remarks>");
100
writer.
WriteLine
($"[global::System.CodeDom.Compiler.{s_generatedCodeAttribute}]");
106
writer.
WriteLine
($" => global::{GeneratedNamespace}.{regexMethod.GeneratedName}.Instance;");
112
writer.
WriteLine
("}");
124
writer.
WriteLine
($"/// <summary>Caches a <see cref=\"Regex\"/> instance for the {rm.MemberName} method.</summary>");
129
writer.
WriteLine
($"/// <summary>This class supports generated regexes and should not be used by other code directly.</summary>");
131
writer.
WriteLine
($"/// <remarks>A custom Regex-derived type could not be generated because {reason}.</remarks>");
132
writer.
WriteLine
($"[{s_generatedCodeAttribute}]");
133
writer.
WriteLine
($"{visibility} sealed class {rm.GeneratedName} : Regex");
134
writer.
WriteLine
($"{{");
135
writer.
WriteLine
($" /// <summary>Cached, thread-safe singleton instance.</summary>");
137
writer.
WriteLine
(
141
writer.
WriteLine
($"}}");
154
writer.
WriteLine
($"/// <summary>Custom <see cref=\"Regex\"/>-derived type for the {rm.MemberName} method.</summary>");
155
writer.
WriteLine
($"[{s_generatedCodeAttribute}]");
158
writer.
WriteLine
($"[SkipLocalsInit]");
160
writer.
WriteLine
($"file sealed class {rm.GeneratedName} : Regex");
161
writer.
WriteLine
($"{{");
162
writer.
WriteLine
($" /// <summary>Cached, thread-safe singleton instance.</summary>");
163
writer.
WriteLine
($" internal static readonly {rm.GeneratedName} Instance = new();");
164
writer.
WriteLine
($"");
165
writer.
WriteLine
($" /// <summary>Initializes the instance.</summary>");
166
writer.
WriteLine
($" private {rm.GeneratedName}()");
167
writer.
WriteLine
($" {{");
168
writer.
WriteLine
($" base.pattern = {Literal(rm.Pattern)};");
169
writer.
WriteLine
($" base.roptions = {Literal(rm.Options)};");
172
writer.
WriteLine
($" base.internalMatchTimeout = {GetTimeoutExpression(rm.MatchTimeout.Value)};");
176
writer.
WriteLine
($" ValidateMatchTimeout({HelpersTypeName}.{DefaultTimeoutFieldName});");
177
writer.
WriteLine
($" base.internalMatchTimeout = {HelpersTypeName}.{DefaultTimeoutFieldName};");
179
writer.
WriteLine
($" base.factory = new RunnerFactory();");
184
writer.
WriteLine
($" }};");
190
writer.
WriteLine
($" }};");
202
writer.
WriteLine
($" }};");
204
writer.
WriteLine
($" base.capsize = {rm.Tree.CaptureCount};");
205
writer.
WriteLine
($" }}");
206
writer.
WriteLine
(runnerFactoryImplementation);
207
writer.
WriteLine
($"}}");
238
writer.
WriteLine
($"unchecked");
239
writer.
WriteLine
($"{{");
249
writer.
WriteLine
($"}}");
253
writer.
WriteLine
($"/// <summary>Provides a factory for creating <see cref=\"RegexRunner\"/> instances to be used by methods on <see cref=\"Regex\"/>.</summary>");
254
writer.
WriteLine
($"private sealed class RunnerFactory : RegexRunnerFactory");
255
writer.
WriteLine
($"{{");
256
writer.
WriteLine
($" /// <summary>Creates an instance of a <see cref=\"RegexRunner\"/> used by methods on <see cref=\"Regex\"/>.</summary>");
257
writer.
WriteLine
($" protected override RegexRunner CreateInstance() => new Runner();");
259
writer.
WriteLine
($" /// <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>");
260
writer.
WriteLine
($" private sealed class Runner : RegexRunner");
261
writer.
WriteLine
($" {{");
282
writer.
WriteLine
($" /// <summary>Scan the <paramref name=\"inputSpan\"/> starting from base.runtextstart for the next match.</summary>");
283
writer.
WriteLine
($" /// <param name=\"inputSpan\">The text being scanned by the regular expression.</param>");
284
writer.
WriteLine
($" protected override void Scan(ReadOnlySpan<char> inputSpan)");
285
writer.
WriteLine
($" {{");
291
writer.
WriteLine
($" }}");
295
writer.
WriteLine
($" /// <summary>Search <paramref name=\"inputSpan\"/> starting from base.runtextpos for the next location a match could possibly start.</summary>");
296
writer.
WriteLine
($" /// <param name=\"inputSpan\">The text being scanned by the regular expression.</param>");
297
writer.
WriteLine
($" /// <returns>true if a possible match was found; false if no more matches are possible.</returns>");
298
writer.
WriteLine
($" private bool TryFindNextPossibleStartingPosition(ReadOnlySpan<char> inputSpan)");
299
writer.
WriteLine
($" {{");
305
writer.
WriteLine
($" }}");
310
writer.
WriteLine
($" /// <summary>Determine whether <paramref name=\"inputSpan\"/> at base.runtextpos is a match for the regular expression.</summary>");
311
writer.
WriteLine
($" /// <param name=\"inputSpan\">The text being scanned by the regular expression.</param>");
312
writer.
WriteLine
($" /// <returns>true if the regular expression matches at the current position; otherwise, false.</returns>");
313
writer.
WriteLine
($" private bool TryMatchAtCurrentPosition(ReadOnlySpan<char> inputSpan)");
314
writer.
WriteLine
($" {{");
320
writer.
WriteLine
($" }}");
322
writer.
WriteLine
($" }}");
323
writer.
WriteLine
($"}}");
765
writer.
WriteLine
("// The pattern matches the empty string.");
766
writer.
WriteLine
($"int pos = base.runtextpos;");
767
writer.
WriteLine
($"base.Capture(0, pos, pos);");
773
writer.
WriteLine
("// The pattern never matches anything.");
782
writer.
WriteLine
("// The search in TryFindNextPossibleStartingPosition performed the entire match.");
783
writer.
WriteLine
($"int start = base.runtextpos;");
784
writer.
WriteLine
($"int end = base.runtextpos = start {(!rtl ? "+" : "-")} {(root.Kind == RegexNodeKind.Multi ? root.Str!.Length : 1)};");
785
writer.
WriteLine
($"base.Capture(0, start, end);");
797
writer.
WriteLine
("// The pattern is anchored. Validate the current position and try to match at it only.");
800
writer.
WriteLine
($"base.runtextpos = {(!rtl ? "inputSpan.Length" : "0")};");
815
writer.
WriteLine
("// Search until we can't find a valid starting position, we find a match, or we reach the end of the input.");
819
writer.
WriteLine
("TryFindNextPossibleStartingPosition(inputSpan) &&");
822
writer.
WriteLine
("!TryMatchAtCurrentPosition(inputSpan) &&");
823
writer.
WriteLine
($" base.runtextpos != {(!rtl ? "inputSpan.Length" : "0")})");
826
writer.
WriteLine
($"base.runtextpos{(!rtl ? "++" : "--")};");
850
writer.
WriteLine
("int pos = base.runtextpos;");
868
writer.
WriteLine
(minRequiredLength == 1 ?
922
writer.
WriteLine
("return true;");
934
writer.
WriteLine
("// No match found.");
937
writer.
WriteLine
($"{NoMatchFound}:");
939
writer.
WriteLine
($"base.runtextpos = {(!rtl ? "inputSpan.Length" : "0")};");
940
writer.
WriteLine
("return false;");
948
void Goto(string label) => writer.
WriteLine
($"goto {label};");
964
writer.
WriteLine
($"// The pattern leads with a beginning (\\A) anchor and has a trailing end (\\z) anchor, and any possible match is exactly {minRequiredLength} characters.");
967
writer.
WriteLine
("return true;");
972
writer.
WriteLine
("// The pattern leads with a beginning (\\A) anchor.");
977
writer.
WriteLine
("return true;");
988
writer.
WriteLine
(".");
994
writer.
WriteLine
("return true;");
999
writer.
WriteLine
("// The pattern leads with an end (\\Z) anchor.");
1004
writer.
WriteLine
("base.runtextpos = inputSpan.Length - 1;");
1006
writer.
WriteLine
("return true;");
1011
writer.
WriteLine
("// The pattern leads with an end (\\z) anchor.");
1016
writer.
WriteLine
("base.runtextpos = inputSpan.Length;");
1018
writer.
WriteLine
("return true;");
1023
writer.
WriteLine
("// The pattern leads with a beginning (\\A) anchor when processed right to left.");
1029
writer.
WriteLine
("base.runtextpos = 0;");
1031
writer.
WriteLine
("return true;");
1036
writer.
WriteLine
("// The pattern leads with an end (\\Z) anchor when processed right to left.");
1041
writer.
WriteLine
("return true;");
1046
writer.
WriteLine
("// The pattern leads with an end (\\z) anchor when processed right to left.");
1051
writer.
WriteLine
("return true;");
1057
writer.
WriteLine
($"// The pattern has a trailing end (\\Z) anchor, and any possible match is exactly {regexTree.FindOptimizations.MinRequiredLength} characters.");
1060
writer.
WriteLine
($"base.runtextpos = inputSpan.Length - {regexTree.FindOptimizations.MinRequiredLength + 1};");
1062
writer.
WriteLine
("return true;");
1068
writer.
WriteLine
($"// The pattern has a trailing end (\\z) anchor, and any possible match is exactly {regexTree.FindOptimizations.MinRequiredLength} characters.");
1071
writer.
WriteLine
($"base.runtextpos = inputSpan.Length - {regexTree.FindOptimizations.MinRequiredLength};");
1073
writer.
WriteLine
("return true;");
1087
writer.
WriteLine
($"// The pattern has a leading beginning-of-line anchor.");
1090
writer.
WriteLine
("int newlinePos = inputSpan.Slice(pos).IndexOf('\\n');");
1096
writer.
WriteLine
("pos += newlinePos + 1;");
1110
writer.
WriteLine
("base.runtextpos = pos;");
1119
writer.
WriteLine
($"// The pattern has a trailing end (\\z) anchor, and any possible match is no more than {maxLength} characters.");
1122
writer.
WriteLine
($"pos = inputSpan.Length - {maxLength};");
1128
writer.
WriteLine
($"// The pattern has a trailing end (\\Z) anchor, and any possible match is no more than {maxLength} characters.");
1131
writer.
WriteLine
($"pos = inputSpan.Length - {maxLength + 1};");
1192
writer.
WriteLine
($"// The pattern has the literal {Literal(substring)} {offsetDescription}. Find the next occurrence.");
1193
writer.
WriteLine
($"// If it can't be found, there's no match.");
1194
writer.
WriteLine
($"int i = inputSpan.Slice(pos{offset}).IndexOfAny({HelpersTypeName}.{fieldName});");
1197
writer.
WriteLine
("base.runtextpos = pos + i;");
1198
writer.
WriteLine
("return true;");
1249
writer.
WriteLine
($"// The pattern has multiple strings that could begin the match. Search for any of them.");
1250
writer.
WriteLine
($"// If none can be found, there's no match.");
1251
writer.
WriteLine
($"int i = inputSpan.Slice(pos).IndexOfAny({HelpersTypeName}.{fieldName});");
1254
writer.
WriteLine
("base.runtextpos = pos + i;");
1255
writer.
WriteLine
("return true;");
1264
writer.
WriteLine
($"// The pattern begins with a literal {Literal(prefix)}. Find the next occurrence right-to-left.");
1265
writer.
WriteLine
($"// If it can't be found, there's no match.");
1266
writer.
WriteLine
($"pos = inputSpan.Slice(0, pos).LastIndexOf({Literal(prefix)});");
1269
writer.
WriteLine
($"base.runtextpos = pos + {prefix.Length};");
1270
writer.
WriteLine
($"return true;");
1285
writer.
WriteLine
(primarySet.Distance == 0 ?
1288
writer.
WriteLine
($"// Find the next occurrence. If it can't be found, there's no match.");
1304
writer.
WriteLine
("ReadOnlySpan<char> span = inputSpan.Slice(pos);");
1377
writer.
WriteLine
($"int indexOfPos = {indexOf};");
1383
writer.
WriteLine
("i += indexOfPos;");
1398
writer.
WriteLine
($"// The primary set being searched for was found. {numRemainingSets} more set{(numRemainingSets > 1 ? "s" : "")} will be checked so as");
1399
writer.
WriteLine
($"// to minimize the number of places TryMatchAtCurrentPosition is run unnecessarily.");
1400
writer.
WriteLine
($"// Make sure {(numRemainingSets > 1 ? "they fit" : "it fits")} in the remainder of the input.");
1412
writer.
WriteLine
($"int i = {indexOf};");
1415
writer.
WriteLine
("base.runtextpos = pos + i;");
1416
writer.
WriteLine
("return true;");
1444
writer.
WriteLine
(" &&");
1448
writer.
WriteLine
(")");
1454
writer.
WriteLine
("base.runtextpos = pos + i;");
1455
writer.
WriteLine
("return true;");
1471
writer.
WriteLine
($"// The pattern begins with {DescribeSet(set.Set)}.");
1472
writer.
WriteLine
($"// Find the next occurrence. If it can't be found, there's no match.");
1477
writer.
WriteLine
($"pos = inputSpan.Slice(0, pos).LastIndexOf({Literal(set.Chars[0])});");
1480
writer.
WriteLine
("base.runtextpos = pos + 1;");
1481
writer.
WriteLine
("return true;");
1490
writer.
WriteLine
("base.runtextpos = pos + 1;");
1491
writer.
WriteLine
("return true;");
1510
writer.
WriteLine
(
1514
writer.
WriteLine
($"// Search for the literal, and then walk backwards to the beginning of the loop.");
1526
writer.
WriteLine
($"ReadOnlySpan<char> slice = inputSpan.Slice(pos);");
1531
writer.
WriteLine
(
1546
writer.
WriteLine
("break;");
1556
writer.
WriteLine
("int prev = i - 1;");
1559
writer.
WriteLine
("prev--;");
1569
writer.
WriteLine
("pos += i + 1;");
1570
writer.
WriteLine
("continue;");
1578
writer.
WriteLine
("base.runtextpos = pos + prev + 1;");
1579
writer.
WriteLine
("base.runtrackpos = pos + i;");
1580
writer.
WriteLine
("return true;");
1647
writer.
WriteLine
("int pos = base.runtextpos;");
1648
writer.
WriteLine
($"int matchStart = pos;");
1681
writer.
WriteLine
("// The input matched.");
1686
writer.
WriteLine
("base.runtextpos = pos;");
1687
writer.
WriteLine
("base.Capture(0, matchStart, pos);");
1688
writer.
WriteLine
("return true;");
1703
writer.
WriteLine
(line);
1722
void MarkLabel(string label, bool emitSemicolon = true) => writer.
WriteLine
($"{label}:{(emitSemicolon ? ";" : "")}");
1739
writer.
WriteLine
("return false; // The input didn't match.");
1743
writer.
WriteLine
($"goto {label};");
1750
writer.
WriteLine
(clause);
1763
writer.
WriteLine
($"{sliceSpan} = inputSpan.Slice(pos);");
1898
writer.
WriteLine
($"case {string.Join(" or ", setChars.Slice(0, numChars).ToArray().Select(Literal))}:");
1902
writer.
WriteLine
($"case {Literal(startingLiteralNode.FirstCharOfOneOrMulti())}:");
1965
writer.
WriteLine
($"break;");
2000
writer.
WriteLine
($"{startingPos} = pos;");
2004
writer.
WriteLine
($"int {startingPos} = pos;");
2035
writer.
WriteLine
($"{startingCapturePos} = base.Crawlpos();");
2039
writer.
WriteLine
($"int {startingCapturePos} = base.Crawlpos();");
2110
writer.
WriteLine
($"{currentBranch} = {i};");
2139
writer.
WriteLine
($"pos = {startingPos};");
2219
writer.
WriteLine
($"// If the {DescribeCapture(node.M, rm)} hasn't matched, the backreference matches with RegexOptions.ECMAScript rules.");
2227
writer.
WriteLine
($"// If the {DescribeCapture(node.M, rm)} hasn't matched, the backreference doesn't match.");
2238
writer.
WriteLine
("// Get the captured text. If it doesn't match at the current position, the backreference doesn't match.");
2241
writer.
WriteLine
($"matchLength = base.MatchLength({capnum});");
2247
writer.
WriteLine
($"if ({sliceSpan}.Length < matchLength || ");
2254
writer.
WriteLine
($"pos += matchLength;");
2258
writer.
WriteLine
($"if (pos < matchLength || ");
2265
writer.
WriteLine
($"pos -= matchLength;");
2297
writer.
WriteLine
($"// The {DescribeCapture(node.M, rm)} captured a value. Match the first branch.");
2307
writer.
WriteLine
($"// Otherwise, match the second branch.");
2329
writer.
WriteLine
($"int {resumeAt};");
2355
writer.
WriteLine
($"{resumeAt} = 0;");
2377
writer.
WriteLine
($"{resumeAt} = 1;");
2387
writer.
WriteLine
($"{resumeAt} = 2;");
2480
writer.
WriteLine
($"int {resumeAt} = 0;");
2493
writer.
WriteLine
($"int {startingCapturePos} = base.Crawlpos();");
2504
writer.
WriteLine
($"int {startingPos} = pos;");
2510
writer.
WriteLine
("// Condition:");
2519
writer.
WriteLine
("// Condition matched:");
2520
writer.
WriteLine
($"pos = {startingPos};");
2532
writer.
WriteLine
($"{resumeAt} = 0;");
2539
writer.
WriteLine
("// Condition did not match:");
2541
writer.
WriteLine
($"pos = {startingPos};");
2561
writer.
WriteLine
($"{resumeAt} = 1;");
2571
writer.
WriteLine
($"{resumeAt} = 2;");
2639
writer.
WriteLine
($"int {startingPos} = pos;");
2644
writer.
WriteLine
($"{startingPos} = pos;");
2658
writer.
WriteLine
($"base.Capture({capnum}, {startingPos}, pos);");
2668
writer.
WriteLine
($"base.TransferCapture({capnum.ToString(CultureInfo.InvariantCulture)}, {uncapnum}, {startingPos}, pos);");
2736
writer.
WriteLine
($"int {startingPos} = pos;");
2752
writer.
WriteLine
($"pos = {startingPos};");
2780
writer.
WriteLine
($"int {startingPos} = pos;");
2810
writer.
WriteLine
($"{capturePos} = base.Crawlpos();");
2825
writer.
WriteLine
("stackpos--;");
2835
writer.
WriteLine
($"pos = {startingPos};");
2867
writer.
WriteLine
("// Skip loop already matched in TryFindNextPossibleStartingPosition.");
2868
writer.
WriteLine
("pos = base.runtrackpos;");
2915
writer.
WriteLine
($"// {DescribeNode(node, rm)}");
3043
writer.
WriteLine
($"int {startingStackpos} = stackpos;");
3051
writer.
WriteLine
($"stackpos = {startingStackpos};");
3065
writer.
WriteLine
("base.runtextpos = pos;");
3099
writer.
WriteLine
(prevDescription is not null ? $" || // {prevDescription}" : " ||");
3145
writer.
WriteLine
(prevDescription is not null ? $") // {prevDescription}" : ")");
3239
writer.
WriteLine
("pos--;");
3438
writer.
WriteLine
($"{startingPos} = pos;");
3445
writer.
WriteLine
($"{endingPos} = pos;");
3495
writer.
WriteLine
($"{endingPos}--;");
3514
writer.
WriteLine
($"pos = {endingPos};");
3522
writer.
WriteLine
($"{endingPos} = 0;");
3526
writer.
WriteLine
($"if ({startingPos} >= {endingPos} ||");
3537
writer.
WriteLine
($"{endingPos} += {startingPos};");
3538
writer.
WriteLine
($"pos = {endingPos};");
3547
writer.
WriteLine
(!rtl ? $"pos = --{endingPos};" : $"pos = ++{endingPos};");
3571
writer.
WriteLine
($"{capturePos} = base.Crawlpos();");
3619
writer.
WriteLine
($"{iterationCount} = 0;");
3634
writer.
WriteLine
($"{startingPos} = pos;");
3661
writer.
WriteLine
($"{iterationCount}++;");
3670
writer.
WriteLine
($"pos = {startingPos};");
3699
writer.
WriteLine
(overlap ?
3706
writer.
WriteLine
((overlap, literal.SetChars.Length) switch
3719
writer.
WriteLine
(overlap ?
3726
writer.
WriteLine
($"{startingPos} = {sliceSpan}.IndexOfAnyInRange({Literal(literal.Range.LowInclusive)}, {Literal(literal.Range.HighInclusive)});");
3743
writer.
WriteLine
($"pos += {startingPos};");
3755
writer.
WriteLine
($"{startingPos} = {sliceSpan}.{indexOfExpr};");
3760
writer.
WriteLine
($"pos += {startingPos};");
3766
writer.
WriteLine
($"{startingPos} = pos;");
3779
writer.
WriteLine
($"{capturePos} = base.Crawlpos();");
3855
writer.
WriteLine
($"{iterationCount} = 0;");
3868
writer.
WriteLine
($"{startingPos} = {sawEmpty} = 0; // the lazy loop may match empty iterations");
3904
writer.
WriteLine
($"{startingPos} = pos;");
3911
writer.
WriteLine
($"{iterationCount}++;");
3936
writer.
WriteLine
($"// The lazy loop requires a minimum of {minIterations} iterations. If that many haven't yet matched, loop now.");
3947
writer.
WriteLine
("// If the iteration successfully matched zero-length input, record that an empty iteration was seen.");
3950
writer.
WriteLine
($"{sawEmpty} = 1; // true");
3963
writer.
WriteLine
("// The lazy loop iteration failed to match.");
3969
writer.
WriteLine
($"{iterationCount}--;");
3988
writer.
WriteLine
(entriesPerIteration > 1 ?
3998
writer.
WriteLine
($"// The lazy loop matched at least one iteration; backtrack into the last one.");
4004
writer.
WriteLine
($"{sawEmpty} = 0; // false");
4070
writer.
WriteLine
("// If the last iteration matched empty, don't continue lazily iterating. Instead, backtrack.");
4076
writer.
WriteLine
($"// If the upper bound {maxIterations} has already been reached, or if the last");
4077
writer.
WriteLine
($"// iteration matched empty, don't continue lazily iterating. Instead, backtrack.");
4083
writer.
WriteLine
($"// If the upper bound {maxIterations} has already been reached,");
4084
writer.
WriteLine
($"// don't continue lazily iterating. Instead, backtrack.");
4106
writer.
WriteLine
($"{sawEmpty} = 0; // false");
4178
writer.
WriteLine
($"{SpanLengthCheck(iterations)} ||");
4184
writer.
WriteLine
(" ||");
4188
writer.
WriteLine
(")");
4225
writer.
WriteLine
($"ReadOnlySpan<char> {repeaterSpan} = {sliceSpan}.Slice({sliceStaticPos}, {iterations});");
4276
writer.
WriteLine
($"int {iterationLocal} = pos;");
4280
writer.
WriteLine
($"int {iterationLocal} = 0;");
4290
writer.
WriteLine
($"{iterationLocal}++;");
4301
writer.
WriteLine
($"int {iterationLocal} = inputSpan.Length - pos;");
4313
writer.
WriteLine
($".{indexOfExpr};");
4317
writer.
WriteLine
(sliceStaticPos > 0 ?
4340
writer.
WriteLine
($"int {iterationLocal} = {sliceStaticPos};");
4346
writer.
WriteLine
($"{iterationLocal}++;");
4366
writer.
WriteLine
($"{sliceSpan} = {sliceSpan}.Slice({iterationLocal});");
4367
writer.
WriteLine
($"pos += {iterationLocal};");
4371
writer.
WriteLine
($"pos -= {iterationLocal};");
4404
writer.
WriteLine
($"{sliceSpan} = {sliceSpan}.Slice(1);");
4405
writer.
WriteLine
($"pos++;");
4409
writer.
WriteLine
($"pos--;");
4485
writer.
WriteLine
($"{startingStackpos} = stackpos;");
4503
writer.
WriteLine
($"{startingPos} = pos;");
4509
writer.
WriteLine
($"{iterationCount} = 0;");
4536
writer.
WriteLine
($"{startingPos} = pos;");
4543
writer.
WriteLine
($"{iterationCount}++;");
4567
writer.
WriteLine
("// The loop has no upper bound. Continue iterating greedily.");
4577
writer.
WriteLine
($"// The loop has an upper bound of {maxIterations}. Continue iterating greedily if it hasn't yet been reached.");
4584
writer.
WriteLine
($"// The loop has a lower bound of {minIterations} but no upper bound. Continue iterating greedily");
4585
writer.
WriteLine
($"// if the last iteration wasn't empty (or if it was, if the lower bound hasn't yet been reached).");
4591
writer.
WriteLine
($"// The loop has a lower bound of {minIterations} and an upper bound of {maxIterations}. Continue iterating");
4592
writer.
WriteLine
($"// greedily if the upper bound hasn't yet been reached and either the last iteration was non-empty or the");
4593
writer.
WriteLine
($"// lower bound hasn't yet been reached.");
4599
writer.
WriteLine
($"// The loop is unbounded. Continue iterating greedily as long as the last iteration wasn't empty.");
4605
writer.
WriteLine
($"// The loop has an upper bound of {maxIterations}. Continue iterating greedily if the upper bound hasn't");
4606
writer.
WriteLine
($"// yet been reached (as long as the last iteration wasn't empty).");
4623
writer.
WriteLine
("// The loop iteration failed. Put state back to the way it was before the iteration.");
4630
writer.
WriteLine
("// Unable to match the remainder of the expression after exhausting the loop.");
4652
writer.
WriteLine
("// No iterations have been matched to backtrack into. Fail the loop.");
4665
writer.
WriteLine
($"// All possible iterations have matched, but it's below the required minimum of {minIterations}.");
4666
writer.
WriteLine
($"// Backtrack into the prior iteration.");
4678
writer.
WriteLine
($"// All possible iterations have matched, but it's below the required minimum of {minIterations}. Fail the loop.");
4690
writer.
WriteLine
($"// Ensure any stale backtracking state is removed.");
4691
writer.
WriteLine
($"stackpos = {startingStackpos};");
4711
writer.
WriteLine
($"stackpos = {startingStackpos}; // Ensure any remaining backtracking state is removed.");
4729
writer.
WriteLine
("// No iterations of the loop remain to backtrack into. Fail the loop.");
4812
writer.
WriteLine
($"{UncaptureUntil}({capturepos});");
4864
writer.
WriteLine
($"{HelpersTypeName}.{MethodName}(ref base.runstack!, ref stackpos, {string.Join(", ", args)});");
4874
writer.
WriteLine
($"{args[0]} = {StackPop()};");
4897
writer.
WriteLine
($"{HelpersTypeName}.{MethodName}(base.runstack!, ref stackpos, out {string.Join(", out ", args)});");
4928
writer.
WriteLine
($"{StackCookieValidate(stackCookie)};");
5033
writer.
WriteLine
("base.CheckTimeout();");
5859
writer.
WriteLine
(clause);
5861
writer.
WriteLine
(faux ? "//{" : "{");
5873
writer.
WriteLine
(
5891
_writer.
WriteLine
(_faux ? "//}" : "}");