diff --git a/backend/packagegroups/NuGet.props b/backend/packagegroups/NuGet.props index a00cf3b7690..1279ebf27a4 100644 --- a/backend/packagegroups/NuGet.props +++ b/backend/packagegroups/NuGet.props @@ -28,7 +28,6 @@ - diff --git a/backend/tests/SharedResources.Tests/Compiler.cs b/backend/src/DataModeling/Converter/Csharp/Compiler.cs similarity index 83% rename from backend/tests/SharedResources.Tests/Compiler.cs rename to backend/src/DataModeling/Converter/Csharp/Compiler.cs index f316935aabb..da99a6fba70 100644 --- a/backend/tests/SharedResources.Tests/Compiler.cs +++ b/backend/src/DataModeling/Converter/Csharp/Compiler.cs @@ -10,7 +10,7 @@ using Microsoft.CodeAnalysis.Emit; using Microsoft.CodeAnalysis.Text; -namespace SharedResources.Tests +namespace Altinn.Studio.DataModeling.Converter.Csharp { public static class Compiler { @@ -42,13 +42,10 @@ public static Assembly CompileToAssembly(string csharpCode) errors.AppendLine($"{diagnostic.Id}: {diagnostic.GetMessage()}"); } - throw new Exception($"Uh dude, you seem to have provoked some compilation errors with your code change. Please fix before merging! {errors}"); - } - else - { - ms.Seek(0, SeekOrigin.Begin); - assembly = Assembly.Load(ms.ToArray()); + throw new CsharpGenerationException($"// Compiler // CompileToAssembly // Csharp compilation failed with errors: {errors}"); } + ms.Seek(0, SeekOrigin.Begin); + assembly = Assembly.Load(ms.ToArray()); } return assembly; diff --git a/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs b/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs index adcd073adfc..6d9fb6b5e59 100644 --- a/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs +++ b/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Reflection; using System.Text; using Altinn.Studio.DataModeling.Converter.Interfaces; using Altinn.Studio.DataModeling.Metamodel; @@ -21,6 +23,11 @@ public JsonMetadataToCsharpConverter(CSharpGenerationSettings generationSettings private string Indent(int level = 1) => new string(' ', level * _generationSettings.IndentSize); + public void TryGenerateCsharpClass(string csharpClass) + { + Compiler.CompileToAssembly(csharpClass); + } + /// /// Create Model from ServiceMetadata object /// @@ -28,15 +35,15 @@ public JsonMetadataToCsharpConverter(CSharpGenerationSettings generationSettings /// The model code in C# public string CreateModelFromMetadata(ModelMetadata serviceMetadata) { - Dictionary classes = new Dictionary(); + Dictionary classes = new (); CreateModelFromMetadataRecursive(classes, serviceMetadata.Elements.Values.First(el => el.ParentElement == null), serviceMetadata, serviceMetadata.TargetNamespace); StringBuilder writer = new StringBuilder() - .AppendLine("using System;") .AppendLine("using System.Collections.Generic;") .AppendLine("using System.ComponentModel.DataAnnotations;") .AppendLine("using System.Linq;") + .AppendLine("using System.Runtime;") .AppendLine("using System.Text.Json.Serialization;") .AppendLine("using System.Threading.Tasks;") .AppendLine("using System.Xml.Serialization;") diff --git a/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs b/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs index a6a05a48c6e..117ce64a1de 100644 --- a/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs +++ b/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs @@ -10,5 +10,12 @@ public interface IModelMetadataToCsharpConverter /// ServiceMetadata object /// The model code in C# public string CreateModelFromMetadata(ModelMetadata serviceMetadata); + + /// + /// Try to generate csharp class from generated string from metadata + /// + /// Csharp class as string + /// Boolean indicator of successful generation + public void TryGenerateCsharpClass(string csharpClass); } } diff --git a/backend/src/DataModeling/DataModeling.csproj b/backend/src/DataModeling/DataModeling.csproj index 80edb2d0c7b..39246e57532 100644 --- a/backend/src/DataModeling/DataModeling.csproj +++ b/backend/src/DataModeling/DataModeling.csproj @@ -25,8 +25,12 @@ + + + + diff --git a/backend/src/Designer/Designer.csproj b/backend/src/Designer/Designer.csproj index 1f61df57f6e..7c561280a3f 100644 --- a/backend/src/Designer/Designer.csproj +++ b/backend/src/Designer/Designer.csproj @@ -41,7 +41,6 @@ - diff --git a/backend/src/Designer/Services/Implementation/SchemaModelService.cs b/backend/src/Designer/Services/Implementation/SchemaModelService.cs index 4ca30bfbf3b..5e4ae682651 100644 --- a/backend/src/Designer/Services/Implementation/SchemaModelService.cs +++ b/backend/src/Designer/Services/Implementation/SchemaModelService.cs @@ -10,6 +10,7 @@ using System.Xml.Schema; using Altinn.App.Core.Models; using Altinn.Platform.Storage.Interface.Models; +using Altinn.Studio.DataModeling.Converter.Csharp; using Altinn.Studio.DataModeling.Converter.Interfaces; using Altinn.Studio.DataModeling.Converter.Json.Strategy; using Altinn.Studio.DataModeling.Converter.Metadata; @@ -285,8 +286,9 @@ private Json.Schema.JsonSchema GenerateJsonSchemaFromXsd(Stream xsdStream) private async Task UpdateCSharpClasses(AltinnAppGitRepository altinnAppGitRepository, ModelMetadata modelMetadata, string schemaName) { - string classes = _modelMetadataToCsharpConverter.CreateModelFromMetadata(modelMetadata); - await altinnAppGitRepository.SaveCSharpClasses(classes, schemaName); + string csharpClasses = _modelMetadataToCsharpConverter.CreateModelFromMetadata(modelMetadata); + _modelMetadataToCsharpConverter.TryGenerateCsharpClass(csharpClasses); + await altinnAppGitRepository.SaveCSharpClasses(csharpClasses, schemaName); } private static async Task UpdateApplicationMetadata(AltinnAppGitRepository altinnAppGitRepository, string schemaName, string typeName) diff --git a/backend/tests/Designer.Tests/Designer.Tests.csproj b/backend/tests/Designer.Tests/Designer.Tests.csproj index ac46b6af8fb..97b59ad8229 100644 --- a/backend/tests/Designer.Tests/Designer.Tests.csproj +++ b/backend/tests/Designer.Tests/Designer.Tests.csproj @@ -24,7 +24,6 @@ - all diff --git a/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj b/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj index d577bf39e30..a2f703de4be 100644 --- a/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj +++ b/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj @@ -36,10 +36,8 @@ - -