Skip to content

Commit

Permalink
Updated NJS, minor tpl and code fixes, #591
Browse files Browse the repository at this point in the history
  • Loading branch information
RicoSuter committed Feb 14, 2017
1 parent 9e63c08 commit d888c6d
Show file tree
Hide file tree
Showing 51 changed files with 1,313 additions and 1,294 deletions.
4 changes: 2 additions & 2 deletions src/NSwag.AspNet.Owin/NSwag.AspNet.Owin.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NJsonSchema, Version=8.3.6252.27806, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.8.3.6252.27806\lib\net45\NJsonSchema.dll</HintPath>
<Reference Include="NJsonSchema, Version=8.4.6254.24648, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.8.4.6254.24648\lib\net45\NJsonSchema.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.AspNet.Owin/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
<package id="Microsoft.Owin.FileSystems" version="3.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.StaticFiles" version="3.0.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
<package id="NJsonSchema" version="8.3.6252.27806" targetFramework="net45" />
<package id="NJsonSchema" version="8.4.6254.24648" targetFramework="net45" />
<package id="Owin" version="1.0" targetFramework="net45" />
</packages>
4 changes: 2 additions & 2 deletions src/NSwag.AssemblyLoader/NSwag.AssemblyLoader.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NJsonSchema, Version=8.3.6252.27806, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.8.3.6252.27806\lib\net45\NJsonSchema.dll</HintPath>
<Reference Include="NJsonSchema, Version=8.4.6254.24648, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.8.4.6254.24648\lib\net45\NJsonSchema.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.AssemblyLoader/app.config
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NJsonSchema" publicKeyToken="c2f9c3bdfae56102" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.2.6249.40688" newVersion="8.2.6249.40688" />
<bindingRedirect oldVersion="0.0.0.0-8.3.6252.27806" newVersion="8.3.6252.27806" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.AssemblyLoader/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
<package id="Microsoft.NETCore.Portable.Compatibility" version="1.0.0" targetFramework="net45" />
<package id="NConsole" version="3.4.6206.26897" targetFramework="net45" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
<package id="NJsonSchema" version="8.3.6252.27806" targetFramework="net45" />
<package id="NJsonSchema" version="8.4.6254.24648" targetFramework="net45" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NJsonSchema, Version=8.3.6252.27806, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.8.3.6252.27806\lib\net45\NJsonSchema.dll</HintPath>
<Reference Include="NJsonSchema, Version=8.4.6254.24648, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.8.4.6254.24648\lib\net45\NJsonSchema.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.CodeGeneration.CSharp.Tests/app.config
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NJsonSchema" publicKeyToken="c2f9c3bdfae56102" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.2.6249.40688" newVersion="8.2.6249.40688" />
<bindingRedirect oldVersion="0.0.0.0-8.4.6254.24648" newVersion="8.4.6254.24648" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.CodeGeneration.CSharp.Tests/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net451" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net451" />
<package id="NJsonSchema" version="8.3.6252.27806" targetFramework="net451" />
<package id="NJsonSchema" version="8.4.6254.24648" targetFramework="net451" />
</packages>
298 changes: 149 additions & 149 deletions src/NSwag.CodeGeneration.CSharp/Models/CSharpOperationModel.cs
Original file line number Diff line number Diff line change
@@ -1,151 +1,151 @@
//-----------------------------------------------------------------------
// <copyright file="CSharpOperationModel.cs" company="NSwag">
// Copyright (c) Rico Suter. All rights reserved.
// </copyright>
// <license>https://github.com/NSwag/NSwag/blob/master/LICENSE.md</license>
// <author>Rico Suter, mail@rsuter.com</author>
//-----------------------------------------------------------------------

using System.Collections.Generic;
using System.Linq;
using NJsonSchema;
using NSwag.CodeGeneration.Models;

