From 05a0f21fb3a7fd501736c9a26b7bdf12405e9c97 Mon Sep 17 00:00:00 2001 From: Dominic Crousset Date: Sun, 5 Mar 2023 13:24:54 -0500 Subject: [PATCH 1/3] - Added settings.includePropertyFunctionImpl --- .../main/java/cz/habarta/typescript/generator/Settings.java | 3 +++ .../cz/habarta/typescript/generator/parser/Jackson2Parser.java | 3 +++ 2 files changed, 6 insertions(+) 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..204ed5e19 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 @@ -20,6 +20,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.lang.reflect.Member; import java.lang.reflect.TypeVariable; import java.net.URL; import java.net.URLClassLoader; @@ -33,6 +34,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -118,6 +120,7 @@ public class Settings { public List javadocXmlFiles = null; public List extensions = new ArrayList<>(); public List> includePropertyAnnotations = new ArrayList<>(); + public Function includePropertyFunctionImpl = null; public List> excludePropertyAnnotations = new ArrayList<>(); public List> optionalAnnotations = new ArrayList<>(); public List> requiredAnnotations = new ArrayList<>(); diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java index 707338b3d..5893df86e 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java @@ -275,6 +275,9 @@ private BeanModel parseBean(SourceType> sourceClass, List class beanProperty, settings.jackson2Configuration != null && settings.jackson2Configuration.disableObjectIdentityFeature); + if( settings.includePropertyFunctionImpl != null && !settings.includePropertyFunctionImpl.apply( member ) ) + continue; + if (!isAnnotatedPropertyIncluded(beanProperty::getAnnotation, sourceClass.type.getName() + "." + beanProperty.getName())) { continue; } From 425a031bcabd12e61e54e38700d6feeecd073b4b Mon Sep 17 00:00:00 2001 From: Dominic Crousset Date: Thu, 16 Mar 2023 13:29:32 -0400 Subject: [PATCH 2/3] - fix checkstyle --- .../typescript/generator/parser/Jackson2Parser.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java index 5893df86e..5c66e9a1a 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java @@ -275,9 +275,10 @@ private BeanModel parseBean(SourceType> sourceClass, List class beanProperty, settings.jackson2Configuration != null && settings.jackson2Configuration.disableObjectIdentityFeature); - if( settings.includePropertyFunctionImpl != null && !settings.includePropertyFunctionImpl.apply( member ) ) - continue; - + if( settings.includePropertyFunctionImpl != null && !settings.includePropertyFunctionImpl.apply( member ) ) { + continue; + } + if (!isAnnotatedPropertyIncluded(beanProperty::getAnnotation, sourceClass.type.getName() + "." + beanProperty.getName())) { continue; } From 98c9512e0c94b8e2ce82f3941321b50d1a8dad5d Mon Sep 17 00:00:00 2001 From: Dominic Crousset Date: Thu, 16 Mar 2023 15:06:11 -0400 Subject: [PATCH 3/3] Allow simple pojo with converter serializer to be still seen as a BeanSerializer --- .../typescript/generator/parser/Jackson2Parser.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java index 5c66e9a1a..dcd2059cf 100644 --- a/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java +++ b/typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java @@ -35,6 +35,7 @@ import com.fasterxml.jackson.databind.deser.CreatorProperty; import com.fasterxml.jackson.databind.deser.DefaultDeserializationContext; import com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap; +import com.fasterxml.jackson.databind.deser.std.StdDelegatingDeserializer; import com.fasterxml.jackson.databind.introspect.AnnotatedClass; import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair; import com.fasterxml.jackson.databind.jsontype.NamedType; @@ -45,6 +46,7 @@ import com.fasterxml.jackson.databind.ser.BeanSerializer; import com.fasterxml.jackson.databind.ser.BeanSerializerFactory; import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdDelegatingSerializer; import com.fasterxml.jackson.databind.type.TypeFactory; import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector; import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; @@ -539,7 +541,10 @@ private BeanSerializerHelper createBeanSerializerHelper(JavaType javaType) { try { final DefaultSerializerProvider.Impl serializerProvider = new DefaultSerializerProvider.Impl() .createInstance(objectMapper.getSerializationConfig(), objectMapper.getSerializerFactory()); - final JsonSerializer jsonSerializer = BeanSerializerFactory.instance.createSerializer(serializerProvider, javaType); + JsonSerializer jsonSerializer = BeanSerializerFactory.instance.createSerializer(serializerProvider, javaType); + if (jsonSerializer != null && jsonSerializer instanceof StdDelegatingSerializer) { + jsonSerializer = ((StdDelegatingSerializer ) jsonSerializer).getDelegatee(); + } if (jsonSerializer != null && jsonSerializer instanceof BeanSerializer) { return new BeanSerializerHelper((BeanSerializer) jsonSerializer); } else { @@ -555,7 +560,10 @@ private BeanDeserializerHelper createBeanDeserializerHelper(JavaType javaType) { final DeserializationContext deserializationContext = new DefaultDeserializationContext.Impl(objectMapper.getDeserializationContext().getFactory()) .createInstance(objectMapper.getDeserializationConfig(), null, null); final BeanDescription beanDescription = deserializationContext.getConfig().introspect(javaType); - final JsonDeserializer jsonDeserializer = BeanDeserializerFactory.instance.createBeanDeserializer(deserializationContext, javaType, beanDescription); + JsonDeserializer jsonDeserializer = BeanDeserializerFactory.instance.createBeanDeserializer(deserializationContext, javaType, beanDescription); + if (jsonDeserializer != null && jsonDeserializer instanceof StdDelegatingDeserializer) { + jsonDeserializer = ((StdDelegatingDeserializer ) jsonDeserializer).getDelegatee(); + } if (jsonDeserializer != null && jsonDeserializer instanceof BeanDeserializer) { return new BeanDeserializerHelper((BeanDeserializer) jsonDeserializer); } else {