Exemplo n.º 1
0
        public ICodeGenerator Create(
            string defaultNamespace,
            string inputFileContents,
            string inputFilePath,
            SupportedLanguage language,
            SupportedCodeGenerator generator)
        {
            switch (generator)
            {
            case SupportedCodeGenerator.AutoRest:
                return(new AutoRestCSharpCodeGenerator(
                           inputFilePath,
                           defaultNamespace));

            case SupportedCodeGenerator.NSwag:
                return(new NSwagCSharpCodeGenerator(
                           inputFilePath,
                           defaultNamespace,
                           optionsFactory.Create <INSwagOptions, NSwagOptionsPage>()));

            case SupportedCodeGenerator.Swagger:
                return(new SwaggerCSharpCodeGenerator(
                           inputFilePath,
                           defaultNamespace,
                           optionsFactory.Create <IGeneralOptions, GeneralOptionPage>()));

            case SupportedCodeGenerator.OpenApi:
                return(new OpenApiCSharpCodeGenerator(
                           inputFilePath,
                           defaultNamespace,
                           optionsFactory.Create <IGeneralOptions, GeneralOptionPage>()));
            }

            throw new NotSupportedException();
        }
Exemplo n.º 2
0
        public static async Task InstallMissingPackagesAsync(
            this Project project,
            AsyncPackage package,
            SupportedCodeGenerator codeGenerator)
        {
            var options = VsPackage.Instance.GetDialogPage(typeof(GeneralOptionPage)) as IGeneralOptions;

            if (options?.InstallMissingPackages == false)
            {
                Trace.WriteLine("Skipping automatic depedency package installation");
                return;
            }

            Trace.WriteLine("Checking required dependencies");

            var componentModel = (IComponentModel)await package.GetServiceAsync(typeof(SComponentModel));

            Assumes.Present(componentModel);

            var packageInstaller  = componentModel.GetService <IVsPackageInstaller>();
            var installedServices = componentModel.GetService <IVsPackageInstallerServices>();
            var installedPackages = installedServices.GetInstalledPackages(project)?.ToList() ?? new List <IVsPackageMetadata>();

            var requiredPackages = codeGenerator.GetDependencies();

            foreach (var packageDependency in requiredPackages)
            {
                InstallPackageDependency(project, packageDependency, installedPackages, packageInstaller);
            }
        }
Exemplo n.º 3
0
        public IEnumerable <PackageDependency> GetDependencies(
            SupportedCodeGenerator generator)
        {
            switch (generator)
            {
            case SupportedCodeGenerator.NSwag:
            case SupportedCodeGenerator.NSwagStudio:
                yield return(PackageDependencies.NewtonsoftJson);

                yield return(PackageDependencies.SystemRuntimeSerializationPrimitives);

                yield return(PackageDependencies.SystemComponentModelAnnotations);

                break;

            case SupportedCodeGenerator.AutoRest:
                yield return(PackageDependencies.MicrosoftRestClientRuntime);

                yield return(PackageDependencies.NewtonsoftJson);

                break;

            case SupportedCodeGenerator.Swagger:
            case SupportedCodeGenerator.OpenApi:
                yield return(PackageDependencies.RestSharp);

                yield return(PackageDependencies.JsonSubTypes);

                yield return(PackageDependencies.SystemRuntimeSerializationPrimitives);

                yield return(PackageDependencies.SystemComponentModelAnnotations);

                break;
            }
        }
Exemplo n.º 4
0
        public static string GetCustomToolName(this SupportedCodeGenerator generator)
        {
            string customTool = null;

            switch (generator)
            {
            case SupportedCodeGenerator.NSwag:
                customTool = nameof(NSwagCodeGenerator);
                break;

            case SupportedCodeGenerator.AutoRest:
                customTool = nameof(AutoRestCodeGenerator);
                break;

            case SupportedCodeGenerator.Swagger:
                customTool = nameof(SwaggerCodeGenerator);
                break;

            case SupportedCodeGenerator.OpenApi:
                customTool = nameof(OpenApiCodeGenerator);
                break;
            }

            return(customTool);
        }
Exemplo n.º 5
0
 internal VisualBasicSingleFileCodeGenerator(
     SupportedCodeGenerator supportedCodeGenerator)
     : base(
         supportedCodeGenerator,
         SupportedLanguage.VisualBasic,
         new CSharpToVisualBasicLanguageConverter())
 {
 }