namespace NSwag.CodeGeneration.CSharp.Models
{
/// <summary>The CSharp operation model.</summary>
public class CSharpOperationModel : OperationModelBase<CSharpParameterModel, CSharpResponseModel>
{
private static readonly string[] ReservedKeywords =
{
"abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue",
"decimal", "default", "delegate", "do", "double", "else", "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float",
"for", "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", "long", "namespace", "new", "null", "object",
"operator", "out", "override", "params", "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", "short", "sizeof",
"stackalloc", "static", "string", "struct", "switch", "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe",
"ushort", "using", "virtual", "void", "volatile", "while"
};

private readonly SwaggerToCSharpGeneratorSettings _settings;
private readonly SwaggerOperation _operation;
private readonly SwaggerToCSharpGeneratorBase _generator;

/// <summary>Initializes a new instance of the <see cref="CSharpOperationModel" /> class.</summary>
/// <param name="operation">The operation.</param>
/// <param name="settings">The settings.</param>
/// <param name="generator">The generator.</param>
/// <param name="resolver">The resolver.</param>
public CSharpOperationModel(
SwaggerOperation operation,
SwaggerToCSharpGeneratorSettings settings,
SwaggerToCSharpGeneratorBase generator,
SwaggerToCSharpTypeResolver resolver)
: base(resolver.ExceptionSchema, operation, resolver, generator, settings)
{
_settings = settings;
_operation = operation;
_generator = generator;

var parameters = _operation.ActualParameters.ToList();
if (settings.GenerateOptionalParameters)
parameters = parameters.OrderBy(p => !p.IsRequired).ToList();

Parameters = parameters.Select(parameter =>
//-----------------------------------------------------------------------
// <copyright file="CSharpOperationModel.cs" company="NSwag">
// Copyright (c) Rico Suter. All rights reserved.
// </copyright>
// <license>https://github.com/NSwag/NSwag/blob/master/LICENSE.md</license>
// <author>Rico Suter, mail@rsuter.com</author>
//-----------------------------------------------------------------------

using System.Collections.Generic;
using System.Linq;
using NJsonSchema;
using NSwag.CodeGeneration.Models;

namespace NSwag.CodeGeneration.CSharp.Models
{
/// <summary>The CSharp operation model.</summary>
public class CSharpOperationModel : OperationModelBase<CSharpParameterModel, CSharpResponseModel>
{
private static readonly string[] ReservedKeywords =
{
"abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue",
"decimal", "default", "delegate", "do", "double", "else", "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float",
"for", "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", "long", "namespace", "new", "null", "object",
"operator", "out", "override", "params", "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", "short", "sizeof",
"stackalloc", "static", "string", "struct", "switch", "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe",
"ushort", "using", "virtual", "void", "volatile", "while"
};

private readonly SwaggerToCSharpGeneratorSettings _settings;
private readonly SwaggerOperation _operation;
private readonly SwaggerToCSharpGeneratorBase _generator;

/// <summary>Initializes a new instance of the <see cref="CSharpOperationModel" /> class.</summary>
/// <param name="operation">The operation.</param>
/// <param name="settings">The settings.</param>
/// <param name="generator">The generator.</param>
/// <param name="resolver">The resolver.</param>
public CSharpOperationModel(
SwaggerOperation operation,
SwaggerToCSharpGeneratorSettings settings,
SwaggerToCSharpGeneratorBase generator,
SwaggerToCSharpTypeResolver resolver)
: base(resolver.ExceptionSchema, operation, resolver, generator, settings)
{
_settings = settings;
_operation = operation;
_generator = generator;

var parameters = _operation.ActualParameters.ToList();
if (settings.GenerateOptionalParameters)
parameters = parameters.OrderBy(p => !p.IsRequired).ToList();

Parameters = parameters.Select(parameter =>
new CSharpParameterModel(parameter.Name, GetParameterVariableName(parameter, _operation.Parameters),
ResolveParameterType(parameter), parameter, parameters,
_settings.CodeGeneratorSettings,
_generator))
.ToList();
}

/// <summary>Gets the method's access modifier.</summary>
public string MethodAccessModifier
{
get
{
var controllerName = _settings.GenerateControllerName(ControllerName);
var settings = _settings as SwaggerToCSharpClientGeneratorSettings;
if (settings != null && settings.ProtectedMethods?.Contains(controllerName + "." + OperationNameUpper + "Async") == true)
return "protected";

return "public";
}
}

ResolveParameterType(parameter), parameter, parameters,
_settings.CodeGeneratorSettings,
_generator))
.ToList();
}

/// <summary>Gets the method's access modifier.</summary>
public string MethodAccessModifier
{
get
{
var controllerName = _settings.GenerateControllerName(ControllerName);
var settings = _settings as SwaggerToCSharpClientGeneratorSettings;
if (settings != null && settings.ProtectedMethods?.Contains(controllerName + "." + OperationNameUpper + "Async") == true)
return "protected";

return "public";
}
}

/// <summary>Gets a value indicating whether this operation is rendered as interface method.</summary>
public bool IsInterfaceMethod => MethodAccessModifier == "public";

/// <summary>Gets or sets the type of the result.</summary>
public override string ResultType
{
get
{
if (UnwrappedResultType == "FileResponse")
return "System.Threading.Tasks.Task<FileResponse>";

if (_settings != null && _settings.WrapResponses)
return UnwrappedResultType == "void"
? "System.Threading.Tasks.Task<" + _settings.ResponseClass.Replace("{controller}", ControllerName) + ">"
: "System.Threading.Tasks.Task<" + _settings.ResponseClass.Replace("{controller}", ControllerName) + "<" + UnwrappedResultType + ">>";

return UnwrappedResultType == "void"
? "System.Threading.Tasks.Task"
: "System.Threading.Tasks.Task<" + UnwrappedResultType + ">";
}
}

/// <summary>Gets or sets the type of the exception.</summary>
public override string ExceptionType
{
get
{
if (_operation.Responses.Count(r => !HttpUtilities.IsSuccessStatusCode(r.Key)) != 1)
return "System.Exception";

var response = _operation.Responses.Single(r => !HttpUtilities.IsSuccessStatusCode(r.Key)).Value;
return _generator.GetTypeName(response.ActualResponseSchema, response.IsNullable(_settings.CodeGeneratorSettings.NullHandling), "Exception");
}
}

/// <summary>Gets the name of the parameter variable.</summary>
/// <param name="parameter">The parameter.</param>
/// <param name="allParameters">All parameters.</param>
/// <returns>The parameter variable name.</returns>
protected override string GetParameterVariableName(SwaggerParameter parameter, IEnumerable<SwaggerParameter> allParameters)
{
var name = base.GetParameterVariableName(parameter, allParameters);
return ReservedKeywords.Contains(name) ? "@" + name : name;
}

/// <summary>Resolves the type of the parameter.</summary>
/// <param name="parameter">The parameter.</param>
/// <returns>The parameter type name.</returns>
protected override string ResolveParameterType(SwaggerParameter parameter)
{
var schema = parameter.ActualSchema;
if (schema.Type == JsonObjectType.File)
{
if (parameter.CollectionFormat == SwaggerParameterCollectionFormat.Multi && !schema.Type.HasFlag(JsonObjectType.Array))
return "System.Collections.Generic.IEnumerable<FileParameter>";

return "FileParameter";
}

return base.ResolveParameterType(parameter)
.Replace(_settings.CSharpGeneratorSettings.ArrayType + "<", "System.Collections.Generic.IEnumerable<")
.Replace(_settings.CSharpGeneratorSettings.DictionaryType + "<", "System.Collections.Generic.IDictionary<");
}

/// <summary>Creates the response model.</summary>
/// <param name="statusCode">The status code.</param>
/// <param name="response">The response.</param>
/// <param name="exceptionSchema">The exception schema.</param>
/// <param name="generator">The generator.</param>
/// <param name="settings">The settings.</param>
/// <returns></returns>
protected override CSharpResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, ClientGeneratorBaseSettings settings)
{
return new CSharpResponseModel(statusCode, response, response == GetSuccessResponse(), exceptionSchema, generator, settings.CodeGeneratorSettings);
}
}
}
public bool IsInterfaceMethod => MethodAccessModifier == "public";

