Skip to content

Commit 59c922f

Browse files
List of enum values in enum Javadoc (#400)
1 parent a7cc43e commit 59c922f

File tree

5 files changed

+61
-10
lines changed

5 files changed

+61
-10
lines changed

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/compiler/ModelCompiler.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import java.util.regex.Matcher;
6868
import java.util.regex.Pattern;
6969
import java.util.stream.Collectors;
70+
import java.util.stream.Stream;
7071

7172

7273
/**
@@ -143,6 +144,7 @@ public TsModel javaToTypeScript(Model model) {
143144

144145
// enums
145146
tsModel = applyExtensionTransformers(symbolTable, tsModel, TransformationPhase.BeforeEnums, extensionTransformers);
147+
tsModel = addEnumValuesToJavadoc(tsModel);
146148
if (!settings.areDefaultStringEnumsOverriddenByExtension()) {
147149
if (settings.mapEnum == null || settings.mapEnum == EnumMapping.asUnion || settings.mapEnum == EnumMapping.asInlineUnion) {
148150
tsModel = transformEnumsToUnions(tsModel);
@@ -824,6 +826,37 @@ private TsModel transformEnumsToNumberBasedEnum(TsModel tsModel) {
824826
return tsModel.withoutEnums(stringEnums).withEnums(new ArrayList<>(enums));
825827
}
826828

829+
private static TsModel addEnumValuesToJavadoc(TsModel tsModel) {
830+
return tsModel.withEnums(tsModel.getEnums().stream()
831+
.map(enumModel -> addEnumValuesToJavadoc(enumModel))
832+
.collect(Collectors.toList())
833+
);
834+
}
835+
836+
private static TsEnumModel addEnumValuesToJavadoc(TsEnumModel enumModel) {
837+
final boolean hasComments = enumModel.getComments() != null && !enumModel.getComments().isEmpty();
838+
final boolean hasMemberComments = enumModel.getMembers().stream()
839+
.anyMatch(enumMember -> enumMember.getComments() != null && !enumMember.getComments().isEmpty());
840+
if (hasComments || hasMemberComments) {
841+
return enumModel.withComments(Stream
842+
.of(
843+
Utils.listFromNullable(enumModel.getComments()).stream(),
844+
(hasComments ? Stream.of("") : Stream.<String>empty()),
845+
Stream.of("Values:"),
846+
enumModel.getMembers().stream()
847+
.map(enumMember -> "- `" + enumMember.getEnumValue() + "`"
848+
+ (enumMember.getComments() != null
849+
? " - " + String.join(" ", enumMember.getComments())
850+
: ""))
851+
)
852+
.flatMap(s -> s)
853+
.collect(Collectors.toList())
854+
);
855+
} else {
856+
return enumModel;
857+
}
858+
}
859+
827860
private TsModel createAndUseTaggedUnions(final SymbolTable symbolTable, TsModel tsModel) {
828861
if (settings.disableTaggedUnions) {
829862
return tsModel;

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/TsDeclarationModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import cz.habarta.typescript.generator.compiler.Symbol;
55
import java.util.List;
6+
import java.util.Objects;
67

78

89
public class TsDeclarationModel implements Comparable<TsDeclarationModel> {
@@ -15,7 +16,7 @@ public class TsDeclarationModel implements Comparable<TsDeclarationModel> {
1516
public TsDeclarationModel(Class<?> origin, TsBeanCategory category, Symbol name, List<String> comments) {
1617
this.origin = origin;
1718
this.category = category;
18-
this.name = name;
19+
this.name = Objects.requireNonNull(name);
1920
this.comments = comments;
2021
}
2122

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/TsEnumModel.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import cz.habarta.typescript.generator.compiler.Symbol;
77
import cz.habarta.typescript.generator.parser.EnumModel;
88
import java.util.List;
9+
import java.util.Objects;
910

1011

1112
public class TsEnumModel extends TsDeclarationModel {
@@ -14,15 +15,10 @@ public class TsEnumModel extends TsDeclarationModel {
1415
private final List<EnumMemberModel> members;
1516
private final boolean isNonConstEnum;
1617

17-
@Deprecated
18-
public TsEnumModel(Class<?> origin, Symbol name, EnumKind kind, List<EnumMemberModel> members, List<String> comments) {
19-
this(origin, name, kind, members, comments, false);
20-
}
21-
2218
public TsEnumModel(Class<?> origin, Symbol name, EnumKind kind, List<EnumMemberModel> members, List<String> comments, boolean isNonConstEnum) {
2319
super(origin, null, name, comments);
24-
this.kind = kind;
25-
this.members = members;
20+
this.kind = Objects.requireNonNull(kind);
21+
this.members = Objects.requireNonNull(members);
2622
this.isNonConstEnum = isNonConstEnum;
2723
}
2824

@@ -46,4 +42,8 @@ public TsEnumModel withMembers(List<EnumMemberModel> members) {
4642
return new TsEnumModel(origin, name, kind, members, comments, isNonConstEnum);
4743
}
4844

45+
public TsEnumModel withComments(List<String> comments) {
46+
return new TsEnumModel(origin, name, kind, members, comments, isNonConstEnum);
47+
}
48+
4949
}

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/DummyEnum.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,20 @@
66
* Documentation for DummyEnum.
77
*/
88
public enum DummyEnum {
9-
Red, Green, Blue
9+
10+
/**
11+
* ff0000
12+
*/
13+
Red,
14+
15+
/**
16+
* 00ff00
17+
*/
18+
Green,
19+
20+
/**
21+
* 0000ff
22+
*/
23+
Blue;
24+
1025
}

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,11 @@ public void testJavadoc() {
5454
Assert.assertTrue(generated.contains("Documentation for interface getter property."));
5555
Assert.assertTrue(generated.contains("@return value of getterPropery"));
5656
Assert.assertTrue(generated.contains("@deprecated replaced by something else"));
57-
5857
Assert.assertTrue(generated.contains(" * // indentation and line breaks are kept\n * \n * {@literal @}"));
5958
Assert.assertTrue(generated.contains(" * public List<String> generics() {\n"));
59+
Assert.assertTrue(generated.contains("ff0000"));
60+
Assert.assertTrue(generated.contains("00ff00"));
61+
Assert.assertTrue(generated.contains("0000ff"));
6062
}
6163
{
6264
final String generated = new TypeScriptGenerator(settings).generateTypeScript(Input.from(ClassWithBrElements.class));

0 commit comments

Comments
 (0)