From 56a997de11c38b1431c01e56a4ad441e7f3f5d73 Mon Sep 17 00:00:00 2001 From: Manikandan Ravikumar Date: Mon, 25 Mar 2024 21:33:19 +0200 Subject: [PATCH 1/3] Add option to disable trailing semi-colon --- .../typescript/generator/Settings.java | 2 +- .../typescript/generator/TsProperty.java | 3 ++- .../typescript/generator/emitter/Emitter.java | 21 +++++++++++-------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java index 729aa8be8..3d4156202 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java @@ -136,6 +136,7 @@ public class Settings { public boolean jackson2ModuleDiscovery = false; public List> jackson2Modules = new ArrayList<>(); public ClassLoader classLoader = null; + public boolean disableTrailingSemiColon = false; private boolean defaultStringEnumsOverriddenByExtension = false; @@ -903,5 +904,4 @@ private static int modifierToBitMask(javax.lang.model.element.Modifier modifier) default: return 0; } } - } diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TsProperty.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TsProperty.java index a12b38d83..689212fe6 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TsProperty.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TsProperty.java @@ -24,7 +24,8 @@ public TsType getTsType() { public String format(Settings settings) { final String questionMark = (tsType instanceof TsType.OptionalType) ? "?" : ""; - return Emitter.quoteIfNeeded(name, settings) + questionMark + ": " + tsType.format(settings) + ";"; + final String trailingChar = settings.disableTrailingSemiColon ? "" : ";"; + return Emitter.quoteIfNeeded(name, settings) + questionMark + ": " + tsType.format(settings) + trailingChar; } } diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java index 3d2760fdb..2b579bef5 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java @@ -76,14 +76,14 @@ private void emitImports() { writeNewLine(); for (ModuleDependency dependency : settings.moduleDependencies) { if (!dependency.global) { - writeIndentedLine("import * as " + dependency.importAs + " from " + quote(dependency.importFrom, settings) + ";"); + writeIndentedLine("import * as " + dependency.importAs + " from " + quote(dependency.importFrom, settings) + getTrailingChar()); } } } if (settings.importDeclarations != null && !settings.importDeclarations.isEmpty()) { writeNewLine(); for (String importDeclaration : settings.importDeclarations) { - writeIndentedLine(importDeclaration + ";"); + writeIndentedLine(importDeclaration + getTrailingChar()); } } } @@ -212,7 +212,7 @@ private void emitProperty(TsPropertyModel property) { final String readonlyString = property.modifiers.isReadonly ? "readonly " : ""; final String questionMark = tsType instanceof TsType.OptionalType ? "?" : ""; final String defaultString = property.getDefaultValue() != null ? " = " + property.getDefaultValue().format(settings) : ""; - writeIndentedLine(staticString + readonlyString + quoteIfNeeded(property.getName(), settings) + questionMark + ": " + tsType.format(settings) + defaultString + ";"); + writeIndentedLine(staticString + readonlyString + quoteIfNeeded(property.getName(), settings) + questionMark + ": " + tsType.format(settings) + defaultString + getTrailingChar()); } private void emitDecorators(List decorators) { @@ -271,7 +271,7 @@ private void emitCallable(TsCallableModel method) { indent--; writeIndentedLine("}"); } else { - writeIndentedLine(signature + ";"); + writeIndentedLine(signature + getTrailingChar()); } } @@ -326,7 +326,7 @@ private void emitStatements(List statements) { private void emitReturnStatement(TsReturnStatement returnStatement) { if (returnStatement.getExpression() != null) { - writeIndentedLine("return " + returnStatement.getExpression().format(settings) + ";"); + writeIndentedLine("return " + returnStatement.getExpression().format(settings) + getTrailingChar()); } else { writeIndentedLine("return;"); } @@ -347,7 +347,7 @@ private void emitIfStatement(TsIfStatement ifStatement) { } private void emitExpressionStatement(TsExpressionStatement expressionStatement) { - writeIndentedLine(expressionStatement.getExpression().format(settings) + ";"); + writeIndentedLine(expressionStatement.getExpression().format(settings) + getTrailingChar()); } private void emitVariableDeclarationStatement(TsVariableDeclarationStatement variableDeclarationStatement) { @@ -356,7 +356,7 @@ private void emitVariableDeclarationStatement(TsVariableDeclarationStatement var + variableDeclarationStatement.getName() + (variableDeclarationStatement.getType() != null ? ": " + variableDeclarationStatement.getType().format(settings) : "") + (variableDeclarationStatement.getInitializer() != null ? " = " + variableDeclarationStatement.getInitializer().format(settings) : "") - + ";" + + getTrailingChar() ); } @@ -385,7 +385,7 @@ private void emitTypeAlias(TsAliasModel alias, boolean exportKeyword) { final String genericParameters = alias.getTypeParameters().isEmpty() ? "" : "<" + formatList(settings, alias.getTypeParameters()) + ">"; - writeIndentedLine(exportKeyword, "type " + alias.getName().getSimpleName() + genericParameters + " = " + alias.getDefinition().format(settings) + ";"); + writeIndentedLine(exportKeyword, "type " + alias.getName().getSimpleName() + genericParameters + " = " + alias.getDefinition().format(settings) + getTrailingChar()); } private void emitLiteralEnum(TsEnumModel enumModel, boolean exportKeyword, boolean declareKeyword) { @@ -438,7 +438,7 @@ public void writeIndentedLine(String line) { private void emitUmdNamespace() { if (settings.umdNamespace != null) { writeNewLine(); - writeIndentedLine("export as namespace " + settings.umdNamespace + ";"); + writeIndentedLine("export as namespace " + settings.umdNamespace + getTrailingChar()); } } @@ -502,4 +502,7 @@ private void close() { } } + private String getTrailingChar() { + return settings.disableTrailingSemiColon ? "" : ";"; + } } From 3be369978278c9784180c6857559e776bf4ce479 Mon Sep 17 00:00:00 2001 From: Manikandan Ravikumar Date: Mon, 22 Apr 2024 13:40:40 +0300 Subject: [PATCH 2/3] Introducing additional settings for disabling traling semi-colon and injecting custom properties --- .../habarta/typescript/generator/Settings.java | 1 + .../generator/TypeScriptGenerator.java | 5 ++--- .../typescript/generator/emitter/Emitter.java | 17 +++++++++++++++++ .../generator/gradle/GenerateTask.java | 5 +++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java index 3d4156202..52840a26f 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java @@ -137,6 +137,7 @@ public class Settings { public List> jackson2Modules = new ArrayList<>(); public ClassLoader classLoader = null; public boolean disableTrailingSemiColon = false; + public Map, List> injectCustomProperties = Map.of(); private boolean defaultStringEnumsOverriddenByExtension = false; diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TypeScriptGenerator.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TypeScriptGenerator.java index 41ffefcc8..6d4445b7d 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TypeScriptGenerator.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/TypeScriptGenerator.java @@ -148,7 +148,7 @@ public TypeProcessor getCommonTypeProcessor() { final ModelParser.Factory modelParserFactory = getModelParserFactory(); final List specificTypeProcessors = Stream .concat( - restFactories.stream().map(factory -> factory.getSpecificTypeProcessor()), + restFactories.stream().map(RestApplicationParser.Factory::getSpecificTypeProcessor), Stream.of(modelParserFactory.getSpecificTypeProcessor()) ) .filter(Objects::nonNull) @@ -167,8 +167,7 @@ private TypeProcessor createTypeProcessor(List specificTypeProces processors.add(new CustomMappingTypeProcessor(settings.getValidatedCustomTypeMappings())); processors.addAll(specificTypeProcessors); processors.add(new DefaultTypeProcessor(settings.getLoadedDataLibraries())); - final TypeProcessor typeProcessor = new TypeProcessor.Chain(processors); - return typeProcessor; + return new TypeProcessor.Chain(processors); } public ModelParser getModelParser() { diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java index 2b579bef5..3547e3232 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java @@ -194,6 +194,7 @@ private void emitBean(TsBeanModel bean, boolean exportKeyword) { for (TsPropertyModel property : bean.getProperties()) { emitProperty(property); } + emitInjectedProperties(bean); if (bean.getConstructor() != null) { emitCallable(bean.getConstructor()); } @@ -215,6 +216,22 @@ private void emitProperty(TsPropertyModel property) { writeIndentedLine(staticString + readonlyString + quoteIfNeeded(property.getName(), settings) + questionMark + ": " + tsType.format(settings) + defaultString + getTrailingChar()); } + private void emitInjectedProperties(TsBeanModel bean) { + + settings.injectCustomProperties + .keySet() + .stream().map(Class::getSimpleName) + .filter(key -> key.equals(bean.getName().getSimpleName())) + .findFirst().ifPresent((ignored) -> writeIndentedLine("// custom properties")); + + settings.injectCustomProperties + .entrySet() + .stream() + .filter(entry -> entry.getKey().getSimpleName().equals(bean.getName().getSimpleName())) + .flatMap(matched -> matched.getValue().stream()) + .forEach(this::writeIndentedLine); + } + private void emitDecorators(List decorators) { for (TsDecorator decorator : decorators) { writeIndentedLine(formatDecorator(settings, decorator)); diff --git a/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java b/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java index 12b282619..638b9ebd1 100644 --- a/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java +++ b/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java @@ -31,6 +31,7 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.gradle.api.DefaultTask; import org.gradle.api.Task; @@ -129,6 +130,8 @@ public class GenerateTask extends DefaultTask { public boolean jackson2ModuleDiscovery; public List jackson2Modules; public Logger.Level loggingLevel; + public boolean disableTrailingSemiColon; + public Map, List> injectCustomProperties; private Settings createSettings(URLClassLoader classLoader) { final Settings settings = new Settings(); @@ -212,6 +215,8 @@ private Settings createSettings(URLClassLoader classLoader) { settings.jackson2ModuleDiscovery = jackson2ModuleDiscovery; settings.loadJackson2Modules(classLoader, jackson2Modules); settings.classLoader = classLoader; + settings.disableTrailingSemiColon = disableTrailingSemiColon; + settings.injectCustomProperties = injectCustomProperties; return settings; } From ede16e6b3b0d2eb26b6dc4d707f2e04ea095dfaa Mon Sep 17 00:00:00 2001 From: Manikandan Ravikumar Date: Mon, 22 Apr 2024 17:49:33 +0300 Subject: [PATCH 3/3] Addressing comments --- .../main/java/cz/habarta/typescript/generator/Settings.java | 2 +- .../cz/habarta/typescript/generator/emitter/Emitter.java | 6 +++--- .../habarta/typescript/generator/gradle/GenerateTask.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java index 52840a26f..4e1c957f3 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java @@ -137,7 +137,7 @@ public class Settings { public List> jackson2Modules = new ArrayList<>(); public ClassLoader classLoader = null; public boolean disableTrailingSemiColon = false; - public Map, List> injectCustomProperties = Map.of(); + public Map> injectCustomProperties = Map.of(); private boolean defaultStringEnumsOverriddenByExtension = false; diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java index 3547e3232..4405d4b4d 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/Emitter.java @@ -220,14 +220,14 @@ private void emitInjectedProperties(TsBeanModel bean) { settings.injectCustomProperties .keySet() - .stream().map(Class::getSimpleName) - .filter(key -> key.equals(bean.getName().getSimpleName())) + .stream() + .filter(className -> className.equals(bean.getName().getSimpleName())) .findFirst().ifPresent((ignored) -> writeIndentedLine("// custom properties")); settings.injectCustomProperties .entrySet() .stream() - .filter(entry -> entry.getKey().getSimpleName().equals(bean.getName().getSimpleName())) + .filter(entry -> entry.getKey().equals(bean.getName().getSimpleName())) .flatMap(matched -> matched.getValue().stream()) .forEach(this::writeIndentedLine); } diff --git a/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java b/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java index 638b9ebd1..23739240a 100644 --- a/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java +++ b/typescript-generator-gradle-plugin/src/main/java/cz/habarta/typescript/generator/gradle/GenerateTask.java @@ -131,7 +131,7 @@ public class GenerateTask extends DefaultTask { public List jackson2Modules; public Logger.Level loggingLevel; public boolean disableTrailingSemiColon; - public Map, List> injectCustomProperties; + public Map> injectCustomProperties; private Settings createSettings(URLClassLoader classLoader) { final Settings settings = new Settings();