Esempio n. 1
0
        private void InvokeGenerator(GeneratorContext context, ICodeGeneratorFactory factory, ClassDeclarationSyntax node)
        {
            var generatedCount = 0;

            CompilationUnit unit = default;

            foreach (var generator in factory.GetGenerators())
            {
                context.CancellationToken.ThrowIfCancellationRequested();

                if (_generatorCache.AddNew(node, generator.GetGeneratedMemberName()))
                {
                    if (generatedCount == 0)
                    {
                        unit = new CompilationUnit(node);
                    }
                    else
                    {
                        unit.Output.AppendLine();
                    }

                    generator.GenerateMemberDeclaration(unit.Output);

                    generatedCount++;
                }
            }

            context.CancellationToken.ThrowIfCancellationRequested();
            if (generatedCount > 0)
            {
                var source = unit.GetSourceText();
                context.AddOutput(node, factory.GetHintName(), source);
            }
        }
Esempio n. 2
0
        private void InvokeGenerator(
            GeneratorContext context,
            ICodeGeneratorFactory factory,
            ClassDeclarationSyntax node,
            Logger logger)
        {
            if (!factory.Validate(logger))
            {
                return;
            }

            var contract = new ContractDescription(factory.ServiceType);

            ShowWarnings(logger, contract, factory.ServiceType);

            var unit = new CompilationUnit(node);

            var generatedCount = 0;
            var imports        = new HashSet <string>(StringComparer.Ordinal);

            foreach (var generator in factory.GetGenerators(contract, node).Concat(GetSharedGenerators(contract)))
            {
                context.CancellationToken.ThrowIfCancellationRequested();

                if (_generatorCache.AddNew(node, generator.GetGeneratedMemberName()))
                {
                    if (generatedCount > 0)
                    {
                        unit.Output.AppendLine();
                    }

                    generator.GenerateMemberDeclaration(unit.Output);

                    foreach (var i in generator.GetUsing())
                    {
                        imports.Add(i);
                    }

                    generatedCount++;
                }
            }

            context.CancellationToken.ThrowIfCancellationRequested();
            if (generatedCount > 0)
            {
                var source = unit.GetSourceText(GetSharedUsing().Concat(imports));
                context.AddOutput(node, factory.GetHintName(contract), source);
            }
        }
Esempio n. 3
0
        public void AddOutput()
        {
            var csExtension = string.Empty;

            _globalOptions
            .Setup(o => o.TryGetValue("build_property.servicemodelgrpcdesigntime_csextension", out csExtension))
            .Returns(false);

            var designTime = "true";

            _globalOptions
            .Setup(o => o.TryGetValue("build_property.servicemodelgrpcdesigntime_designtime", out designTime))
            .Returns(true);

            var projectDir = "dummy";

            _globalOptions
            .Setup(o => o.TryGetValue("build_property.projectdir", out projectDir))
            .Returns(true);

            using var output = new TempDirectory();

            var intermediatePath = output.Location;

            _globalOptions
            .Setup(o => o.TryGetValue("build_property.intermediateoutputpath", out intermediatePath))
            .Returns(true);

            var node   = SyntaxFactory.ClassDeclaration("ClassName");
            var source = "public class A {}";

            var sut = new GeneratorContext(_context);

            sut.AddOutput(node, "hint_name", source);

            DirectoryAssert.Exists(output.Location);
            Directory.GetFiles(output.Location).Length.ShouldBe(1);

            var fileName = Path.GetFileName(Directory.GetFiles(output.Location)[0]);

            fileName.ShouldBe(fileName.ToLowerInvariant());

            FileAssert.Exists(Path.Combine(output.Location, fileName));
        }