@@ -76,6 +76,9 @@ public TsModel javaToTypeScript(Model model) {
76
76
if (settings .mapEnum == EnumMapping .asInlineUnion ) {
77
77
tsModel = inlineEnums (tsModel , symbolTable );
78
78
}
79
+ if (settings .mapEnum == EnumMapping .asNumberBasedEnum ) {
80
+ tsModel = transformEnumsToNumberBasedEnum (tsModel );
81
+ }
79
82
}
80
83
81
84
// tagged unions
@@ -89,7 +92,7 @@ public TsModel javaToTypeScript(Model model) {
89
92
public TsType javaToTypeScript (Type type ) {
90
93
final BeanModel beanModel = new BeanModel (Object .class , Object .class , null , null , null , Collections .<Type >emptyList (),
91
94
Collections .singletonList (new PropertyModel ("property" , type , false , null , null , null )), null );
92
- final Model model = new Model (Collections .singletonList (beanModel ), Collections .<EnumModel <?> >emptyList (), null );
95
+ final Model model = new Model (Collections .singletonList (beanModel ), Collections .<EnumModel >emptyList (), null );
93
96
final TsModel tsModel = javaToTypeScript (model );
94
97
return tsModel .getBeans ().get (0 ).getProperties ().get (0 ).getTsType ();
95
98
}
@@ -100,11 +103,16 @@ private TsModel processModel(SymbolTable symbolTable, Model model) {
100
103
for (BeanModel bean : model .getBeans ()) {
101
104
beans .add (processBean (symbolTable , model , children , bean ));
102
105
}
103
- final List <TsEnumModel <?>> enums = new ArrayList <>();
104
- for (EnumModel <?> enumModel : model .getEnums ()) {
105
- enums .add (processEnum (symbolTable , enumModel ));
106
+ final List <TsEnumModel > enums = new ArrayList <>();
107
+ final List <TsEnumModel > stringEnums = new ArrayList <>();
108
+ for (EnumModel enumModel : model .getEnums ()) {
109
+ final TsEnumModel tsEnumModel = processEnum (symbolTable , enumModel );
110
+ enums .add (tsEnumModel );
111
+ if (tsEnumModel .getKind () == EnumKind .StringBased ) {
112
+ stringEnums .add (tsEnumModel );
113
+ }
106
114
}
107
- return new TsModel ().setBeans (beans ).setEnums (enums );
115
+ return new TsModel ().withBeans (beans ).withEnums (enums ). withOriginalStringEnums ( stringEnums );
108
116
}
109
117
110
118
private Map <Type , List <BeanModel >> createChildrenMap (Model model ) {
@@ -205,7 +213,7 @@ private TsPropertyModel processProperty(SymbolTable symbolTable, BeanModel bean,
205
213
return new TsPropertyModel (prefix + property .getName () + suffix , tsType , settings .declarePropertiesAsReadOnly , false , property .getComments ());
206
214
}
207
215
208
- private TsEnumModel <?> processEnum (SymbolTable symbolTable , EnumModel <?> enumModel ) {
216
+ private TsEnumModel processEnum (SymbolTable symbolTable , EnumModel enumModel ) {
209
217
final Symbol beanIdentifier = symbolTable .getSymbol (enumModel .getOrigin ());
210
218
return TsEnumModel .fromEnumModel (beanIdentifier , enumModel );
211
219
}
@@ -244,7 +252,7 @@ private TsModel removeInheritedProperties(SymbolTable symbolTable, TsModel tsMod
244
252
}
245
253
beans .add (bean .withProperties (properties ));
246
254
}
247
- return tsModel .setBeans (beans );
255
+ return tsModel .withBeans (beans );
248
256
}
249
257
250
258
private TsModel addImplementedProperties (SymbolTable symbolTable , TsModel tsModel ) {
@@ -273,7 +281,7 @@ private TsModel addImplementedProperties(SymbolTable symbolTable, TsModel tsMode
273
281
beans .add (bean );
274
282
}
275
283
}
276
- return tsModel .setBeans (beans );
284
+ return tsModel .withBeans (beans );
277
285
}
278
286
279
287
private static Map <String , TsType > getInheritedProperties (SymbolTable symbolTable , TsModel tsModel , List <TsType > parents ) {
@@ -544,20 +552,21 @@ public TsType transform(TsType type) {
544
552
545
553
}
546
554
});
547
- return model .setTypeAliases (new ArrayList <>(typeAliases ));
555
+ return model .withTypeAliases (new ArrayList <>(typeAliases ));
548
556
}
549
557
550
558
private TsModel transformEnumsToUnions (TsModel tsModel ) {
559
+ final List <TsEnumModel > stringEnums = tsModel .getEnums (EnumKind .StringBased );
551
560
final LinkedHashSet <TsAliasModel > typeAliases = new LinkedHashSet <>(tsModel .getTypeAliases ());
552
- for (TsEnumModel < String > enumModel : tsModel . getEnums ( EnumKind . StringBased ) ) {
561
+ for (TsEnumModel enumModel : stringEnums ) {
553
562
final List <TsType > values = new ArrayList <>();
554
- for (EnumMemberModel < String > member : enumModel .getMembers ()) {
555
- values .add (new TsType .StringLiteralType (member .getEnumValue ()));
563
+ for (EnumMemberModel member : enumModel .getMembers ()) {
564
+ values .add (new TsType .StringLiteralType (( String ) member .getEnumValue ()));
556
565
}
557
566
final TsType union = new TsType .UnionType (values );
558
567
typeAliases .add (new TsAliasModel (enumModel .getOrigin (), enumModel .getName (), null , union , enumModel .getComments ()));
559
568
}
560
- return tsModel .setTypeAliases (new ArrayList <>(typeAliases ));
569
+ return tsModel .withoutEnums ( stringEnums ). withTypeAliases (new ArrayList <>(typeAliases ));
561
570
}
562
571
563
572
private TsModel inlineEnums (final TsModel tsModel , final SymbolTable symbolTable ) {
@@ -575,9 +584,20 @@ public TsType transform(TsType tsType) {
575
584
return tsType ;
576
585
}
577
586
});
578
- final ArrayList <TsAliasModel > aliases = new ArrayList <>(tsModel .getTypeAliases ());
579
- aliases .removeAll (inlinedAliases );
580
- return newTsModel .setTypeAliases (aliases );
587
+ return newTsModel .withoutTypeAliases (new ArrayList <>(inlinedAliases ));
588
+ }
589
+
590
+ private TsModel transformEnumsToNumberBasedEnum (TsModel tsModel ) {
591
+ final List <TsEnumModel > stringEnums = tsModel .getEnums (EnumKind .StringBased );
592
+ final LinkedHashSet <TsEnumModel > enums = new LinkedHashSet <>();
593
+ for (TsEnumModel enumModel : stringEnums ) {
594
+ final List <EnumMemberModel > members = new ArrayList <>();
595
+ for (EnumMemberModel member : enumModel .getMembers ()) {
596
+ members .add (new EnumMemberModel (member .getPropertyName (), (Number ) null , member .getComments ()));
597
+ }
598
+ enums .add (enumModel .withMembers (members ));
599
+ }
600
+ return tsModel .withoutEnums (stringEnums ).withEnums (new ArrayList <>(enums ));
581
601
}
582
602
583
603
private TsModel createAndUseTaggedUnions (final SymbolTable symbolTable , TsModel tsModel ) {
@@ -612,13 +632,13 @@ public TsType transform(TsType tsType) {
612
632
return tsType ;
613
633
}
614
634
});
615
- return model .setTypeAliases (new ArrayList <>(typeAliases ));
635
+ return model .withTypeAliases (new ArrayList <>(typeAliases ));
616
636
}
617
637
618
638
private TsModel sortDeclarations (SymbolTable symbolTable , TsModel tsModel ) {
619
639
final List <TsBeanModel > beans = tsModel .getBeans ();
620
640
final List <TsAliasModel > aliases = tsModel .getTypeAliases ();
621
- final List <TsEnumModel <?> > enums = tsModel .getEnums ();
641
+ final List <TsEnumModel > enums = tsModel .getEnums ();
622
642
if (settings .sortDeclarations ) {
623
643
for (TsBeanModel bean : beans ) {
624
644
Collections .sort (bean .getProperties ());
@@ -634,9 +654,9 @@ private TsModel sortDeclarations(SymbolTable symbolTable, TsModel tsModel) {
634
654
addOrderedClass (symbolTable , tsModel , bean , orderedBeans );
635
655
}
636
656
return tsModel
637
- .setBeans (new ArrayList <>(orderedBeans ))
638
- .setTypeAliases (aliases )
639
- .setEnums (enums );
657
+ .withBeans (new ArrayList <>(orderedBeans ))
658
+ .withTypeAliases (aliases )
659
+ .withEnums (enums );
640
660
}
641
661
642
662
private static void addOrderedClass (SymbolTable symbolTable , TsModel tsModel , TsBeanModel bean , LinkedHashSet <TsBeanModel > orderedBeans ) {
@@ -671,7 +691,7 @@ private static TsModel transformBeanPropertyTypes(TsModel tsModel, TsType.Transf
671
691
}
672
692
newBeans .add (bean .withProperties (newProperties ).withMethods (newMethods ));
673
693
}
674
- return tsModel .setBeans (newBeans );
694
+ return tsModel .withBeans (newBeans );
675
695
}
676
696
677
697
private static Class <?> getOriginClass (SymbolTable symbolTable , TsType type ) {
0 commit comments