Exemplo n.º 6
0
 protected SingleFileCodeGenerator(
     SupportedCodeGenerator supportedCodeGenerator,
     SupportedLanguage supportedLanguage = SupportedLanguage.CSharp,
     ILanguageConverter converter        = null)
 {
     this.CodeGenerator     = supportedCodeGenerator;
     this.supportedLanguage = supportedLanguage;
     this.converter         = converter;
 }
Exemplo n.º 7
0
        public IEnumerable <PackageDependency> GetDependencies(SupportedCodeGenerator generator)
        {
            switch (generator)
            {
            case SupportedCodeGenerator.RestEase:
                yield return(PackageDependencies.RestEase);

                break;
            }
        }
Exemplo n.º 8
0
        private static string GetProjectContents(
            ProjectTypes projecType,
            SupportedCodeGenerator generator)
        {
            switch (generator)
            {
            case SupportedCodeGenerator.NSwag:
            case SupportedCodeGenerator.NSwagStudio:
                switch (projecType)
                {
                case ProjectTypes.DotNetCoreApp:
                    return(NSwagProjectFileContents.NetCoreApp);

                case ProjectTypes.DotNetStandardLibrary:
                    return(NSwagProjectFileContents.NetStandardLibrary);

                default:
                    throw new ArgumentOutOfRangeException(nameof(projecType), projecType, null);
                }

            case SupportedCodeGenerator.AutoRest:
                switch (projecType)
                {
                case ProjectTypes.DotNetCoreApp:
                    return(AutoRestProjectFileContents.NetCoreApp);

                case ProjectTypes.DotNetStandardLibrary:
                    return(AutoRestProjectFileContents.NetStandardLibrary);

                default:
                    throw new ArgumentOutOfRangeException(nameof(projecType), projecType, null);
                }

            case SupportedCodeGenerator.Swagger:
            case SupportedCodeGenerator.OpenApi:
                switch (projecType)
                {
                case ProjectTypes.DotNetCoreApp:
                    return(SwaggerProjectFileContents.NetCoreApp);

                case ProjectTypes.DotNetStandardLibrary:
                    return(SwaggerProjectFileContents.NetStandardLibrary);

                case ProjectTypes.DotNetFramework:
                    return(SwaggerProjectFileContents.NetFrameworkApp);

                default:
                    throw new ArgumentOutOfRangeException(nameof(projecType), projecType, null);
                }

            default:
                throw new ArgumentOutOfRangeException(nameof(generator), generator, null);
            }
        }
