From dc4b8dad5b10cc65eea166b45d482998c55bd1f9 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 5 Mar 2017 15:18:46 +0100 Subject: [PATCH] Fixes suggested by NDepend --- .../{Cloneable.cs => CloneableBase.cs} | 6 ++--- src/Squidex.Core/Schemas/Field.cs | 3 ++- src/Squidex.Core/Schemas/FieldProperties.cs | 2 +- ...rties.cs => NamedElementPropertiesBase.cs} | 4 +-- src/Squidex.Core/Schemas/Schema.cs | 2 +- src/Squidex.Core/Schemas/SchemaProperties.cs | 2 +- .../Schemas/{ => Validators}/IValidator.cs | 2 +- src/Squidex.Events/SquidexEvent.cs | 2 +- .../InstantSerializer.cs | 25 ++++++------------- .../RefTokenSerializer.cs | 25 ++++++------------- .../CQRS/Commands/AggregateHandler.cs | 1 + .../{DomainObject.cs => DomainObjectBase.cs} | 4 +-- .../CQRS/{ => Events}/CommonHeaders.cs | 2 +- .../CQRS/Events/DefaultMemoryEventNotifier.cs | 2 +- .../CQRS/{ => Events}/Envelope.cs | 2 +- .../CQRS/{ => Events}/EnvelopeExtensions.cs | 2 +- .../CQRS/{ => Events}/EnvelopeHeaders.cs | 3 ++- .../CQRS/Events/EventReceiver.cs | 2 +- ...sableObject.cs => DisposableObjectBase.cs} | 4 +-- src/Squidex.Infrastructure/Language.cs | 2 +- src/Squidex.Infrastructure/Languages.cs | 4 +++ .../Timers/CompletionTimer.cs | 2 +- .../Apps/MongoAppRepository_EventHandling.cs | 1 - .../MongoContentRepository_EventHandling.cs | 1 - .../History/MongoHistoryEventRepository.cs | 1 - .../MongoSchemaRepository_EventHandling.cs | 1 - .../Utils/EntityMapper.cs | 2 +- .../Utils/MongoCollectionExtensions.cs | 2 +- .../Apps/AppHistoryEventsCreator.cs | 1 - .../Implementations/CachingAppProvider.cs | 2 +- .../Contents/Builders/EdmModelBuilder.cs | 2 +- .../Contents/ContentHistoryEventsCreator.cs | 1 - .../History/HistoryEventsCreatorBase.cs | 1 - .../History/IHistoryEventsCreator.cs | 1 - .../Schemas/SchemaHistoryEventsCreator.cs | 1 - .../Implementations/CachingSchemaProvider.cs | 2 +- ...hingProvider.cs => CachingProviderBase.cs} | 6 ++--- src/Squidex.Write/Apps/AppDomainObject.cs | 2 +- .../Contents/ContentDomainObject.cs | 2 +- .../Schemas/SchemaDomainObject.cs | 2 +- .../Controllers/ContentApi/PingController.cs | 2 +- src/Squidex/Controllers/ControllerBase.cs | 5 ---- .../Pipeline/ApiExceptionFilterAttribute.cs | 2 +- src/Squidex/Pipeline/AppFilterAttribute.cs | 1 + src/Squidex/Pipeline/RandomErrorAttribute.cs | 2 +- .../CQRS/Commands/AggregateHandlerTests.cs | 2 +- .../DefaultDomainObjectFactoryTests.cs | 2 +- .../DefaultDomainObjectRepositoryTests.cs | 2 +- ...ObjectTest.cs => DomainObjectBaseTests.cs} | 6 ++--- .../CQRS/Events/DefaultNameResolverTests.cs | 4 +-- .../{ => Events}/EnvelopeExtensionsTests.cs | 2 +- .../CQRS/{ => Events}/EnvelopeHeaderTests.cs | 2 +- ...tTests.cs => DisposableObjectBaseTests.cs} | 6 ++--- .../LanguageTests.cs | 4 +-- .../TestHelpers/AssertHelper.cs | 1 - .../TestHelpers/HandlerTestBase.cs | 2 +- tools/GenerateLanguages/Program.cs | 4 +++ 57 files changed, 81 insertions(+), 102 deletions(-) rename src/Squidex.Core/Schemas/{Cloneable.cs => CloneableBase.cs} (89%) rename src/Squidex.Core/Schemas/{NamedElementProperties.cs => NamedElementPropertiesBase.cs} (92%) rename src/Squidex.Core/Schemas/{ => Validators}/IValidator.cs (92%) rename src/Squidex.Infrastructure/CQRS/{DomainObject.cs => DomainObjectBase.cs} (94%) rename src/Squidex.Infrastructure/CQRS/{ => Events}/CommonHeaders.cs (94%) rename src/Squidex.Infrastructure/CQRS/{ => Events}/Envelope.cs (97%) rename src/Squidex.Infrastructure/CQRS/{ => Events}/EnvelopeExtensions.cs (98%) rename src/Squidex.Infrastructure/CQRS/{ => Events}/EnvelopeHeaders.cs (95%) rename src/Squidex.Infrastructure/{DisposableObject.cs => DisposableObjectBase.cs} (94%) rename src/Squidex.Read/Utils/{CachingProvider.cs => CachingProviderBase.cs} (83%) rename tests/Squidex.Infrastructure.Tests/CQRS/{DomainObjectTest.cs => DomainObjectBaseTests.cs} (96%) rename tests/Squidex.Infrastructure.Tests/CQRS/{ => Events}/EnvelopeExtensionsTests.cs (98%) rename tests/Squidex.Infrastructure.Tests/CQRS/{ => Events}/EnvelopeHeaderTests.cs (97%) rename tests/Squidex.Infrastructure.Tests/{DisposableObjectTests.cs => DisposableObjectBaseTests.cs} (94%) diff --git a/src/Squidex.Core/Schemas/Cloneable.cs b/src/Squidex.Core/Schemas/CloneableBase.cs similarity index 89% rename from src/Squidex.Core/Schemas/Cloneable.cs rename to src/Squidex.Core/Schemas/CloneableBase.cs index 98908d4c6..6b1eecefe 100644 --- a/src/Squidex.Core/Schemas/Cloneable.cs +++ b/src/Squidex.Core/Schemas/CloneableBase.cs @@ -1,5 +1,5 @@ // ========================================================================== -// Cloneable.cs +// CloneableBase.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -10,9 +10,9 @@ using System; namespace Squidex.Core.Schemas { - public abstract class Cloneable + public abstract class CloneableBase { - protected T Clone(Action updater) where T : Cloneable + protected T Clone(Action updater) where T : CloneableBase { var clone = (T)MemberwiseClone(); diff --git a/src/Squidex.Core/Schemas/Field.cs b/src/Squidex.Core/Schemas/Field.cs index 3a48de351..02a1ee2a0 100644 --- a/src/Squidex.Core/Schemas/Field.cs +++ b/src/Squidex.Core/Schemas/Field.cs @@ -14,6 +14,7 @@ using Microsoft.OData.Edm.Library; using Newtonsoft.Json.Linq; using NJsonSchema; using Squidex.Core.Contents; +using Squidex.Core.Schemas.Validators; using Squidex.Infrastructure; // ReSharper disable InvertIf @@ -22,7 +23,7 @@ using Squidex.Infrastructure; namespace Squidex.Core.Schemas { - public abstract class Field : Cloneable + public abstract class Field : CloneableBase { private readonly Lazy> validators; private readonly long id; diff --git a/src/Squidex.Core/Schemas/FieldProperties.cs b/src/Squidex.Core/Schemas/FieldProperties.cs index 0fbbea7f1..42413b2be 100644 --- a/src/Squidex.Core/Schemas/FieldProperties.cs +++ b/src/Squidex.Core/Schemas/FieldProperties.cs @@ -12,7 +12,7 @@ using Squidex.Infrastructure; namespace Squidex.Core.Schemas { - public abstract class FieldProperties : NamedElementProperties, IValidatable + public abstract class FieldProperties : NamedElementPropertiesBase, IValidatable { private bool isRequired; private bool isLocalizable; diff --git a/src/Squidex.Core/Schemas/NamedElementProperties.cs b/src/Squidex.Core/Schemas/NamedElementPropertiesBase.cs similarity index 92% rename from src/Squidex.Core/Schemas/NamedElementProperties.cs rename to src/Squidex.Core/Schemas/NamedElementPropertiesBase.cs index 11a9b52aa..ac5d9cf2e 100644 --- a/src/Squidex.Core/Schemas/NamedElementProperties.cs +++ b/src/Squidex.Core/Schemas/NamedElementPropertiesBase.cs @@ -1,5 +1,5 @@ // ========================================================================== -// NamedElementProperties.cs +// NamedElementPropertiesBase.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -10,7 +10,7 @@ using System; namespace Squidex.Core.Schemas { - public abstract class NamedElementProperties + public abstract class NamedElementPropertiesBase { private string label; private string hints; diff --git a/src/Squidex.Core/Schemas/Schema.cs b/src/Squidex.Core/Schemas/Schema.cs index b27427091..8f6f5d61e 100644 --- a/src/Squidex.Core/Schemas/Schema.cs +++ b/src/Squidex.Core/Schemas/Schema.cs @@ -22,7 +22,7 @@ using Squidex.Infrastructure; namespace Squidex.Core.Schemas { - public sealed class Schema : Cloneable + public sealed class Schema : CloneableBase { private readonly string name; private readonly SchemaProperties properties; diff --git a/src/Squidex.Core/Schemas/SchemaProperties.cs b/src/Squidex.Core/Schemas/SchemaProperties.cs index 25ba80c67..16e3a552f 100644 --- a/src/Squidex.Core/Schemas/SchemaProperties.cs +++ b/src/Squidex.Core/Schemas/SchemaProperties.cs @@ -8,7 +8,7 @@ namespace Squidex.Core.Schemas { - public sealed class SchemaProperties : NamedElementProperties + public sealed class SchemaProperties : NamedElementPropertiesBase { } } \ No newline at end of file diff --git a/src/Squidex.Core/Schemas/IValidator.cs b/src/Squidex.Core/Schemas/Validators/IValidator.cs similarity index 92% rename from src/Squidex.Core/Schemas/IValidator.cs rename to src/Squidex.Core/Schemas/Validators/IValidator.cs index 405c0bd01..37be98011 100644 --- a/src/Squidex.Core/Schemas/IValidator.cs +++ b/src/Squidex.Core/Schemas/Validators/IValidator.cs @@ -9,7 +9,7 @@ using System.Collections.Generic; using System.Threading.Tasks; -namespace Squidex.Core.Schemas +namespace Squidex.Core.Schemas.Validators { public interface IValidator { diff --git a/src/Squidex.Events/SquidexEvent.cs b/src/Squidex.Events/SquidexEvent.cs index e84658bef..3b121958e 100644 --- a/src/Squidex.Events/SquidexEvent.cs +++ b/src/Squidex.Events/SquidexEvent.cs @@ -1,5 +1,5 @@ // ========================================================================== -// SquidexEvent.cs +// SquidexEventBase.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group diff --git a/src/Squidex.Infrastructure.MongoDb/InstantSerializer.cs b/src/Squidex.Infrastructure.MongoDb/InstantSerializer.cs index bc9046d87..c5de2f735 100644 --- a/src/Squidex.Infrastructure.MongoDb/InstantSerializer.cs +++ b/src/Squidex.Infrastructure.MongoDb/InstantSerializer.cs @@ -9,6 +9,7 @@ using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; using NodaTime; +using System; // ReSharper disable InvertIf @@ -16,26 +17,16 @@ namespace Squidex.Infrastructure.MongoDb { public sealed class InstantSerializer : SerializerBase, IBsonPolymorphicSerializer { - private static bool isRegistered; - private static readonly object LockObject = new object(); + private static readonly Lazy Registerer = new Lazy(() => + { + BsonSerializer.RegisterSerializer(new InstantSerializer()); + + return true; + }); public static bool Register() { - if (!isRegistered) - { - lock (LockObject) - { - if (!isRegistered) - { - BsonSerializer.RegisterSerializer(new InstantSerializer()); - - isRegistered = true; - return true; - } - } - } - - return false; + return !Registerer.IsValueCreated && Registerer.Value; } public bool IsDiscriminatorCompatibleWithObjectSerializer diff --git a/src/Squidex.Infrastructure.MongoDb/RefTokenSerializer.cs b/src/Squidex.Infrastructure.MongoDb/RefTokenSerializer.cs index 553a6a728..723e9d2ab 100644 --- a/src/Squidex.Infrastructure.MongoDb/RefTokenSerializer.cs +++ b/src/Squidex.Infrastructure.MongoDb/RefTokenSerializer.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; @@ -15,26 +16,16 @@ namespace Squidex.Infrastructure.MongoDb { public class RefTokenSerializer : SerializerBase { - private static bool isRegistered; - private static readonly object LockObject = new object(); + private static readonly Lazy Registerer = new Lazy(() => + { + BsonSerializer.RegisterSerializer(new RefTokenSerializer()); + + return true; + }); public static bool Register() { - if (!isRegistered) - { - lock (LockObject) - { - if (!isRegistered) - { - BsonSerializer.RegisterSerializer(new RefTokenSerializer()); - - isRegistered = true; - return true; - } - } - } - - return false; + return !Registerer.IsValueCreated && Registerer.Value; } public override RefToken Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) diff --git a/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs b/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs index 4bdd4169d..362d1c01f 100644 --- a/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs +++ b/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs @@ -8,6 +8,7 @@ using System; using System.Threading.Tasks; +using Squidex.Infrastructure.CQRS.Events; namespace Squidex.Infrastructure.CQRS.Commands { diff --git a/src/Squidex.Infrastructure/CQRS/DomainObject.cs b/src/Squidex.Infrastructure/CQRS/DomainObjectBase.cs similarity index 94% rename from src/Squidex.Infrastructure/CQRS/DomainObject.cs rename to src/Squidex.Infrastructure/CQRS/DomainObjectBase.cs index 14cfd3be5..b8e1ceb30 100644 --- a/src/Squidex.Infrastructure/CQRS/DomainObject.cs +++ b/src/Squidex.Infrastructure/CQRS/DomainObjectBase.cs @@ -12,7 +12,7 @@ using Squidex.Infrastructure.CQRS.Events; namespace Squidex.Infrastructure.CQRS { - public abstract class DomainObject : IAggregate, IEquatable + public abstract class DomainObjectBase : IAggregate, IEquatable { private readonly List> uncomittedEvents = new List>(); private readonly Guid id; @@ -28,7 +28,7 @@ namespace Squidex.Infrastructure.CQRS get { return id; } } - protected DomainObject(Guid id, int version) + protected DomainObjectBase(Guid id, int version) { Guard.NotEmpty(id, nameof(id)); Guard.GreaterEquals(version, -1, nameof(version)); diff --git a/src/Squidex.Infrastructure/CQRS/CommonHeaders.cs b/src/Squidex.Infrastructure/CQRS/Events/CommonHeaders.cs similarity index 94% rename from src/Squidex.Infrastructure/CQRS/CommonHeaders.cs rename to src/Squidex.Infrastructure/CQRS/Events/CommonHeaders.cs index c48283347..92bf0e3fe 100644 --- a/src/Squidex.Infrastructure/CQRS/CommonHeaders.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/CommonHeaders.cs @@ -6,7 +6,7 @@ // All rights reserved. // ========================================================================== -namespace Squidex.Infrastructure.CQRS +namespace Squidex.Infrastructure.CQRS.Events { public sealed class CommonHeaders { diff --git a/src/Squidex.Infrastructure/CQRS/Events/DefaultMemoryEventNotifier.cs b/src/Squidex.Infrastructure/CQRS/Events/DefaultMemoryEventNotifier.cs index 46d0945ea..afd527615 100644 --- a/src/Squidex.Infrastructure/CQRS/Events/DefaultMemoryEventNotifier.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/DefaultMemoryEventNotifier.cs @@ -12,7 +12,7 @@ namespace Squidex.Infrastructure.CQRS.Events { public sealed class DefaultMemoryEventNotifier : IEventNotifier { - private readonly string ChannelName = typeof(DefaultMemoryEventNotifier).Name; + private static readonly string ChannelName = typeof(DefaultMemoryEventNotifier).Name; private readonly IPubSub invalidator; diff --git a/src/Squidex.Infrastructure/CQRS/Envelope.cs b/src/Squidex.Infrastructure/CQRS/Events/Envelope.cs similarity index 97% rename from src/Squidex.Infrastructure/CQRS/Envelope.cs rename to src/Squidex.Infrastructure/CQRS/Events/Envelope.cs index 79588727f..e2bf2aa45 100644 --- a/src/Squidex.Infrastructure/CQRS/Envelope.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/Envelope.cs @@ -9,7 +9,7 @@ using System; using NodaTime; -namespace Squidex.Infrastructure.CQRS +namespace Squidex.Infrastructure.CQRS.Events { public class Envelope where TPayload : class { diff --git a/src/Squidex.Infrastructure/CQRS/EnvelopeExtensions.cs b/src/Squidex.Infrastructure/CQRS/Events/EnvelopeExtensions.cs similarity index 98% rename from src/Squidex.Infrastructure/CQRS/EnvelopeExtensions.cs rename to src/Squidex.Infrastructure/CQRS/Events/EnvelopeExtensions.cs index 322369def..80886571a 100644 --- a/src/Squidex.Infrastructure/CQRS/EnvelopeExtensions.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/EnvelopeExtensions.cs @@ -10,7 +10,7 @@ using System; using System.Globalization; using NodaTime; -namespace Squidex.Infrastructure.CQRS +namespace Squidex.Infrastructure.CQRS.Events { public static class EnvelopeExtensions { diff --git a/src/Squidex.Infrastructure/CQRS/EnvelopeHeaders.cs b/src/Squidex.Infrastructure/CQRS/Events/EnvelopeHeaders.cs similarity index 95% rename from src/Squidex.Infrastructure/CQRS/EnvelopeHeaders.cs rename to src/Squidex.Infrastructure/CQRS/Events/EnvelopeHeaders.cs index 3747ddbbb..f95580f9d 100644 --- a/src/Squidex.Infrastructure/CQRS/EnvelopeHeaders.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/EnvelopeHeaders.cs @@ -5,7 +5,8 @@ // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== -namespace Squidex.Infrastructure.CQRS + +namespace Squidex.Infrastructure.CQRS.Events { public sealed class EnvelopeHeaders : PropertiesBag { diff --git a/src/Squidex.Infrastructure/CQRS/Events/EventReceiver.cs b/src/Squidex.Infrastructure/CQRS/Events/EventReceiver.cs index 80c5ff3ba..aca57463c 100644 --- a/src/Squidex.Infrastructure/CQRS/Events/EventReceiver.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/EventReceiver.cs @@ -18,7 +18,7 @@ using Squidex.Infrastructure.Timers; namespace Squidex.Infrastructure.CQRS.Events { - public sealed class EventReceiver : DisposableObject + public sealed class EventReceiver : DisposableObjectBase { private readonly EventDataFormatter formatter; private readonly IEventStore eventStore; diff --git a/src/Squidex.Infrastructure/DisposableObject.cs b/src/Squidex.Infrastructure/DisposableObjectBase.cs similarity index 94% rename from src/Squidex.Infrastructure/DisposableObject.cs rename to src/Squidex.Infrastructure/DisposableObjectBase.cs index 98da1ace5..a8ead1cbd 100644 --- a/src/Squidex.Infrastructure/DisposableObject.cs +++ b/src/Squidex.Infrastructure/DisposableObjectBase.cs @@ -1,5 +1,5 @@ // ========================================================================== -// EnumExtensions.cs +// DisposableObjectBase.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -10,7 +10,7 @@ using System; namespace Squidex.Infrastructure { - public abstract class DisposableObject : IDisposable + public abstract class DisposableObjectBase : IDisposable { private readonly object disposeLock = new object(); private bool isDisposed; diff --git a/src/Squidex.Infrastructure/Language.cs b/src/Squidex.Infrastructure/Language.cs index 641d9fd82..421ecc491 100644 --- a/src/Squidex.Infrastructure/Language.cs +++ b/src/Squidex.Infrastructure/Language.cs @@ -82,7 +82,7 @@ namespace Squidex.Infrastructure return allLanguages.TryGetValue(iso2Code, out language); } - public static Language TryParse(string input) + public static Language ParseOrNull(string input) { if (string.IsNullOrWhiteSpace(input)) { diff --git a/src/Squidex.Infrastructure/Languages.cs b/src/Squidex.Infrastructure/Languages.cs index 5fb87a0b1..0e03ff9fd 100644 --- a/src/Squidex.Infrastructure/Languages.cs +++ b/src/Squidex.Infrastructure/Languages.cs @@ -5,9 +5,13 @@ // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== +// + +using System.CodeDom.Compiler; namespace Squidex.Infrastructure { + [GeneratedCode("LanguagesGenerator", "1.0")] partial class Language { public static readonly Language AA = AddLanguage("aa", "Afar"); diff --git a/src/Squidex.Infrastructure/Timers/CompletionTimer.cs b/src/Squidex.Infrastructure/Timers/CompletionTimer.cs index 94b94b640..b4dc061bf 100644 --- a/src/Squidex.Infrastructure/Timers/CompletionTimer.cs +++ b/src/Squidex.Infrastructure/Timers/CompletionTimer.cs @@ -14,7 +14,7 @@ using System.Threading.Tasks; namespace Squidex.Infrastructure.Timers { - public sealed class CompletionTimer : DisposableObject + public sealed class CompletionTimer : DisposableObjectBase { private readonly CancellationTokenSource disposeToken = new CancellationTokenSource(); private readonly Task runTask; diff --git a/src/Squidex.Read.MongoDb/Apps/MongoAppRepository_EventHandling.cs b/src/Squidex.Read.MongoDb/Apps/MongoAppRepository_EventHandling.cs index de55df60f..606a28e8c 100644 --- a/src/Squidex.Read.MongoDb/Apps/MongoAppRepository_EventHandling.cs +++ b/src/Squidex.Read.MongoDb/Apps/MongoAppRepository_EventHandling.cs @@ -11,7 +11,6 @@ using System.Threading.Tasks; using Squidex.Events; using Squidex.Events.Apps; using Squidex.Infrastructure; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.Dispatching; using Squidex.Infrastructure.Reflection; diff --git a/src/Squidex.Read.MongoDb/Contents/MongoContentRepository_EventHandling.cs b/src/Squidex.Read.MongoDb/Contents/MongoContentRepository_EventHandling.cs index e20978138..1599c3f16 100644 --- a/src/Squidex.Read.MongoDb/Contents/MongoContentRepository_EventHandling.cs +++ b/src/Squidex.Read.MongoDb/Contents/MongoContentRepository_EventHandling.cs @@ -12,7 +12,6 @@ using MongoDB.Bson; using MongoDB.Driver; using Squidex.Events.Contents; using Squidex.Events.Schemas; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.Dispatching; using Squidex.Infrastructure.Reflection; diff --git a/src/Squidex.Read.MongoDb/History/MongoHistoryEventRepository.cs b/src/Squidex.Read.MongoDb/History/MongoHistoryEventRepository.cs index 0b57267b1..874764150 100644 --- a/src/Squidex.Read.MongoDb/History/MongoHistoryEventRepository.cs +++ b/src/Squidex.Read.MongoDb/History/MongoHistoryEventRepository.cs @@ -13,7 +13,6 @@ using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; using Squidex.Events; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.MongoDb; using Squidex.Read.History; diff --git a/src/Squidex.Read.MongoDb/Schemas/MongoSchemaRepository_EventHandling.cs b/src/Squidex.Read.MongoDb/Schemas/MongoSchemaRepository_EventHandling.cs index c72f76f9c..11fc3cc95 100644 --- a/src/Squidex.Read.MongoDb/Schemas/MongoSchemaRepository_EventHandling.cs +++ b/src/Squidex.Read.MongoDb/Schemas/MongoSchemaRepository_EventHandling.cs @@ -14,7 +14,6 @@ using Squidex.Events; using Squidex.Events.Schemas; using Squidex.Events.Schemas.Utils; using Squidex.Infrastructure; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.Dispatching; using Squidex.Infrastructure.Reflection; diff --git a/src/Squidex.Read.MongoDb/Utils/EntityMapper.cs b/src/Squidex.Read.MongoDb/Utils/EntityMapper.cs index c9830576a..c86311bbc 100644 --- a/src/Squidex.Read.MongoDb/Utils/EntityMapper.cs +++ b/src/Squidex.Read.MongoDb/Utils/EntityMapper.cs @@ -7,7 +7,7 @@ // ========================================================================== using Squidex.Events; -using Squidex.Infrastructure.CQRS; +using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.MongoDb; // ReSharper disable ConvertIfStatementToConditionalTernaryExpression diff --git a/src/Squidex.Read.MongoDb/Utils/MongoCollectionExtensions.cs b/src/Squidex.Read.MongoDb/Utils/MongoCollectionExtensions.cs index a3fee940e..4bdd27df8 100644 --- a/src/Squidex.Read.MongoDb/Utils/MongoCollectionExtensions.cs +++ b/src/Squidex.Read.MongoDb/Utils/MongoCollectionExtensions.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; using MongoDB.Driver; using Squidex.Events; using Squidex.Infrastructure; -using Squidex.Infrastructure.CQRS; +using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.MongoDb; namespace Squidex.Read.MongoDb.Utils diff --git a/src/Squidex.Read/Apps/AppHistoryEventsCreator.cs b/src/Squidex.Read/Apps/AppHistoryEventsCreator.cs index a6f0360dc..e561c70e2 100644 --- a/src/Squidex.Read/Apps/AppHistoryEventsCreator.cs +++ b/src/Squidex.Read/Apps/AppHistoryEventsCreator.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; using Squidex.Events.Apps; using Squidex.Infrastructure; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.Dispatching; using Squidex.Read.History; diff --git a/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs b/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs index 69c3f1493..3537e873b 100644 --- a/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs +++ b/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs @@ -18,7 +18,7 @@ using Squidex.Read.Utils; namespace Squidex.Read.Apps.Services.Implementations { - public class CachingAppProvider : CachingProvider, IAppProvider + public class CachingAppProvider : CachingProviderBase, IAppProvider { private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(30); private readonly IAppRepository repository; diff --git a/src/Squidex.Read/Contents/Builders/EdmModelBuilder.cs b/src/Squidex.Read/Contents/Builders/EdmModelBuilder.cs index 3dda0acb2..3acb4e287 100644 --- a/src/Squidex.Read/Contents/Builders/EdmModelBuilder.cs +++ b/src/Squidex.Read/Contents/Builders/EdmModelBuilder.cs @@ -19,7 +19,7 @@ using Squidex.Read.Utils; namespace Squidex.Read.Contents.Builders { - public sealed class EdmModelBuilder : CachingProvider + public sealed class EdmModelBuilder : CachingProviderBase { public EdmModelBuilder(IMemoryCache cache) : base(cache) diff --git a/src/Squidex.Read/Contents/ContentHistoryEventsCreator.cs b/src/Squidex.Read/Contents/ContentHistoryEventsCreator.cs index 29e9aa32d..3e62195a3 100644 --- a/src/Squidex.Read/Contents/ContentHistoryEventsCreator.cs +++ b/src/Squidex.Read/Contents/ContentHistoryEventsCreator.cs @@ -9,7 +9,6 @@ using System.Threading.Tasks; using Squidex.Events.Contents; using Squidex.Infrastructure; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; using Squidex.Read.History; diff --git a/src/Squidex.Read/History/HistoryEventsCreatorBase.cs b/src/Squidex.Read/History/HistoryEventsCreatorBase.cs index 824a39140..c41c8a7b3 100644 --- a/src/Squidex.Read/History/HistoryEventsCreatorBase.cs +++ b/src/Squidex.Read/History/HistoryEventsCreatorBase.cs @@ -9,7 +9,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using Squidex.Infrastructure; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; // ReSharper disable ConvertIfStatementToReturnStatement diff --git a/src/Squidex.Read/History/IHistoryEventsCreator.cs b/src/Squidex.Read/History/IHistoryEventsCreator.cs index bae86c240..6fafe77cb 100644 --- a/src/Squidex.Read/History/IHistoryEventsCreator.cs +++ b/src/Squidex.Read/History/IHistoryEventsCreator.cs @@ -8,7 +8,6 @@ using System.Collections.Generic; using System.Threading.Tasks; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; namespace Squidex.Read.History diff --git a/src/Squidex.Read/Schemas/SchemaHistoryEventsCreator.cs b/src/Squidex.Read/Schemas/SchemaHistoryEventsCreator.cs index dcbb779b7..d7d622956 100644 --- a/src/Squidex.Read/Schemas/SchemaHistoryEventsCreator.cs +++ b/src/Squidex.Read/Schemas/SchemaHistoryEventsCreator.cs @@ -10,7 +10,6 @@ using System.Threading.Tasks; using Squidex.Events; using Squidex.Events.Schemas; using Squidex.Infrastructure; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; using Squidex.Read.History; diff --git a/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs b/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs index 85cd97588..d3e857e52 100644 --- a/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs +++ b/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs @@ -19,7 +19,7 @@ using Squidex.Read.Utils; namespace Squidex.Read.Schemas.Services.Implementations { - public class CachingSchemaProvider : CachingProvider, ISchemaProvider + public class CachingSchemaProvider : CachingProviderBase, ISchemaProvider { private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(10); private readonly ISchemaRepository repository; diff --git a/src/Squidex.Read/Utils/CachingProvider.cs b/src/Squidex.Read/Utils/CachingProviderBase.cs similarity index 83% rename from src/Squidex.Read/Utils/CachingProvider.cs rename to src/Squidex.Read/Utils/CachingProviderBase.cs index 84f12e4ff..00a3491c6 100644 --- a/src/Squidex.Read/Utils/CachingProvider.cs +++ b/src/Squidex.Read/Utils/CachingProviderBase.cs @@ -1,5 +1,5 @@ // ========================================================================== -// CachingProvider.cs +// CachingProviderBase.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -11,7 +11,7 @@ using Squidex.Infrastructure; namespace Squidex.Read.Utils { - public abstract class CachingProvider + public abstract class CachingProviderBase { private readonly IMemoryCache cache; @@ -20,7 +20,7 @@ namespace Squidex.Read.Utils get { return cache; } } - protected CachingProvider(IMemoryCache cache) + protected CachingProviderBase(IMemoryCache cache) { Guard.NotNull(cache, nameof(cache)); diff --git a/src/Squidex.Write/Apps/AppDomainObject.cs b/src/Squidex.Write/Apps/AppDomainObject.cs index c2ee22d62..b1d8a1aae 100644 --- a/src/Squidex.Write/Apps/AppDomainObject.cs +++ b/src/Squidex.Write/Apps/AppDomainObject.cs @@ -22,7 +22,7 @@ using Squidex.Write.Apps.Commands; namespace Squidex.Write.Apps { - public class AppDomainObject : DomainObject + public class AppDomainObject : DomainObjectBase { private static readonly Language DefaultLanguage = Language.EN; private readonly AppContributors contributors = new AppContributors(); diff --git a/src/Squidex.Write/Contents/ContentDomainObject.cs b/src/Squidex.Write/Contents/ContentDomainObject.cs index 269fef8ee..f56eda13e 100644 --- a/src/Squidex.Write/Contents/ContentDomainObject.cs +++ b/src/Squidex.Write/Contents/ContentDomainObject.cs @@ -18,7 +18,7 @@ using Squidex.Write.Contents.Commands; namespace Squidex.Write.Contents { - public class ContentDomainObject : DomainObject + public class ContentDomainObject : DomainObjectBase { private bool isDeleted; private bool isCreated; diff --git a/src/Squidex.Write/Schemas/SchemaDomainObject.cs b/src/Squidex.Write/Schemas/SchemaDomainObject.cs index edaf8d9f3..bda7fdab9 100644 --- a/src/Squidex.Write/Schemas/SchemaDomainObject.cs +++ b/src/Squidex.Write/Schemas/SchemaDomainObject.cs @@ -19,7 +19,7 @@ using Squidex.Write.Schemas.Commands; namespace Squidex.Write.Schemas { - public class SchemaDomainObject : DomainObject + public class SchemaDomainObject : DomainObjectBase { private readonly FieldRegistry registry; private bool isDeleted; diff --git a/src/Squidex/Controllers/ContentApi/PingController.cs b/src/Squidex/Controllers/ContentApi/PingController.cs index cc07b3fb8..7f2db9b0e 100644 --- a/src/Squidex/Controllers/ContentApi/PingController.cs +++ b/src/Squidex/Controllers/ContentApi/PingController.cs @@ -16,7 +16,7 @@ namespace Squidex.Controllers.ContentApi [Authorize(Roles = SquidexRoles.AppEditor)] [ApiExceptionFilter] [ServiceFilter(typeof(AppFilterAttribute))] - public class PingController : ControllerBase + public class PingController : Controller { [HttpGet] [Route("ping/{app}/")] diff --git a/src/Squidex/Controllers/ControllerBase.cs b/src/Squidex/Controllers/ControllerBase.cs index ae8eb7f0b..93ba5ef00 100644 --- a/src/Squidex/Controllers/ControllerBase.cs +++ b/src/Squidex/Controllers/ControllerBase.cs @@ -23,11 +23,6 @@ namespace Squidex.Controllers CommandBus = commandBus; } - protected ControllerBase() - { - throw new NotImplementedException(); - } - protected IAppEntity App { get diff --git a/src/Squidex/Pipeline/ApiExceptionFilterAttribute.cs b/src/Squidex/Pipeline/ApiExceptionFilterAttribute.cs index a65042ac5..6c1487a01 100644 --- a/src/Squidex/Pipeline/ApiExceptionFilterAttribute.cs +++ b/src/Squidex/Pipeline/ApiExceptionFilterAttribute.cs @@ -18,7 +18,7 @@ using Squidex.Controllers.Api; namespace Squidex.Pipeline { - public class ApiExceptionFilterAttribute : ActionFilterAttribute, IExceptionFilter + public sealed class ApiExceptionFilterAttribute : ActionFilterAttribute, IExceptionFilter { private static readonly List> handlers = new List>(); diff --git a/src/Squidex/Pipeline/AppFilterAttribute.cs b/src/Squidex/Pipeline/AppFilterAttribute.cs index 4c426b520..38fd2a890 100644 --- a/src/Squidex/Pipeline/AppFilterAttribute.cs +++ b/src/Squidex/Pipeline/AppFilterAttribute.cs @@ -22,6 +22,7 @@ using Squidex.Read.Apps.Services; namespace Squidex.Pipeline { + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public sealed class AppFilterAttribute : Attribute, IAsyncAuthorizationFilter { private readonly IAppProvider appProvider; diff --git a/src/Squidex/Pipeline/RandomErrorAttribute.cs b/src/Squidex/Pipeline/RandomErrorAttribute.cs index 93f24ae41..5c56e6f9a 100644 --- a/src/Squidex/Pipeline/RandomErrorAttribute.cs +++ b/src/Squidex/Pipeline/RandomErrorAttribute.cs @@ -12,7 +12,7 @@ using Microsoft.AspNetCore.Mvc.Filters; namespace Squidex.Pipeline { - public class RandomErrorAttribute : ActionFilterAttribute + public sealed class RandomErrorAttribute : ActionFilterAttribute { private static readonly Random random = new Random(); diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs index a1278a0b7..ecc495b05 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs @@ -29,7 +29,7 @@ namespace Squidex.Infrastructure.CQRS.Commands public long? ExpectedVersion { get; set; } } - private sealed class MyDomainObject : DomainObject + private sealed class MyDomainObject : DomainObjectBase { public MyDomainObject(Guid id, int version) : base(id, version) diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs index e1e579bdb..742b509cc 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectFactoryTests.cs @@ -17,7 +17,7 @@ namespace Squidex.Infrastructure.CQRS.Commands { public class DefaultDomainObjectFactoryTests { - private sealed class DO : DomainObject + private sealed class DO : DomainObjectBase { public DO(Guid id, int version) : base(id, version) { diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs index ffe4340e4..6a4178e1b 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs @@ -47,7 +47,7 @@ namespace Squidex.Infrastructure.CQRS.Commands { } - public sealed class MyDomainObject : DomainObject + public sealed class MyDomainObject : DomainObjectBase { private readonly List appliedEvents = new List(); diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs b/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectBaseTests.cs similarity index 96% rename from tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs rename to tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectBaseTests.cs index c2e87e6ce..32c770f19 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectBaseTests.cs @@ -1,5 +1,5 @@ // ========================================================================== -// DomainObjectTest.cs +// DomainObjectBaseTests.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -15,13 +15,13 @@ using System.Linq; namespace Squidex.Infrastructure.CQRS { - public class DomainObjectTest + public class DomainObjectBaseTests { private sealed class MyEvent : IEvent { } - private sealed class DO : DomainObject + private sealed class DO : DomainObjectBase { public DO(Guid id, int version) : base(id, version) diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Events/DefaultNameResolverTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Events/DefaultNameResolverTests.cs index 575039533..bc35d66a6 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Events/DefaultNameResolverTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Events/DefaultNameResolverTests.cs @@ -15,7 +15,7 @@ namespace Squidex.Infrastructure.CQRS.Events { private readonly DefaultNameResolver sut = new DefaultNameResolver(); - private sealed class MyUser : DomainObject + private sealed class MyUser : DomainObjectBase { public MyUser(Guid id, int version) : base(id, version) @@ -27,7 +27,7 @@ namespace Squidex.Infrastructure.CQRS.Events } } - private sealed class MyUserDomainObject : DomainObject + private sealed class MyUserDomainObject : DomainObjectBase { public MyUserDomainObject(Guid id, int version) : base(id, version) diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/EnvelopeExtensionsTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeExtensionsTests.cs similarity index 98% rename from tests/Squidex.Infrastructure.Tests/CQRS/EnvelopeExtensionsTests.cs rename to tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeExtensionsTests.cs index eb0bc8436..c66c25fe3 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/EnvelopeExtensionsTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeExtensionsTests.cs @@ -11,7 +11,7 @@ using System.Globalization; using NodaTime; using Xunit; -namespace Squidex.Infrastructure.CQRS +namespace Squidex.Infrastructure.CQRS.Events { public class EnvelopeExtensionsTests { diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/EnvelopeHeaderTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeHeaderTests.cs similarity index 97% rename from tests/Squidex.Infrastructure.Tests/CQRS/EnvelopeHeaderTests.cs rename to tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeHeaderTests.cs index c77ad7af8..af879bba2 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/EnvelopeHeaderTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Events/EnvelopeHeaderTests.cs @@ -9,7 +9,7 @@ using System.Linq; using Xunit; -namespace Squidex.Infrastructure.CQRS +namespace Squidex.Infrastructure.CQRS.Events { public class EnvelopeHeaderTests { diff --git a/tests/Squidex.Infrastructure.Tests/DisposableObjectTests.cs b/tests/Squidex.Infrastructure.Tests/DisposableObjectBaseTests.cs similarity index 94% rename from tests/Squidex.Infrastructure.Tests/DisposableObjectTests.cs rename to tests/Squidex.Infrastructure.Tests/DisposableObjectBaseTests.cs index 2801b87fd..365dc7edb 100644 --- a/tests/Squidex.Infrastructure.Tests/DisposableObjectTests.cs +++ b/tests/Squidex.Infrastructure.Tests/DisposableObjectBaseTests.cs @@ -1,5 +1,5 @@ // ========================================================================== -// DisposableObjectTest.cs +// DisposableObjectBaseTests.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -11,9 +11,9 @@ using Xunit; namespace Squidex.Infrastructure { - public class DisposableObjectTests + public class DisposableObjectBaseTests { - public sealed class MyDisposableObject : DisposableObject + public sealed class MyDisposableObject : DisposableObjectBase { public int DisposeCallCount { get; set; } diff --git a/tests/Squidex.Infrastructure.Tests/LanguageTests.cs b/tests/Squidex.Infrastructure.Tests/LanguageTests.cs index be10d78c4..9160ed344 100644 --- a/tests/Squidex.Infrastructure.Tests/LanguageTests.cs +++ b/tests/Squidex.Infrastructure.Tests/LanguageTests.cs @@ -74,7 +74,7 @@ namespace Squidex.Infrastructure [InlineData("en ", "en")] public void Should_parse_valid_languages(string input, string languageCode) { - var language = Language.TryParse(input); + var language = Language.ParseOrNull(input); Assert.Equal(language, Language.GetLanguage(languageCode)); } @@ -87,7 +87,7 @@ namespace Squidex.Infrastructure [InlineData(null)] public void Should_parse_invalid_languages(string input) { - var language = Language.TryParse(input); + var language = Language.ParseOrNull(input); Assert.Null(language); } diff --git a/tests/Squidex.Write.Tests/TestHelpers/AssertHelper.cs b/tests/Squidex.Write.Tests/TestHelpers/AssertHelper.cs index 27dacb7e1..115ff11ea 100644 --- a/tests/Squidex.Write.Tests/TestHelpers/AssertHelper.cs +++ b/tests/Squidex.Write.Tests/TestHelpers/AssertHelper.cs @@ -9,7 +9,6 @@ using System.Collections.Generic; using System.Linq; using FluentAssertions; -using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.CQRS.Events; namespace Squidex.Write.TestHelpers diff --git a/tests/Squidex.Write.Tests/TestHelpers/HandlerTestBase.cs b/tests/Squidex.Write.Tests/TestHelpers/HandlerTestBase.cs index ecb1fdfbd..4679d6a5c 100644 --- a/tests/Squidex.Write.Tests/TestHelpers/HandlerTestBase.cs +++ b/tests/Squidex.Write.Tests/TestHelpers/HandlerTestBase.cs @@ -15,7 +15,7 @@ using Squidex.Infrastructure.CQRS.Commands; namespace Squidex.Write.TestHelpers { - public abstract class HandlerTestBase where T : DomainObject + public abstract class HandlerTestBase where T : DomainObjectBase { private sealed class MockupHandler : IAggregateHandler { diff --git a/tools/GenerateLanguages/Program.cs b/tools/GenerateLanguages/Program.cs index ef474517c..4d25e559b 100644 --- a/tools/GenerateLanguages/Program.cs +++ b/tools/GenerateLanguages/Program.cs @@ -30,9 +30,13 @@ namespace GenerateLanguages writer.WriteLine("// Copyright (c) Squidex Group"); writer.WriteLine("// All rights reserved."); writer.WriteLine("// =========================================================================="); + writer.WriteLine("// "); + writer.WriteLine(); + writer.WriteLine("using System.CodeDom.Compiler;"); writer.WriteLine(); writer.WriteLine("namespace Squidex.Infrastructure"); writer.WriteLine("{"); + writer.WriteLine(" [GeneratedCode(\"LanguagesGenerator\", \"1.0\")]"); writer.WriteLine(" partial class Language"); writer.WriteLine(" {");