/// <summary>Gets or sets the type of the result.</summary>
public override string ResultType
{
get
{
if (UnwrappedResultType == "FileResponse")
return "System.Threading.Tasks.Task<FileResponse>";

if (_settings != null && _settings.WrapResponses)
return UnwrappedResultType == "void"
? "System.Threading.Tasks.Task<" + _settings.ResponseClass.Replace("{controller}", ControllerName) + ">"
: "System.Threading.Tasks.Task<" + _settings.ResponseClass.Replace("{controller}", ControllerName) + "<" + UnwrappedResultType + ">>";

return UnwrappedResultType == "void"
? "System.Threading.Tasks.Task"
: "System.Threading.Tasks.Task<" + UnwrappedResultType + ">";
}
}

/// <summary>Gets or sets the type of the exception.</summary>
public override string ExceptionType
{
get
{
if (_operation.Responses.Count(r => !HttpUtilities.IsSuccessStatusCode(r.Key)) != 1)
return "System.Exception";

var response = _operation.Responses.Single(r => !HttpUtilities.IsSuccessStatusCode(r.Key)).Value;
return _generator.GetTypeName(response.ActualResponseSchema, response.IsNullable(_settings.CodeGeneratorSettings.NullHandling), "Exception");
}
}

/// <summary>Gets the name of the parameter variable.</summary>
/// <param name="parameter">The parameter.</param>
/// <param name="allParameters">All parameters.</param>
/// <returns>The parameter variable name.</returns>
protected override string GetParameterVariableName(SwaggerParameter parameter, IEnumerable<SwaggerParameter> allParameters)
{
var name = base.GetParameterVariableName(parameter, allParameters);
return ReservedKeywords.Contains(name) ? "@" + name : name;
}

