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/test/java/cz/habarta/typescript/generator/JavadocTest.java b/typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JavadocTest.java index e7795ecba..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 @@ -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,33 @@ public void testJavadoc() { + ""; Assertions.assertEquals(expected.trim(), generated.trim()); } + } + + @Test + void deprecatedEnumWItem() { + settings.mapEnum = EnumMapping.asEnum; + 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" + + "declare const enum DeprecatedEnumItem {\n" + + " First = \"First\",\n" + + " /**\n" + + " * @deprecated\n" + + " */\n" + + " Second = \"Second\",\n" + + " Third = \"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 +147,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 +229,12 @@ public static enum DeprecatedEnumWithoutJavadoc { } + public enum DeprecatedEnumItem { + First, + @Deprecated Second, + Third; + } + /** * This class comes with an embedded example! *