Skip to content

Commit d1395f5

Browse files
committed
Make JsonTypeInfo configurable in Java code generation
1 parent 36f1804 commit d1395f5

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

core/esmf-aspect-model-java-generator/src/main/java/org/eclipse/esmf/aspectmodel/java/AspectModelJavaUtil.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,9 @@ public static String generateAbstractEntityClassAnnotations( final ComplexType e
223223
codeGenerationConfig.importTracker().importExplicit( JsonTypeInfo.class );
224224
codeGenerationConfig.importTracker().importExplicit( JsonSubTypes.class );
225225

226-
classAnnotationBuilder.append( "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)" );
226+
classAnnotationBuilder.append( "@JsonTypeInfo(use = JsonTypeInfo.Id." );
227+
classAnnotationBuilder.append( codeGenerationConfig.jsonTypeInfo().toString() );
228+
classAnnotationBuilder.append( ")" );
227229
classAnnotationBuilder.append( "@JsonSubTypes({" );
228230
final Iterator<ComplexType> extendingComplexTypeIterator = getExtendingClosure( element, extendingEntities ).iterator();
229231
while ( extendingComplexTypeIterator.hasNext() ) {
@@ -240,7 +242,9 @@ public static String generateAbstractEntityClassAnnotations( final ComplexType e
240242
classAnnotationBuilder.append( "})" );
241243
} else if ( element.getExtends().isPresent() ) {
242244
codeGenerationConfig.importTracker().importExplicit( JsonTypeInfo.class );
243-
classAnnotationBuilder.append( "@JsonTypeInfo(use = JsonTypeInfo.Id.NAME," );
245+
classAnnotationBuilder.append( "@JsonTypeInfo(use = JsonTypeInfo.Id." );
246+
classAnnotationBuilder.append( codeGenerationConfig.jsonTypeInfo().toString() );
247+
classAnnotationBuilder.append( "," );
244248
classAnnotationBuilder.append( " defaultImpl = " );
245249
classAnnotationBuilder.append( element.getName() );
246250
classAnnotationBuilder.append( ".class)" );

core/esmf-aspect-model-java-generator/src/main/java/org/eclipse/esmf/aspectmodel/java/JavaCodeGenerationConfig.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,21 @@
2121
import io.soabase.recordbuilder.core.RecordBuilder;
2222

2323
/**
24-
* A {@link GenerationConfig} for Java code
24+
* A {@link GenerationConfig} for Java code.
25+
*
26+
* @param enableJacksonAnnotations Controls whether Jackson annotations should be added to the generated Java classes
27+
* @param jsonTypeInfo Corresponds to com.fasterxml.jackson.annotation.JsonTypeInfo.Id and selects which JsonTypeInfo kind is used
28+
* @param packageName the package name that classes should be created in
29+
* @param importTracker the instance of the tracker that tracks imports during code generation
30+
* @param executeLibraryMacros determines whether template macros given in templateLibFile should be evaluatated
31+
* @param templateLibFile a file containing velocity macros overriding sections in the default code templates
32+
* @param namePrefix custom class name prefix
33+
* @param namePostfix custom class name postfix
2534
*/
2635
@RecordBuilder
2736
public record JavaCodeGenerationConfig(
2837
boolean enableJacksonAnnotations,
38+
JsonTypeInfoType jsonTypeInfo,
2939
String packageName,
3040
ImportTracker importTracker,
3141
boolean executeLibraryMacros,
@@ -34,7 +44,14 @@ public record JavaCodeGenerationConfig(
3444
String namePostfix
3545

3646
) implements GenerationConfig {
47+
public enum JsonTypeInfoType {
48+
NONE, CLASS, MINIMAL_CLASS, NAME, SIMPLE_NAME, DEDUCTION, CUSTOM
49+
}
50+
3751
public JavaCodeGenerationConfig {
52+
if ( jsonTypeInfo == null ) {
53+
jsonTypeInfo = JsonTypeInfoType.DEDUCTION;
54+
}
3855
if ( packageName == null ) {
3956
packageName = "";
4057
}

0 commit comments

Comments
 (0)