/// <summary>Resolves the type of the parameter.</summary>
/// <param name="parameter">The parameter.</param>
/// <returns>The parameter type name.</returns>
protected override string ResolveParameterType(SwaggerParameter parameter)
{
var schema = parameter.ActualSchema;
if (schema.Type == JsonObjectType.File)
{
if (parameter.CollectionFormat == SwaggerParameterCollectionFormat.Multi && !schema.Type.HasFlag(JsonObjectType.Array))
return "System.Collections.Generic.IEnumerable<FileParameter>";

return "FileParameter";
}

return base.ResolveParameterType(parameter)
.Replace(_settings.CSharpGeneratorSettings.ArrayType + "<", "System.Collections.Generic.IEnumerable<")
.Replace(_settings.CSharpGeneratorSettings.DictionaryType + "<", "System.Collections.Generic.IDictionary<");
}

/// <summary>Creates the response model.</summary>
/// <param name="statusCode">The status code.</param>
/// <param name="response">The response.</param>
/// <param name="exceptionSchema">The exception schema.</param>
/// <param name="generator">The generator.</param>
/// <param name="settings">The settings.</param>
/// <returns></returns>
protected override CSharpResponseModel CreateResponseModel(string statusCode, SwaggerResponse response, JsonSchema4 exceptionSchema, IClientGenerator generator, ClientGeneratorBaseSettings settings)
{
return new CSharpResponseModel(statusCode, response, response == GetSuccessResponse(), exceptionSchema, generator, settings.CodeGeneratorSettings);
}
}
}
Loading

0 comments on commit d888c6d

Please sign in to comment.