55import java .util .HashMap ;
66import java .util .HashSet ;
77import java .util .Iterator ;
8+ import java .util .LinkedList ;
89import java .util .List ;
910import java .util .ListIterator ;
1011import java .util .Map ;
@@ -63,6 +64,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
6364 public static final String DISABLE_HTML_ESCAPING = "disableHtmlEscaping" ;
6465 public static final String ERROR_ON_UNKNOWN_ENUM = "errorOnUnknownEnum" ;
6566 public static final String CHECK_DUPLICATED_MODEL_NAME = "checkDuplicatedModelName" ;
67+ public static final String ADDITIONAL_MODEL_TYPE_ANNOTATIONS = "additionalModelTypeAnnotations" ;
6668
6769 protected String dateLibrary = "threetenbp" ;
6870 protected boolean supportAsync = false ;
@@ -98,6 +100,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
98100 protected boolean disableHtmlEscaping = false ;
99101 private NotNullAnnotationFeatures notNullOption ;
100102 private IgnoreUnknownJacksonFeatures ignoreUnknown ;
103+ protected List <String > additionalModelTypeAnnotations = new LinkedList <>();
101104
102105 public AbstractJavaCodegen () {
103106 super ();
@@ -198,6 +201,7 @@ public AbstractJavaCodegen() {
198201
199202 cliOptions .add (CliOption .newBoolean (DISABLE_HTML_ESCAPING , "Disable HTML escaping of JSON strings when using gson (needed to avoid problems with byte[] fields)" ));
200203 cliOptions .add (CliOption .newBoolean (CHECK_DUPLICATED_MODEL_NAME , "Check if there are duplicated model names (ignoring case)" ));
204+ cliOptions .add (CliOption .newString (ADDITIONAL_MODEL_TYPE_ANNOTATIONS , "Additional annotations for model type(class level annotations)" ));
201205 }
202206
203207 @ Override
@@ -214,6 +218,11 @@ public void processOpts() {
214218 }
215219 additionalProperties .put (DISABLE_HTML_ESCAPING , disableHtmlEscaping );
216220
221+ if (additionalProperties .containsKey (ADDITIONAL_MODEL_TYPE_ANNOTATIONS )) {
222+ String additionalAnnotationsList = additionalProperties .get (ADDITIONAL_MODEL_TYPE_ANNOTATIONS ).toString ();
223+ this .setAdditionalModelTypeAnnotations (Arrays .asList (additionalAnnotationsList .split (";" )));
224+ }
225+
217226 if (additionalProperties .containsKey (CodegenConstants .INVOKER_PACKAGE )) {
218227 this .setInvokerPackage ((String ) additionalProperties .get (CodegenConstants .INVOKER_PACKAGE ));
219228 } else if (additionalProperties .containsKey (CodegenConstants .API_PACKAGE )) {
@@ -508,6 +517,18 @@ public void processOpts() {
508517 this .skipAliasGeneration = Boolean .TRUE ;
509518 }
510519 }
520+
521+ @ Override
522+ public Map <String , Object > postProcessAllModels (Map <String , Object > objs ) {
523+ objs = super .postProcessAllModels (objs );
524+ if (!additionalModelTypeAnnotations .isEmpty ()) {
525+ for (String modelName : objs .keySet ()) {
526+ Map <String , Object > models = (Map <String , Object >) objs .get (modelName );
527+ models .put (ADDITIONAL_MODEL_TYPE_ANNOTATIONS , additionalModelTypeAnnotations );
528+ }
529+ }
530+ return objs ;
531+ }
511532
512533 private void sanitizeConfig () {
513534 // Sanitize any config options here. We also have to update the additionalProperties because
@@ -1450,6 +1471,10 @@ public void setDisableHtmlEscaping(boolean disabled) {
14501471 public void setSupportAsync (boolean enabled ) {
14511472 this .supportAsync = enabled ;
14521473 }
1474+
1475+ public void setAdditionalModelTypeAnnotations (final List <String > additionalModelTypeAnnotations ) {
1476+ this .additionalModelTypeAnnotations = additionalModelTypeAnnotations ;
1477+ }
14531478
14541479 @ Override
14551480 public String escapeQuotationMark (String input ) {
0 commit comments