示例#1
0
    protected virtual IEnumerable <GeneratedWrapper> ExecuteImpl(GeneratorExecutionContext context)
    {
        var typeBuilder = new MultiTypeBuilder(context.Compilation.SyntaxTrees, context.Compilation, new TypeBuilder(), new PatchParametersWalker());
        var types       = typeBuilder.Generate();

        foreach (var generatedType in types)
        {
            context.AddSource(generatedType.FileName, SourceText.From(generatedType.SourceCode, Encoding.UTF8));
        }

        var tyeRepoGenerator = new TypeRepositoryGenerator();
        var typeRepoClass    = tyeRepoGenerator.CreateTypeRepository(types.Select(x => (x.SourceTypeFullName, x.TargetTypeFullName)), context.Compilation.Assembly.Name);

        context.AddSource("LaDeakJsonMergePatchTypeRepo", SourceText.From(typeRepoClass, Encoding.UTF8));
        return(types);
    }
示例#2
0
        public void CustomNamespace_CreateRepository_AppendsSAvoidCollision()
        {
            var sut    = new TypeRepositoryGenerator();
            var result = sut.CreateTypeRepository(null, "CustomNamespace");

            Assert.Equal(@"
namespace LaDeak.JsonMergePatch.Generated.SafeCustomNamespace
{
    public class TypeRepository : LaDeak.JsonMergePatch.Abstractions.ITypeRepository
    {       
        private System.Collections.Generic.Dictionary<System.Type, System.Type> _repository = new System.Collections.Generic.Dictionary<System.Type, System.Type>();

        private TypeRepository()
        {

        }

        public static LaDeak.JsonMergePatch.Abstractions.ITypeRepository Instance { get; } = new TypeRepository();

        public void Add<TSource, TWrapper>() where TWrapper : LaDeak.JsonMergePatch.Abstractions.Patch<TSource>
        {
            _repository.Add(typeof(TSource), typeof(TWrapper));
        }

        public void Add(System.Type source, System.Type wrapper)
        {
            if (wrapper.IsSubclassOf(typeof(LaDeak.JsonMergePatch.Abstractions.Patch<>).MakeGenericType(source)))
                _repository.Add(source, wrapper);
        }

        public bool TryGet(System.Type source, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out System.Type wrapper)
        {
            return _repository.TryGetValue(source, out wrapper);
        }

        public System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.Type, System.Type>> GetAll() => _repository;
    }
}", result);
        }
示例#3
0
 public void WithTypes_CreateRepository_GeneratesEmptyConstructor()
 {
     var sut    = new TypeRepositoryGenerator();
     var result = sut.CreateTypeRepository(new[] { ("TestDto0", "TestDto0Wrapped"), ("TestDto1", "TestDto1Wrapped") }, string.Empty);