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(); }
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); } }
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; } }
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); }
internal VisualBasicSingleFileCodeGenerator( SupportedCodeGenerator supportedCodeGenerator) : base( supportedCodeGenerator, SupportedLanguage.VisualBasic, new CSharpToVisualBasicLanguageConverter()) { }
protected SingleFileCodeGenerator( SupportedCodeGenerator supportedCodeGenerator, SupportedLanguage supportedLanguage = SupportedLanguage.CSharp, ILanguageConverter converter = null) { this.CodeGenerator = supportedCodeGenerator; this.supportedLanguage = supportedLanguage; this.converter = converter; }
public IEnumerable <PackageDependency> GetDependencies(SupportedCodeGenerator generator) { switch (generator) { case SupportedCodeGenerator.RestEase: yield return(PackageDependencies.RestEase); break; } }
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); } }
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(); } }
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()); } }
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); }
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); }
internal TestSingleFileCodeGenerator( SupportedCodeGenerator supportedCodeGenerator) : base(supportedCodeGenerator, SupportedLanguage.CSharp) { }
internal CSharpSingleFileCodeGenerator( SupportedCodeGenerator supportedCodeGenerator) : base(supportedCodeGenerator) { }
public static IEnumerable <PackageDependency> GetDependencies( this SupportedCodeGenerator generator) => DependencyListProvider .GetDependencies(generator);