From 620633459e5ba1eed645bd957a62ed7461953371 Mon Sep 17 00:00:00 2001 From: Alex Panchenko Date: Sat, 3 Feb 2024 11:22:40 +0200 Subject: [PATCH 1/2] do not use @deprecated tag if enum item is deprecated --- .../generator/parser/DeprecationEnricher.java | 8 ++- .../typescript/generator/JavadocTest.java | 62 +++++++++++++++++-- 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java index 4c830ccf6..50cbd729f 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java @@ -59,8 +59,14 @@ private EnumModel enrichEnum(EnumModel enumModel) { } private EnumMemberModel enrichEnumMember(EnumMemberModel enumMember) { + List updatedComment = addDeprecation(enumMember.getComments(), enumMember.getOriginalField()); + if (updatedComment == null || updatedComment.equals(enumMember.getComments())) { + return enumMember; + } return enumMember - .withComments(addDeprecation(enumMember.getComments(), enumMember.getOriginalField())); + .withComments(updatedComment.stream() + .map(s -> s.startsWith(DeprecationUtils.DEPRECATED) ? s.substring(1) : s) + .collect(Collectors.toList())); } private RestApplicationModel enrichRestApplication(RestApplicationModel restApplicationModel) { diff --git a/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java index e7795ecba..54e76014f 100644 --- a/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java +++ b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java @@ -8,18 +8,23 @@ import cz.habarta.typescript.generator.parser.Model; import cz.habarta.typescript.generator.parser.PropertyModel; import java.io.File; -import java.util.Arrays; +import java.util.Collections; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class JavadocTest { + final Settings settings = TestUtils.settings(); + final TypeProcessor typeProcessor = new DefaultTypeProcessor(); + + @BeforeEach + void initSettings() { + settings.javadocXmlFiles = Collections.singletonList(new File("src/test/javadoc/test-javadoc.xml")); + } @Test - public void testJavadoc() { - final Settings settings = TestUtils.settings(); - settings.javadocXmlFiles = Arrays.asList(new File("src/test/javadoc/test-javadoc.xml")); - final TypeProcessor typeProcessor = new DefaultTypeProcessor(); + void javadocXml() { { final Model model = new Jackson2Parser(settings, typeProcessor).parseModel(ClassWithJavadoc.class); final BeanModel bean = model.getBeans().get(0); @@ -32,6 +37,10 @@ public void testJavadoc() { final EnumModel enumModel = model.getEnums().get(0); Assertions.assertEquals("Documentation for DummyEnum.", enumModel.getComments().get(0)); } + } + + @Test + void classWithoutJavadoc() { { final Model model = new Jackson2Parser(settings, typeProcessor).parseModel(ClassWithoutJavadoc.class); final BeanModel bean = model.getBeans().get(0); @@ -39,6 +48,10 @@ public void testJavadoc() { final PropertyModel property = bean.getProperties().get(0); Assertions.assertNull(property.getComments()); } + } + + @Test + void classWithEmbeddedExample() { { final String generated = new TypeScriptGenerator(settings).generateTypeScript( Input.from(ClassWithJavadoc.class, InterfaceWithJavadoc.class, ClassWithEmbeddedExample.class)); @@ -61,6 +74,10 @@ public void testJavadoc() { Assertions.assertTrue(generated.contains("00ff00")); Assertions.assertTrue(generated.contains("0000ff")); } + } + + @Test + void deprecatedClassWithoutJavadoc() { { final String generated = new TypeScriptGenerator(settings).generateTypeScript(Input.from(DeprecatedClassWithoutJavadoc.class)); final String expected = "" @@ -75,6 +92,10 @@ public void testJavadoc() { + "}"; Assertions.assertEquals(expected.trim(), generated.trim()); } + } + + @Test + void deprecatedEnumWithoutJavadoc() { { final String generated = new TypeScriptGenerator(settings).generateTypeScript(Input.from(DeprecatedEnumWithoutJavadoc.class)); final String expected = "" @@ -83,7 +104,7 @@ public void testJavadoc() { + " * \n" + " * Values:\n" + " * - `North`\n" - + " * - `East` - @deprecated\n" + + " * - `East` - deprecated\n" + " * - `South`\n" + " * - `West`\n" + " */\n" @@ -91,6 +112,25 @@ public void testJavadoc() { + ""; Assertions.assertEquals(expected.trim(), generated.trim()); } + } + + @Test + void deprecatedEnumWItem() { + final String generated = new TypeScriptGenerator(settings).generateTypeScript(Input.from(DeprecatedEnumItem.class)); + final String expected = "" + + "/**\n" + + " * Values:\n" + + " * - `First`\n" + + " * - `Second` - deprecated\n" + + " * - `Third`\n" + + " */\n" + + "type DeprecatedEnumItem = \"First\" | \"Second\" | \"Third\";\n" + + ""; + Assertions.assertEquals(expected.trim(), generated.trim()); + } + + @Test + void classWithBrInJavadoc() { { final String generated = new TypeScriptGenerator(settings).generateTypeScript(Input.from(ClassWithBrElements.class)); Assertions.assertTrue(!generated.contains("
")); @@ -99,6 +139,10 @@ public void testJavadoc() { Assertions.assertTrue(generated.contains("Class documentation\n * \n")); Assertions.assertTrue(generated.contains("Some documentation\n * \n * for this class.")); } + } + + @Test + void classWithPInJavadoc() { { final String generated = new TypeScriptGenerator(settings).generateTypeScript(Input.from(ClassWithPElements.class)); Assertions.assertTrue(!generated.contains("

")); @@ -177,6 +221,12 @@ public static enum DeprecatedEnumWithoutJavadoc { } + public enum DeprecatedEnumItem { + First, + @Deprecated Second, + Third; + } + /** * This class comes with an embedded example! * From dcc95fa636b8373744a655886772104c49de6128 Mon Sep 17 00:00:00 2001 From: Alex Panchenko Date: Sun, 4 Feb 2024 02:11:48 +0200 Subject: [PATCH 2/2] test EnumMapping.asEnum --- .../generator/compiler/ModelCompiler.java | 17 +++++++++++++---- .../generator/parser/DeprecationEnricher.java | 8 +------- .../typescript/generator/JavadocTest.java | 10 +++++++++- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/compiler/ModelCompiler.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/compiler/ModelCompiler.java index 35517b622..81b25e4dc 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/compiler/ModelCompiler.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/compiler/ModelCompiler.java @@ -55,6 +55,7 @@ import cz.habarta.typescript.generator.parser.RestMethodModel; import cz.habarta.typescript.generator.parser.RestQueryParam; import cz.habarta.typescript.generator.type.JTypeWithNullability; +import cz.habarta.typescript.generator.util.DeprecationUtils; import cz.habarta.typescript.generator.util.GenericsResolver; import cz.habarta.typescript.generator.util.Pair; import cz.habarta.typescript.generator.util.Utils; @@ -72,6 +73,7 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -1019,11 +1021,9 @@ private static TsEnumModel addEnumValuesToJavadoc(TsEnumModel enumModel) { Stream.of("Values:"), enumModel.getMembers().stream() .map(enumMember -> "- `" + enumMember.getEnumValue() + "`" - + (enumMember.getComments() != null - ? " - " + String.join(" ", enumMember.getComments()) - : "")) + + getEnumItemCommentAsString(enumMember)) ) - .flatMap(s -> s) + .flatMap(Function.identity()) .collect(Collectors.toList()) ); } else { @@ -1031,6 +1031,15 @@ private static TsEnumModel addEnumValuesToJavadoc(TsEnumModel enumModel) { } } + private static String getEnumItemCommentAsString(EnumMemberModel enumMember) { + if (enumMember.getComments() == null) { + return ""; + } + return " - " + enumMember.getComments().stream() + .map(s -> s.startsWith(DeprecationUtils.DEPRECATED) ? s.substring(1) : s) + .collect(Collectors.joining(" ")); + } + private TsModel createAndUseTaggedUnions(final SymbolTable symbolTable, TsModel tsModel) { if (settings.disableTaggedUnions) { return tsModel; diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java index 50cbd729f..4c830ccf6 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/DeprecationEnricher.java @@ -59,14 +59,8 @@ private EnumModel enrichEnum(EnumModel enumModel) { } private EnumMemberModel enrichEnumMember(EnumMemberModel enumMember) { - List updatedComment = addDeprecation(enumMember.getComments(), enumMember.getOriginalField()); - if (updatedComment == null || updatedComment.equals(enumMember.getComments())) { - return enumMember; - } return enumMember - .withComments(updatedComment.stream() - .map(s -> s.startsWith(DeprecationUtils.DEPRECATED) ? s.substring(1) : s) - .collect(Collectors.toList())); + .withComments(addDeprecation(enumMember.getComments(), enumMember.getOriginalField())); } private RestApplicationModel enrichRestApplication(RestApplicationModel restApplicationModel) { diff --git a/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java index 54e76014f..4d67f42d9 100644 --- a/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java +++ b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java @@ -116,6 +116,7 @@ void deprecatedEnumWithoutJavadoc() { @Test void deprecatedEnumWItem() { + settings.mapEnum = EnumMapping.asEnum; final String generated = new TypeScriptGenerator(settings).generateTypeScript(Input.from(DeprecatedEnumItem.class)); final String expected = "" + "/**\n" @@ -124,7 +125,14 @@ void deprecatedEnumWItem() { + " * - `Second` - deprecated\n" + " * - `Third`\n" + " */\n" - + "type DeprecatedEnumItem = \"First\" | \"Second\" | \"Third\";\n" + + "declare const enum DeprecatedEnumItem {\n" + + " First = \"First\",\n" + + " /**\n" + + " * @deprecated\n" + + " */\n" + + " Second = \"Second\",\n" + + " Third = \"Third\",\n" + + "}" + ""; Assertions.assertEquals(expected.trim(), generated.trim()); }