Skip to content

Commit 8984d24

Browse files
committed
supporting more than 1 file.
1 parent e4d120e commit 8984d24

5 files changed

Lines changed: 50 additions & 30 deletions

File tree

src/appSettingEditor/TestEditor/TestEditor.csproj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net5.0</TargetFramework>
55
</PropertyGroup>
66

7-
<ItemGroup>
7+
<ItemGroup>
88
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
99
</ItemGroup>
1010
<PropertyGroup>
@@ -14,7 +14,11 @@
1414
<ItemGroup>
1515
<ProjectReference Include="..\appSettingEditorAPI\appSettingsEditorAPI.csproj" OutputItemType="Analyzer" />
1616
<ProjectReference Include="..\appSettingsEditor\appSettingsEditor.csproj" />
17-
<AdditionalFiles Include="appsettings.json">
17+
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="generateAPI" />
18+
<AdditionalFiles Include="appsettings.json" generateAPI="true" >
19+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
20+
</AdditionalFiles>
21+
<AdditionalFiles Include="appsettings.Development.json" >
1822
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
1923
</AdditionalFiles>
2024

src/appSettingEditor/appSettingEditorAPI/AppSettingsGenerator.cs

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,38 +21,54 @@ public void Execute(GeneratorExecutionContext context)
2121

2222
string namespaceName = context.Compilation?.AssemblyName;
2323

24-
var settings = context.AdditionalFiles.FirstOrDefault(file =>
25-
file.Path.EndsWith(".json", StringComparison.InvariantCultureIgnoreCase)
26-
&&
27-
file.Path.IndexOf("appsettings", StringComparison.InvariantCultureIgnoreCase) > -1
28-
);
24+
//var settings = context.AdditionalFiles.FirstOrDefault(file =>
25+
// file.Path.EndsWith(".json", StringComparison.InvariantCultureIgnoreCase)
26+
// &&
27+
// file.Path.IndexOf("appsettings", StringComparison.InvariantCultureIgnoreCase) > -1
28+
// );
2929

30-
if (settings == null)
30+
var allSettings = context.AdditionalFiles.Where(
31+
file =>
32+
{
33+
var f = context.AnalyzerConfigOptions.GetOptions(file);
34+
if (!f.TryGetValue("build_metadata.AdditionalFiles.generateAPI", out string val))
35+
return false;
36+
37+
return (val == "true");
38+
}
39+
)
40+
;
41+
42+
if (!allSettings.Any())
3143
{
3244
//do diagnostics
3345
return;
3446
}
35-
string nameSettings = Path.GetFileNameWithoutExtension(settings.Path);
36-
//TODO : diagnostic
37-
var jsonFileText = settings.GetText();
38-
if (jsonFileText == null)
47+
foreach (var settings in allSettings)
3948
{
40-
//TODO: diagnostic
41-
return;
42-
}
43-
//var generatedCode = GenerateFile(jsonFileText.ToString(), namespaceName);
44-
//var g = new GeneratorData();
45-
//var generatedCode= g.GenerateFile(jsonFileText.ToString(),namespaceName);
46-
//context.AddSource($"{nameSettings}.gen.cs", SourceText.From(generatedCode, Encoding.UTF8));
47-
//var json = JsonDocument.Parse(jsonFileText.ToString());
4849

49-
var g = new GeneratorFromJSON();
50-
var generatedCode = g.GenerateFile(jsonFileText.ToString(), nameSettings, namespaceName, "appsettings.txt");
51-
context.AddSource($"{nameSettings}.gen.cs", SourceText.From(generatedCode, Encoding.UTF8));
5250

53-
generatedCode = g.GenerateFile(jsonFileText.ToString(), nameSettings, namespaceName, "Controller.txt");
54-
context.AddSource($"{nameSettings}Controller.gen.cs", SourceText.From(generatedCode, Encoding.UTF8));
51+
string nameSettings = Path.GetFileNameWithoutExtension(settings.Path);
52+
//TODO : diagnostic
53+
var jsonFileText = settings.GetText();
54+
if (jsonFileText == null)
55+
{
56+
//TODO: diagnostic
57+
return;
58+
}
59+
//var generatedCode = GenerateFile(jsonFileText.ToString(), namespaceName);
60+
//var g = new GeneratorData();
61+
//var generatedCode= g.GenerateFile(jsonFileText.ToString(),namespaceName);
62+
//context.AddSource($"{nameSettings}.gen.cs", SourceText.From(generatedCode, Encoding.UTF8));
63+
//var json = JsonDocument.Parse(jsonFileText.ToString());
64+
65+
var g = new GeneratorFromJSON();
66+
var generatedCode = g.GenerateFile(jsonFileText.ToString(), nameSettings, namespaceName, "appsettings.txt");
67+
context.AddSource($"{nameSettings}.gen.cs", SourceText.From(generatedCode, Encoding.UTF8));
5568

69+
generatedCode = g.GenerateFile(jsonFileText.ToString(), nameSettings, namespaceName, "Controller.txt");
70+
context.AddSource($"{nameSettings}Controller.gen.cs", SourceText.From(generatedCode, Encoding.UTF8));
71+
}
5672
}
5773

5874
}

src/appSettingEditor/appSettingEditorAPI/Controller.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ using System.Threading.Tasks;
1919

2020
namespace {{ NamespaceName }}.Controllers
2121
{
22-
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
22+
//[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
2323
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("{{ ToolName }}", "{{ ToolVersion }}")]
2424
[Route("api/[controller]")]
2525
[ApiController]
@@ -39,7 +39,7 @@ namespace {{ NamespaceName }}.Controllers
3939
BeforeGet(settings);
4040
return settings;
4141
}
42-
42+
//maybe have a get with the settings name, if there are more than 1?
4343
[HttpPost()]
4444
public bool Post([FromServices]IConfiguration config, {{ appSettingsClass.ClassName }} saveData){
4545

@@ -48,7 +48,7 @@ namespace {{ NamespaceName }}.Controllers
4848
{
4949
WriteIndented = true
5050
}) ;
51-
System.IO.File.WriteAllText("{{ appSettingsClass.ClassName }}.json",data);
51+
System.IO.File.WriteAllText("{{fullNameFile}}.json",data);
5252
return true;
5353
}
5454
}

src/appSettingEditor/appSettingEditorAPI/Json2Class/GeneratorFromJSON.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public string GenerateFile(string content, string rootTypeName, string namespace
1919
{
2020
classModels = new List<ClassModel>();
2121
var jsonElement = json.RootElement;
22-
ResolveTypeRecursive(classModels, jsonElement, rootTypeName, null);
22+
ResolveTypeRecursive(classModels, jsonElement, rootTypeName.Replace(".","_"), null);
2323
}
2424
var appSettingsClass = classModels.First(it => it.parentClass == null);
2525
var t = EmbeddedResource.GetContent(NameFile);

src/appSettingEditor/appSettingEditorAPI/appsettings.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ using appSettingsEditor;
1515
namespace {{ NamespaceName }}
1616
{
1717
{{ for ClassModel in ClassModels }}
18-
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
18+
//[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
1919
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("{{ ToolName }}", "{{ ToolVersion }}")]
2020
public partial class {{ ClassModel.ClassName }}: IAppSettingsConfig<{{ ClassModel.ClassName }}>
2121
{

0 commit comments

Comments
 (0)