Skip to content

Commit 5a88cd2

Browse files
authored
Merge pull request #24 from MobileTeleSystems/master
Merge fixes from master
2 parents 9f34aec + 5eb60af commit 5a88cd2

File tree

14 files changed

+108
-33
lines changed

14 files changed

+108
-33
lines changed

src/ApiCodeGenerator.AsyncApi/Amqp/CSharp/CSharpAmqpServiceGeneratorSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public CSharpAmqpServiceGeneratorSettings()
1111
CodeGeneratorSettings,
1212
[
1313
new EmbededResourceTemplateProvider(GetType().Assembly, $"{asmName}.TemplatesAmqp"),
14-
.. DefaultTemplateFactory.CreateProviders(CodeGeneratorSettings,
14+
.. DefaultTemplateFactory.CreateProviders(
1515
[
1616
typeof(CSharpClientGeneratorSettings).Assembly,
1717
typeof(NJsonSchema.CodeGeneration.CSharp.CSharpGenerator).Assembly

src/ApiCodeGenerator.MSBuild/build/ApiCodeGenerator.MSBuild.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<_Temporary Include="**/*.nswag" Exclude="%(OpenApiReference.Options)">
3030
<DocumentDir>$(ProjectDir)%(RecursiveDir)</DocumentDir>
3131
</_Temporary>
32-
<_Temporary Update="@(_Temporary)" Condition="'$(AcgApiDocumentDir)' == 'true'">
32+
<_Temporary Update="@(_Temporary)" Condition="'$(AcgApiDocumentDir)' != ''">
3333
<DocumentDir>$([MSBuild]::EnsureTrailingSlash('$(AcgApiDocumentDir)'))</DocumentDir>
3434
</_Temporary>
3535

src/ApiCodeGenerator.OpenApi/CSharpClientContentGenerator.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,5 @@ namespace ApiCodeGenerator.OpenApi
88
internal sealed class CSharpClientContentGenerator
99
: ContentGeneratorBase<CSharpClientContentGenerator, CSharpClientGenerator, CSharpClientGeneratorSettings>
1010
{
11-
public override string Generate()
12-
{
13-
Generator.Settings.CodeGeneratorSettings.TemplateFactory =
14-
new DefaultTemplateFactory(
15-
Generator.Settings.CodeGeneratorSettings,
16-
[typeof(CSharpClientGenerator).Assembly, typeof(NJsonSchema.CodeGeneration.CSharp.CSharpGenerator).Assembly]);
17-
return base.Generate();
18-
}
1911
}
2012
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
namespace ApiCodeGenerator.OpenApi;
2+
3+
public class CSharpClientGeneratorSettings : NSwag.CodeGeneration.CSharp.CSharpClientGeneratorSettings
4+
{
5+
public CSharpClientGeneratorSettings()
6+
: base()
7+
{
8+
CSharpGeneratorSettings.TemplateFactory = new DefaultTemplateFactory(
9+
CSharpGeneratorSettings,
10+
[
11+
typeof(NSwag.CodeGeneration.CSharp.CSharpClientGenerator).Assembly,
12+
typeof(NJsonSchema.CodeGeneration.CSharp.CSharpGenerator).Assembly]);
13+
}
14+
}

src/ApiCodeGenerator.OpenApi/CSharpControllerContentGenerator.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,5 @@ namespace ApiCodeGenerator.OpenApi
88
internal sealed class CSharpControllerContentGenerator
99
: ContentGeneratorBase<CSharpControllerContentGenerator, CSharpControllerGenerator, CSharpControllerGeneratorSettings>
1010
{
11-
public override string Generate()
12-
{
13-
Generator.Settings.CodeGeneratorSettings.TemplateFactory =
14-
new DefaultTemplateFactory(
15-
Generator.Settings.CodeGeneratorSettings,
16-
[typeof(CSharpClientGenerator).Assembly, typeof(NJsonSchema.CodeGeneration.CSharp.CSharpGenerator).Assembly]);
17-
return base.Generate();
18-
}
1911
}
2012
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace ApiCodeGenerator.OpenApi;
2+
3+
public class CSharpControllerGeneratorSettings : NSwag.CodeGeneration.CSharp.CSharpControllerGeneratorSettings
4+
{
5+
public CSharpControllerGeneratorSettings()
6+
: base()
7+
{
8+
CSharpGeneratorSettings.TemplateFactory = new DefaultTemplateFactory(
9+
CodeGeneratorSettings,
10+
[
11+
typeof(NSwag.CodeGeneration.CSharp.CSharpClientGenerator).Assembly,
12+
typeof(NJsonSchema.CodeGeneration.CSharp.CSharpGenerator).Assembly
13+
]);
14+
}
15+
}

src/ApiCodeGenerator.OpenApi/DefaultTemplateFactory.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,38 +22,33 @@ namespace ApiCodeGenerator.OpenApi;
2222
public partial class DefaultTemplateFactory : ITemplateFactory
2323
{
2424
private const string BASE_TMPL_SUFFIX = ".base";
25-
25+
private readonly CodeGeneratorSettingsBase _settings;
2626
private readonly ITemplateProvider[] _providers;
2727

2828
private readonly InternalTemplateFactory _internalTemplateFactory;
2929

3030
public DefaultTemplateFactory(CodeGeneratorSettingsBase settings, params Assembly[] assemblies)
31-
: this(settings, CreateProviders(settings, assemblies).ToArray())
31+
: this(settings, CreateProviders(assemblies).ToArray())
3232
{
3333
}
3434

3535
public DefaultTemplateFactory(CodeGeneratorSettingsBase settings, ITemplateProvider[] providers)
3636
{
37+
_settings = settings;
3738
_providers = providers;
3839
_internalTemplateFactory = new(settings, GetLiquidTemplate, GetToolchainVersion);
3940
}
4041

42+
[Obsolete("Use CreateProviders(Assembly[] assemblies)")]
4143
public static IEnumerable<ITemplateProvider> CreateProviders(CodeGeneratorSettingsBase settings, Assembly[] assemblies)
42-
{
43-
if (!string.IsNullOrEmpty(settings.TemplateDirectory))
44-
{
45-
yield return new DirectoryTemplateProvider(settings.TemplateDirectory!);
46-
}
44+
=> CreateProviders(assemblies);
4745

48-
foreach (var assembly in assemblies)
49-
{
50-
yield return new EmbededResourceTemplateProvider(assembly, $"{assembly.GetName().Name}.Templates");
51-
}
52-
}
46+
public static IEnumerable<ITemplateProvider> CreateProviders(Assembly[] assemblies)
47+
=> assemblies.Select(a => new EmbededResourceTemplateProvider(a, $"{a.GetName().Name}.Templates"));
5348

5449
public ITemplate CreateTemplate(string language, string template, object model)
5550
{
56-
IEnumerable<ITemplateProvider> providers = _providers;
51+
IEnumerable<ITemplateProvider> providers = GetProviders();
5752
if (template.EndsWith(BASE_TMPL_SUFFIX))
5853
{
5954
if (model is Fluid.TemplateContext templateContext)
@@ -78,13 +73,24 @@ public ITemplate CreateTemplate(string language, string template, object model)
7873

7974
private string GetLiquidTemplate(string language, string name)
8075
{
81-
var text = _providers
76+
var text = GetProviders()
8277
.Select(p => p.GetTemplateText(name.TrimEnd('!'), language))
8378
.FirstOrDefault(t => t is not null);
8479

8580
return text ?? string.Empty;
8681
}
8782

83+
private IEnumerable<ITemplateProvider> GetProviders()
84+
{
85+
var providers = _providers.AsEnumerable();
86+
if (!string.IsNullOrEmpty(_settings.TemplateDirectory))
87+
{
88+
providers = providers.Prepend(new DirectoryTemplateProvider(_settings.TemplateDirectory!));
89+
}
90+
91+
return providers;
92+
}
93+
8894
private sealed class InternalTemplateFactory
8995
#if ASYNC_API
9096
: NJsonSchema.CodeGeneration.DefaultTemplateFactory

test/ApiCodeGenerator.AsyncApi.Tests/ApiCodeGenerator.AsyncApi.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
<Content Include="asyncApi\**\*.*">
1616
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
1717
</Content>
18+
<Content Include="Templates\**\*.*">
19+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
20+
</Content>
1821
</ItemGroup>
1922

2023
<ItemGroup>

test/ApiCodeGenerator.AsyncApi.Tests/FunctionalTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,23 @@ public async Task GenerateMultipleClients()
169169
Assert.AreEqual(expected, actual);
170170
}
171171

172+
[TestCaseSource(nameof(TemplateDirectorySource))]
173+
public void TemplateDirectory<T>(T settings)
174+
where T : CSharpGeneratorBaseSettings
175+
{
176+
settings.CodeGeneratorSettings.TemplateDirectory = "Templates";
177+
var template = settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "File", new());
178+
var actual = template.Render();
179+
180+
Assert.That(actual, Is.EqualTo("overrided"));
181+
}
182+
183+
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1204:Static elements should appear before instance elements", Justification = "After tests")]
184+
public static IEnumerable<TestCaseData> TemplateDirectorySource()
185+
{
186+
yield return new TestCaseData(new CSharpClientGeneratorSettings()).SetName($"{nameof(TemplateDirectory)}_Client");
187+
}
188+
172189
private static string[] GetExpectedOperationsCode(string[]? bodyLines) => [
173190
TestHelpers.GetExpectedSummary("Inform about environmental lighting conditions of a particular streetlight.", 4 + 4) +
174191
GetExpectedPublisherCode("ReceiveLightMeasurement", "LightMeasuredPayload", 4 + 4, bodyLines),
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
overrided

0 commit comments

Comments
 (0)