Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions src/IntegrationTest.Shipping/Handlers/ShipOrderHandler.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
namespace IntegrationTest.Shipping.Handlers;

using IntegrationTest.Shared;
using Microsoft.Extensions.Logging;
using NServiceBus;

public class ShipOrderHandler(ILogger<ShipOrderHandler> logger) : IHandleMessages<PaymentCleared>
{
Expand Down
5 changes: 2 additions & 3 deletions src/IntegrationTest.Shipping/ShippingEndpoint.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
namespace IntegrationTest.Shipping;

using Azure.Messaging.ServiceBus;
using IntegrationTest.Shared;
using Microsoft.Azure.Functions.Worker;

// Intentionally in the global namespace to make sure that the generator can handle it
[NServiceBusFunction]
public partial class ShippingEndpoint
{
Expand All @@ -18,6 +17,6 @@ public partial Task Shipping(
public static void ConfigureShipping(EndpointConfiguration endpoint)
{
CommonEndpointConfig.Apply(endpoint);
endpoint.AddHandler<Handlers.ShipOrderHandler>();
endpoint.AddHandler<ShipOrderHandler>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static void Emit(SourceProductionContext context, CompositionSpec? compos

var writer = new SourceWriter();
writer.PreAmble();
writer.WithOpenNamespace(composition.RootNamespace);
writer.WithFileScopedNamespace(composition.RootNamespace);
writer.WithGeneratedCodeAttribute();
writer.WriteLine("internal static class NServiceBusFunctionsComposition");
writer.WriteLine("{");
Expand All @@ -45,4 +45,4 @@ public static void Emit(SourceProductionContext context, CompositionSpec? compos
context.AddSource(TrackingNames.Composition, writer.ToSourceText());
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,8 @@ static void EmitMethodBodies(SourceProductionContext spc, ImmutableArray<Functio
foreach (var group in groups)
{
writer.WriteLine();
writer.WriteLine($"namespace {group.Key.ContainingNamespace}");
writer.WriteLine("{");
writer.Indentation++;
var namespaceOpened = !string.IsNullOrWhiteSpace(group.Key.ContainingNamespace);
writer.WithOpenNamespace(group.Key.ContainingNamespace);
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't use filescoped namespace here since we add all method bodies to the same file and I didn't want to change that

writer.WriteLine($"public partial class {group.Key.ContainingClassName}");
writer.WriteLine("{");
writer.Indentation++;
Expand Down Expand Up @@ -66,8 +65,11 @@ static void EmitMethodBodies(SourceProductionContext spc, ImmutableArray<Functio

writer.Indentation--;
writer.WriteLine("}");
writer.Indentation--;
writer.WriteLine("}");
if (namespaceOpened)
{
writer.Indentation--;
writer.WriteLine("}");
}
}

spc.AddSource("FunctionMethodBodies.g.cs", writer.ToSourceText());
Expand All @@ -77,7 +79,7 @@ static void EmitRegistration(SourceProductionContext spc, ImmutableArray<Functio
{
var writer = new SourceWriter();
writer.PreAmble();
writer.WithOpenNamespace("NServiceBus.Generated");
writer.WithFileScopedNamespace("NServiceBus.Generated");
writer.WriteLine("/// <summary>");
writer.WriteLine("/// Registrations for NServiceBus functions in this assembly.");
writer.WriteLine("/// </summary>");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ static FunctionSpecs ExtractFromMethod(IMethodSymbol methodSymbol, FunctionEndpo

connectionSettingName ??= "";

var ns = containingType.ContainingNamespace.ToDisplayString();
var ns = containingType.ContainingNamespace.IsGlobalNamespace ? "" : containingType.ContainingNamespace.ToDisplayString();
var className = containingType.Name;
var returnType = method.ReturnType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);

Expand Down Expand Up @@ -701,4 +701,3 @@ public static bool TryGet(Compilation compilation, TriggerDefinition triggerDefi
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@ public SourceWriter WithOpenNamespace(string? namespaceName)
return writer;
}

public SourceWriter WithFileScopedNamespace(string? namespaceName)
{
if (string.IsNullOrWhiteSpace(namespaceName))
{
return writer;
}

writer.WriteLine($"namespace {namespaceName};");
writer.WriteLine();
return writer;
}

public void CloseCurlies()
{
while (writer.Indentation > 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,20 @@ public partial class Functions
// Suppress warnings about [Obsolete] usage in generated code.
#pragma warning disable CS0612, CS0618

namespace My.FunctionApp
namespace My.FunctionApp;

[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
internal static class NServiceBusFunctionsComposition
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
internal static class NServiceBusFunctionsComposition
extension(global::Microsoft.Azure.Functions.Worker.Builder.FunctionsApplicationBuilder builder)
{
extension(global::Microsoft.Azure.Functions.Worker.Builder.FunctionsApplicationBuilder builder)
public void AddNServiceBusFunctions()
{
public void AddNServiceBusFunctions()
{
global::System.ArgumentNullException.ThrowIfNull(builder);
global::System.ArgumentNullException.ThrowIfNull(builder);

foreach (var manifest in global::NServiceBus.Generated.GeneratedFunctionRegistrations_GeneratesProjectComposition_4d91953014478208.GetFunctionManifests())
{
manifest.Register(builder, manifest);
}
foreach (var manifest in global::NServiceBus.Generated.GeneratedFunctionRegistrations_GeneratesProjectComposition_4d91953014478208.GetFunctionManifests())
{
manifest.Register(builder, manifest);
}
}
}
Expand Down Expand Up @@ -95,27 +94,26 @@ namespace Demo
// Suppress warnings about [Obsolete] usage in generated code.
#pragma warning disable CS0612, CS0618

namespace NServiceBus.Generated
namespace NServiceBus.Generated;

/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesProjectComposition_4d91953014478208
{
/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesProjectComposition_4d91953014478208
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
/// <summary>
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "AzureServiceBus",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Functions.ConfigureProcessOrder(endpointconfiguration, iconfiguration, ihostenvironment),
global::NServiceBus.Configuration.AdvancedExtensibility.AzureServiceBusFunctionsHostApplicationBuilderExtensions.AddNServiceBusAzureServiceBusFunction);
yield break;
}
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "AzureServiceBus",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Functions.ConfigureProcessOrder(endpointconfiguration, iconfiguration, ihostenvironment),
global::NServiceBus.Configuration.AdvancedExtensibility.AzureServiceBusFunctionsHostApplicationBuilderExtensions.AddNServiceBusAzureServiceBusFunction);
yield break;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,26 @@ namespace Demo.Testing
// Suppress warnings about [Obsolete] usage in generated code.
#pragma warning disable CS0612, CS0618

namespace NServiceBus.Generated
namespace NServiceBus.Generated;

/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesEndpointWithExtraUnrecognizedParametersWhenShapeAllowsAdditionalParameters_eb6e20d89fd29573
{
/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesEndpointWithExtraUnrecognizedParametersWhenShapeAllowsAdditionalParameters_eb6e20d89fd29573
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
/// <summary>
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "StorageConn",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Testing.Functions.ConfigureProcessOrder(endpointconfiguration),
global::Demo.Testing.TestFunctionManifestRegistration.Register);
yield break;
}
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "StorageConn",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Testing.Functions.ConfigureProcessOrder(endpointconfiguration),
global::Demo.Testing.TestFunctionManifestRegistration.Register);
yield break;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,26 @@ namespace Demo.Testing
// Suppress warnings about [Obsolete] usage in generated code.
#pragma warning disable CS0612, CS0618

namespace NServiceBus.Generated
namespace NServiceBus.Generated;

/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesEndpointWithoutMessageActions_18234b41cd275b7a
{
/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesEndpointWithoutMessageActions_18234b41cd275b7a
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
/// <summary>
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "StorageConn",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Testing.Functions.ConfigureProcessOrder(endpointconfiguration),
global::Demo.Testing.TestFunctionManifestRegistration.Register);
yield break;
}
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "StorageConn",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Testing.Functions.ConfigureProcessOrder(endpointconfiguration),
global::Demo.Testing.TestFunctionManifestRegistration.Register);
yield break;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,27 +36,26 @@ namespace Demo
// Suppress warnings about [Obsolete] usage in generated code.
#pragma warning disable CS0612, CS0618

namespace NServiceBus.Generated
namespace NServiceBus.Generated;

/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesFunctionEndpoint_64aca0f8d2adde54
{
/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesFunctionEndpoint_64aca0f8d2adde54
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
/// <summary>
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "AzureServiceBus",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Functions.ConfigureProcessOrder(endpointconfiguration, iconfiguration, ihostenvironment),
global::NServiceBus.Configuration.AdvancedExtensibility.AzureServiceBusFunctionsHostApplicationBuilderExtensions.AddNServiceBusAzureServiceBusFunction);
yield break;
}
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "AzureServiceBus",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Demo.Functions.ConfigureProcessOrder(endpointconfiguration, iconfiguration, ihostenvironment),
global::NServiceBus.Configuration.AdvancedExtensibility.AzureServiceBusFunctionsHostApplicationBuilderExtensions.AddNServiceBusAzureServiceBusFunction);
yield break;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// == NServiceBus.AzureFunctions.Analyzer/NServiceBus.AzureFunctions.Analyzer.FunctionEndpointGenerator/FunctionMethodBodies.g.cs ==
// <auto-generated/>

#nullable enable annotations
#nullable disable warnings

// Suppress warnings about [Obsolete] usage in generated code.
#pragma warning disable CS0612, CS0618

using Microsoft.Extensions.DependencyInjection;

public partial class Functions
{
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public partial global::System.Threading.Tasks.Task Run(
global::Azure.Messaging.ServiceBus.ServiceBusReceivedMessage message,
global::Microsoft.Azure.Functions.Worker.ServiceBusMessageActions messageActions,
global::Microsoft.Azure.Functions.Worker.FunctionContext context,
global::System.Threading.CancellationToken cancellationToken)
{
var processor = context.InstanceServices
.GetRequiredKeyedService<global::NServiceBus.AzureFunctions.AzureServiceBus.AzureServiceBusMessageProcessor>("ProcessOrder");
return processor.Process(message, messageActions, context, cancellationToken);
}
}

// == NServiceBus.AzureFunctions.Analyzer/NServiceBus.AzureFunctions.Analyzer.FunctionEndpointGenerator/FunctionRegistration.g.cs ==
// <auto-generated/>

#nullable enable annotations
#nullable disable warnings

// Suppress warnings about [Obsolete] usage in generated code.
#pragma warning disable CS0612, CS0618

namespace NServiceBus.Generated;

/// <summary>
/// Registrations for NServiceBus functions in this assembly.
/// </summary>
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
[global::NServiceBus.AutoGeneratedFunctionRegistrationsAttribute]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("NService.Core.Analyzer.Tests", "1.0.0")]
public static class GeneratedFunctionRegistrations_GeneratesFunctionEndpointInGlobalNamespace_1f0b44ddcd47d001
{
/// <summary>
/// Gets function manifests for NServiceBus functions in this assembly.
/// </summary>
public static global::System.Collections.Generic.IEnumerable<global::NServiceBus.FunctionManifest>
GetFunctionManifests()
{
yield return new global::NServiceBus.FunctionManifest(
"ProcessOrder", "sales-queue", "AzureServiceBus",
(endpointconfiguration, iservicecollection, iconfiguration, ihostenvironment) => global::Functions.ConfigureProcessOrder(endpointconfiguration, iconfiguration, ihostenvironment),
global::NServiceBus.Configuration.AdvancedExtensibility.AzureServiceBusFunctionsHostApplicationBuilderExtensions.AddNServiceBusAzureServiceBusFunction);
yield break;
}
}
Loading
Loading