Skip to content

Commit 7fd14b1

Browse files
Parameter for disabling @JsonIdentityInfo processing (#381)
1 parent 5b681f1 commit 7fd14b1

File tree

5 files changed

+32
-6
lines changed

5 files changed

+32
-6
lines changed

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Jackson2Configuration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,10 @@ public class Jackson2Configuration {
5656
*/
5757
public boolean enumsUsingToString;
5858

59+
/**
60+
* Disables processing of <code>@JsonIdentityInfo</code> and <code>@JsonIdentityReference</code> annotations.
61+
* Can be useful for example when using JSOG library which uses IDs to serialize and deserialize object graphs.
62+
*/
63+
public boolean disableObjectIdentityFeature;
64+
5965
}

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Jackson2ConfigurationResolved.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class Jackson2ConfigurationResolved {
1717
public JsonAutoDetect.Visibility creatorVisibility;
1818
public Map<Class<?>, JsonFormat.Shape> shapeConfigOverrides;
1919
public boolean enumsUsingToString;
20+
public boolean disableObjectIdentityFeature;
2021

2122
public static Jackson2ConfigurationResolved from(Jackson2Configuration configuration, ClassLoader classLoader) {
2223
final Jackson2ConfigurationResolved resolved = new Jackson2ConfigurationResolved();
@@ -28,6 +29,7 @@ public static Jackson2ConfigurationResolved from(Jackson2Configuration configura
2829
resolved.fieldVisibility = configuration.fieldVisibility;
2930
resolved.shapeConfigOverrides = resolveShapeConfigOverrides(configuration.shapeConfigOverrides, classLoader);
3031
resolved.enumsUsingToString = configuration.enumsUsingToString;
32+
resolved.disableObjectIdentityFeature = configuration.disableObjectIdentityFeature;
3133
return resolved;
3234
}
3335

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,11 @@ private static TypeProcessor createSpecificTypeProcessor() {
154154
public TypeProcessor.Result processType(Type javaType, TypeProcessor.Context context) {
155155
if (context.getTypeContext() instanceof Jackson2TypeContext) {
156156
final Jackson2TypeContext jackson2TypeContext = (Jackson2TypeContext) context.getTypeContext();
157-
final Type resultType = jackson2TypeContext.parser.processIdentity(javaType, jackson2TypeContext.beanPropertyWriter);
158-
if (resultType != null) {
159-
return context.withTypeContext(null).processType(resultType);
157+
if (!jackson2TypeContext.disableObjectIdentityFeature) {
158+
final Type resultType = jackson2TypeContext.parser.processIdentity(javaType, jackson2TypeContext.beanPropertyWriter);
159+
if (resultType != null) {
160+
return context.withTypeContext(null).processType(resultType);
161+
}
160162
}
161163
}
162164
return null;
@@ -168,10 +170,12 @@ public TypeProcessor.Result processType(Type javaType, TypeProcessor.Context con
168170
private static class Jackson2TypeContext {
169171
public final Jackson2Parser parser;
170172
public final BeanPropertyWriter beanPropertyWriter;
173+
public final boolean disableObjectIdentityFeature;
171174

172-
public Jackson2TypeContext(Jackson2Parser parser, BeanPropertyWriter beanPropertyWriter) {
175+
public Jackson2TypeContext(Jackson2Parser parser, BeanPropertyWriter beanPropertyWriter, boolean disableObjectIdentityFeature) {
173176
this.parser = parser;
174177
this.beanPropertyWriter = beanPropertyWriter;
178+
this.disableObjectIdentityFeature = disableObjectIdentityFeature;
175179
}
176180
}
177181

@@ -208,7 +212,10 @@ private BeanModel parseBean(SourceType<Class<?>> sourceClass, List<String> class
208212
}
209213
}
210214

211-
final Jackson2TypeContext jackson2TypeContext = new Jackson2TypeContext(this, beanPropertyWriter);
215+
final Jackson2TypeContext jackson2TypeContext = new Jackson2TypeContext(
216+
this,
217+
beanPropertyWriter,
218+
settings.jackson2Configuration != null && settings.jackson2Configuration.disableObjectIdentityFeature);
212219

213220
if (!isAnnotatedPropertyIncluded(beanPropertyWriter::getAnnotation, sourceClass.type.getName() + "." + beanPropertyWriter.getName())) {
214221
continue;

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/GenericCustomTypeMappingsTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ public void testAlternativeSyntax() {
114114
final Settings settings = TestUtils.settings();
115115
settings.customTypeMappings = Collections.singletonMap("cz.habarta.typescript.generator.GenericCustomTypeMappingsTest$Generic2[T1, T2]", "Test[T2, T1]");
116116
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Usage.class));
117-
System.out.println(output);
118117
Assert.assertTrue(output.contains("generic: Test<number, string>"));
119118
}
120119

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/ObjectAsIdTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,18 @@ public void testGenerics() {
172172
Assert.assertTrue(output.contains("objectReference: string"));
173173
}
174174

175+
@Test
176+
public void testDisableObjectIdentity() {
177+
final Settings settings = TestUtils.settings();
178+
settings.jackson2Configuration = new Jackson2ConfigurationResolved();
179+
settings.jackson2Configuration.disableObjectIdentityFeature = true;
180+
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Wrapper.class));
181+
Assert.assertTrue(output.contains("testObjectA1: TestObjectA"));
182+
Assert.assertTrue(output.contains("testObjectB1: TestObjectB"));
183+
Assert.assertTrue(output.contains("testObjectC1: TestObjectC<string>"));
184+
Assert.assertTrue(output.contains("testObjectD1: TestObjectD"));
185+
Assert.assertTrue(output.contains("testObjectE1: TestObjectE"));
186+
}
175187

176188
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "@@@id")
177189
@JsonIdentityReference(alwaysAsId = true)

0 commit comments

Comments
 (0)