Skip to content

Commit 883c096

Browse files
committed
Reflection
- fixed duplicated read of generic arguments ASP.NET - fixed wrong fixDate call on generics
1 parent 49a2ce6 commit 883c096

File tree

8 files changed

+38
-2
lines changed

8 files changed

+38
-2
lines changed

Reflection/Readers/ReflectionModelReader.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,14 +202,22 @@ private void ApplyGenericTemplate(Type type, GenericModelTransferObject model)
202202

203203
private void ApplyGenericTemplate(TypeTransferObject target, string alias, TypeTransferObject type)
204204
{
205-
if (target is GenericModelTransferObject genericModel)
205+
if (target is GenericModelTransferObject genericModel && genericModel.Generics.Count == 0)
206206
{
207207
genericModel.Template.Generics.Clone().ForEach(genericModel.Generics.Add);
208208
genericModel.Template.Constants.Clone().ForEach(genericModel.Constants.Add);
209209
genericModel.Template.Fields.Clone().ForEach(genericModel.Fields.Add);
210210
genericModel.Template.Properties.Clone().ForEach(genericModel.Properties.Add);
211211
}
212-
target.Generics.Where(x => x.Alias.Name == alias).ForEach(x => x.Type = type);
212+
GenericAliasTransferObject aliasedGeneric = target.Generics.SingleOrDefault(x => x.Alias?.Name == alias);
213+
if (aliasedGeneric?.Type != null)
214+
{
215+
return;
216+
}
217+
if (aliasedGeneric != null)
218+
{
219+
aliasedGeneric.Type = type;
220+
}
213221
if (target is ModelTransferObject model)
214222
{
215223
model.Constants.ForEach(x => this.ApplyGenericTemplate(x, alias, type));

Tests/Types/Output/generic-sub-type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export class GenericSubType<TOne, TTwo> {
66
public single2: string;
77
public enumerable: TOne[];
88
public list: TTwo[];
9+
public stringList: string[];
910
}
1011

1112
// outputid:605e91d7-ee13-4f1d-9b92-845bb3ace852
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/* eslint-disable */
2+
// tslint:disable
3+
4+
export class SelfReferencingType {
5+
public stringProperty: string;
6+
public selfProperty: SelfReferencingType;
7+
public selfList: SelfReferencingType[];
8+
}
9+
10+
// outputid:605e91d7-ee13-4f1d-9b92-845bb3ace852

Tests/Types/SelfReferencingType.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.Collections.Generic;
2+
using KY.Generator;
3+
4+
namespace Types
5+
{
6+
[Generate(OutputLanguage.TypeScript, "Output")]
7+
public class SelfReferencingType
8+
{
9+
public string StringProperty { get; set; }
10+
public SelfReferencingType SelfProperty { get; set; }
11+
public List<SelfReferencingType> SelfList { get; set; }
12+
}
13+
}

Tests/Types/Types.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,6 @@ public class GenericSubType<TOne, TTwo>
118118
public string Single2 { get; }
119119
public IEnumerable<TOne> Enumerable { get; set; }
120120
public List<TTwo> List { get; set; }
121+
public List<string> StringList { get; set; }
121122
}
122123
}

Tests/WebApiController/ClientApp/src/app/date/models/generic-result.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
export class GenericResult<T> {
55
public rows: T[];
6+
public strings: string[];
67

78
public constructor(init?: Partial<GenericResult<T>>) {
89
Object.assign(this, init);

Tests/WebApiController/ClientApp/src/app/edge-cases/models/generic-result.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
export class GenericResult<T> {
55
public rows: T[];
6+
public strings: string[];
67

78
public constructor(init?: Partial<GenericResult<T>>) {
89
Object.assign(this, init);

Tests/WebApiController/Models/GenericResult.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace WebApiController.Models
55
public class GenericResult<T>
66
{
77
public IEnumerable<T> Rows { get; }
8+
public List<string> Strings { get; set; }
89

910
public GenericResult(IEnumerable<T> rows)
1011
{

0 commit comments

Comments
 (0)