Exemplo n.º 9
0
        public IEnumerable <PackageDependency> GetDependencies(
            SupportedCodeGenerator generator)
        {
            var list = new List <PackageDependency>();

            switch (generator)
            {
            case SupportedCodeGenerator.NSwag:
            case SupportedCodeGenerator.NSwagStudio:
                list.AddRange(new[]
                {
                    PackageDependencies.NewtonsoftJson,
                    PackageDependencies.SystemRuntimeSerializationPrimitives,
                    PackageDependencies.SystemComponentModelAnnotations
                });
                break;

            case SupportedCodeGenerator.AutoRest:
                list.AddRange(new[]
                {
                    PackageDependencies.MicrosoftRestClientRuntime,
                    PackageDependencies.NewtonsoftJson
                });
                break;

            case SupportedCodeGenerator.Swagger:
                list.AddRange(new[]
                {
                    PackageDependencies.RestSharp,
                    PackageDependencies.JsonSubTypes,
                    PackageDependencies.NewtonsoftJson,
                    PackageDependencies.SystemRuntimeSerializationPrimitives,
                    PackageDependencies.SystemComponentModelAnnotations,
                    PackageDependencies.MicrosoftCSharp
                });
                break;

            case SupportedCodeGenerator.OpenApi:
                list.AddRange(new[]
                {
                    PackageDependencies.Polly,
                    PackageDependencies.RestSharpLatest,
                    PackageDependencies.JsonSubTypesLatest,
                    PackageDependencies.NewtonsoftJson,
                    PackageDependencies.SystemRuntimeSerializationPrimitives,
                    PackageDependencies.SystemComponentModelAnnotations,
                    PackageDependencies.MicrosoftCSharp
                });
                break;
            }
            return(list);
        }
        public static string GetCustomToolName(this SupportedCodeGenerator generator)
        {
            string customTool = null;

            switch (generator)
            {
            case SupportedCodeGenerator.RestEase:
                customTool = nameof(RestEaseCodeGenerator);
                break;
            }

            return(customTool);
        }
        public ICodeGenerator Create(
            string defaultNamespace,
            string inputFileContents,
            string inputFilePath,
            SupportedLanguage language,
            SupportedCodeGenerator generator)
        {
            remoteLogger.TrackFeatureUsage(generator.GetName());

            switch (generator)
            {
            case SupportedCodeGenerator.AutoRest:
                return(new AutoRestCSharpCodeGenerator(
                           inputFilePath,
                           defaultNamespace,
                           optionsFactory.Create <IAutoRestOptions, AutoRestOptionsPage>(),
                           processLauncher,
                           documentFactory,
                           dependencyInstaller));

            case SupportedCodeGenerator.NSwag:
                return(new NSwagCSharpCodeGenerator(
                           inputFilePath,
                           new OpenApiDocumentFactory(),
                           new NSwagCodeGeneratorSettingsFactory(
                               defaultNamespace,
                               optionsFactory.Create <INSwagOptions, NSwagOptionsPage>())));

            case SupportedCodeGenerator.Swagger:
                return(new SwaggerCSharpCodeGenerator(
                           inputFilePath,
                           defaultNamespace,
                           optionsFactory.Create <IGeneralOptions, GeneralOptionPage>(),
                           processLauncher,
                           dependencyInstaller));

            case SupportedCodeGenerator.OpenApi:
                return(new OpenApiCSharpCodeGenerator(
                           inputFilePath,
                           defaultNamespace,
                           optionsFactory.Create <IGeneralOptions, GeneralOptionPage>(),
                           optionsFactory.Create <IOpenApiGeneratorOptions, OpenApiGeneratorOptionsPage>(),
                           processLauncher,
                           dependencyInstaller));

            default:
                throw new NotSupportedException();
            }
        }
Exemplo n.º 12
0
        public static void BuildCSharp(
            ProjectTypes projecType,
            string generatedCode,
            SupportedCodeGenerator generator)
        {
            var path = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString("N"));

            Directory.CreateDirectory(path);
            var projectFile     = Path.Combine(path, "Project.csproj");
            var projectContents = GetProjectContents(projecType, generator);

            Trace.WriteLine(projectContents);
            File.WriteAllText(projectFile, projectContents);
            File.WriteAllText(Path.Combine(path, "Generated.cs"), generatedCode);
            new ProcessLauncher().Start("dotnet.exe", $"build \"{projectFile}\"");
        }
        public static string GetName(this SupportedCodeGenerator generator)
        {
            switch (generator)
            {
            case SupportedCodeGenerator.Swagger:
                return("Swagger Codegen CLI");

            case SupportedCodeGenerator.OpenApi:
                return("OpenAPI Generator");

            case SupportedCodeGenerator.NSwagStudio:
                return("NSwag Studio");

            default:
                return(generator.ToString());
            }
        }
