Skip to content

Commit 0841f94

Browse files
Gson: support for optional properties (vojtechhabarta#676)
1 parent bffc82f commit 0841f94

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/GsonParser.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77
import com.google.gson.annotations.SerializedName;
88
import cz.habarta.typescript.generator.ExcludingTypeProcessor;
99
import cz.habarta.typescript.generator.GsonConfiguration;
10+
import cz.habarta.typescript.generator.OptionalProperties;
1011
import cz.habarta.typescript.generator.Settings;
1112
import cz.habarta.typescript.generator.TypeProcessor;
13+
import cz.habarta.typescript.generator.util.PropertyMember;
1214
import java.lang.reflect.Field;
1315
import java.lang.reflect.Modifier;
1416
import java.lang.reflect.Type;
@@ -92,7 +94,10 @@ private BeanModel parseBean(SourceType<Class<?>> sourceClass) {
9294
if (serializedName != null) {
9395
name = serializedName.value();
9496
}
95-
properties.add(new PropertyModel(name, field.getGenericType(), false, null, field, null, null, null));
97+
final boolean optional = settings.optionalProperties == OptionalProperties.useLibraryDefinition
98+
? true
99+
: isPropertyOptional(new PropertyMember(field, field.getGenericType(), field.getAnnotatedType(), null));
100+
properties.add(new PropertyModel(name, field.getGenericType(), optional, null, field, null, null, null));
96101
addBeanToQueue(new SourceType<>(field.getGenericType(), sourceClass.type, name));
97102
}
98103
cls = cls.getSuperclass();

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/parser/GsonParserTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
import cz.habarta.typescript.generator.GsonConfiguration;
77
import cz.habarta.typescript.generator.Input;
88
import cz.habarta.typescript.generator.JsonLibrary;
9+
import cz.habarta.typescript.generator.OptionalProperties;
910
import cz.habarta.typescript.generator.Settings;
1011
import cz.habarta.typescript.generator.TestUtils;
1112
import cz.habarta.typescript.generator.TypeScriptGenerator;
13+
import java.lang.annotation.Retention;
14+
import java.lang.annotation.RetentionPolicy;
15+
import java.util.Arrays;
1216
import org.junit.Assert;
1317
import org.junit.Before;
1418
import org.junit.Test;
@@ -85,4 +89,44 @@ public void testStaticFieldIncluded() {
8589
Assert.assertTrue(output.contains("THIS_FIELD_SHOULD_NOT_BE_INCLUDED"));
8690
}
8791

92+
@Test
93+
public void testOptionalProperties_Default() {
94+
final String output = generate(settings, BeanWithOptionalProperty.class);
95+
System.out.println(output);
96+
Assert.assertTrue(output.contains("property1: string;"));
97+
}
98+
99+
@Test
100+
public void testOptionalProperties_All() {
101+
settings.optionalProperties = OptionalProperties.all;
102+
final String output = generate(settings, BeanWithOptionalProperty.class);
103+
System.out.println(output);
104+
Assert.assertTrue(output.contains("property1?: string;"));
105+
}
106+
107+
@Test
108+
public void testOptionalProperties_UseLibraryDefinition() {
109+
settings.optionalProperties = OptionalProperties.useLibraryDefinition;
110+
final String output = generate(settings, BeanWithOptionalProperty.class);
111+
System.out.println(output);
112+
Assert.assertTrue(output.contains("property1?: string;"));
113+
}
114+
115+
@Test
116+
public void testOptionalProperties_UseSpecifiedAnnotations() {
117+
settings.optionalAnnotations = Arrays.asList(OptionalProperty.class);
118+
final String output = generate(settings, BeanWithOptionalProperty.class);
119+
System.out.println(output);
120+
Assert.assertTrue(output.contains("property1?: string;"));
121+
}
122+
123+
private static class BeanWithOptionalProperty {
124+
@OptionalProperty
125+
private String property1;
126+
}
127+
128+
@Retention(RetentionPolicy.RUNTIME)
129+
@interface OptionalProperty {
130+
}
131+
88132
}

0 commit comments

Comments
 (0)