Exemplo n.º 14
0
        public void Generate_Test(SupportedCodeGenerator generator)
        {
            var code                  = Test.CreateAnnonymous <string>();
            var input                 = Test.CreateAnnonymous <string>();
            var contents              = Test.CreateAnnonymous <string>();
            var @namespace            = Test.CreateAnnonymous <string>();
            var rgbOutputFileContents = new[] { IntPtr.Zero };

            var progressMock = new Mock <IVsGeneratorProgress>();

            var generatorMock = new Mock <ICodeGenerator>();

            generatorMock
            .Setup(c => c.GenerateCode(progressMock.Object))
            .Returns(code);

            var factoryMock = new Mock <ICodeGeneratorFactory>();

            factoryMock
            .Setup(c => c.Create(@namespace, contents, input, lang, generator))
            .Returns(generatorMock.Object);

            var sut = new TestSingleFileCodeGenerator(generator)
            {
                Factory = factoryMock.Object
            };

            var result = sut.Generate(
                input,
                contents,
                @namespace,
                rgbOutputFileContents,
                out var pcbOutput,
                progressMock.Object);

            result.Should().Be(0);
            pcbOutput.Should().Be((uint)code.Length);
            rgbOutputFileContents[0].Should().NotBe(IntPtr.Zero);

            progressMock.Verify(
                c => c.Progress(It.IsAny <uint>(), It.IsAny <uint>()),
                Times.Exactly(2));
        }
        public static async System.Threading.Tasks.Task InstallMissingPackagesAsync(
            this Project project,
            AsyncPackage package,
            SupportedCodeGenerator codeGenerator)
        {
            Trace.WriteLine("Checking required dependencies");

            var componentModel = (IComponentModel)await package.GetServiceAsync(typeof(SComponentModel));

            Assumes.Present(componentModel);

            var packageInstaller  = componentModel.GetService <IVsPackageInstaller>();
            var installedServices = componentModel.GetService <IVsPackageInstallerServices>();
            var installedPackages = installedServices.GetInstalledPackages(project)?.ToList() ?? new List <IVsPackageMetadata>();

            var requiredPackages = codeGenerator.GetDependencies();

            foreach (var packageDependency in requiredPackages)
            {
                InstallPackageDependency(project, packageDependency, installedPackages, packageInstaller);
            }
        }
        private void Assert(
            SupportedCodeGenerator generator,
            IOptionsFactory optionsFactory = null)
        {
            var rgbOutputFileContents = new[] { IntPtr.Zero };
            var progressMock          = new Mock <IVsGeneratorProgress>();

            var sut = new CSharpSingleFileCodeGenerator(generator);

            sut.Factory = new CodeGeneratorFactory(optionsFactory, null);

            var result = sut.Generate(
                Path.GetFullPath(SwaggerV3YamlFilename),
                string.Empty,
                "GeneratedCode",
                rgbOutputFileContents,
                out var pcbOutput,
                progressMock.Object);

            result.Should().Be(0);
            pcbOutput.Should().NotBe(0);
            rgbOutputFileContents[0].Should().NotBe(IntPtr.Zero);
        }
Exemplo n.º 17
0
 public static bool BuildCSharp(
     ProjectTypes projecType,
     string generatedCode,
     SupportedCodeGenerator generator)
 {
     try
     {
         var path = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString("N"));
         Directory.CreateDirectory(path);
         var projectFile     = Path.Combine(path, "Project.csproj");
         var projectContents = GetProjectContents(projecType, generator);
         Trace.WriteLine(projectContents);
         File.WriteAllText(projectFile, projectContents);
         File.WriteAllText(Path.Combine(path, "Generated.cs"), generatedCode);
         new ProcessLauncher().Start(GetDotNetCli(), $"build \"{projectFile}\"");
         return(true);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         return(false);
     }
 }
        private static void Assert(
            SupportedCodeGenerator generator,
            IOptionsFactory optionsFactory = null)
        {
            var rgbOutputFileContents = new[] { IntPtr.Zero };
            var progressMock          = new Mock <IVsGeneratorProgress>();

            var sut = new CSharpSingleFileCodeGenerator(generator);

            sut.Factory = new CodeGeneratorFactory(optionsFactory);

            var result = sut.Generate(
                Path.GetFullPath("Swagger.json"),
                string.Empty,
                typeof(CSharpSingleFileCodeGeneratorTests).Namespace,
                rgbOutputFileContents,
                out var pcbOutput,
                progressMock.Object);

            result.Should().Be(0);
            pcbOutput.Should().NotBe(0);
            rgbOutputFileContents[0].Should().NotBe(IntPtr.Zero);
        }
Exemplo n.º 19
0
 internal TestSingleFileCodeGenerator(
     SupportedCodeGenerator supportedCodeGenerator)
     : base(supportedCodeGenerator, SupportedLanguage.CSharp)
 {
 }
Exemplo n.º 20
0
 internal CSharpSingleFileCodeGenerator(
     SupportedCodeGenerator supportedCodeGenerator)
     : base(supportedCodeGenerator)
 {
 }
Exemplo n.º 21
0
 public static IEnumerable <PackageDependency> GetDependencies(
     this SupportedCodeGenerator generator)
 => DependencyListProvider
 .GetDependencies(generator);