@@ -2692,21 +2692,26 @@ protected ImmutableMap.Builder<String, Mustache.Lambda> addMustacheLambdas() {
26922692 // use cases:
26932693 //
26942694 // private {{#lambda.jSpecifyDatatype}}{{{dataType}}}{{/lambda.jSpecifyDatatype}} {{param}}
2695+ // ->
26952696 // private @Nullable Time param
26962697 // private java.time.@Nullable Time
26972698 // private Time param
26982699 //
26992700 // {{#lambda.jSpecifyDatatype}}{{{dataType}}}{{/lambda.jSpecifyDatatype}} {{param}}
2701+ // ->
27002702 // @Nullable Time param
27012703 // java.time.@Nullable Time
27022704 // Time param
27032705 //
27042706 // {{#lambda.jSpecifyNullable}}@Nullable {{/lambda.jSpecifyNullable}}{{#lambda.jSpecifyDatatype}}{{{dataType}}}{{/lambda.jSpecifyDatatype}}
2707+ // ->
27052708 // @Nullable Time
27062709 // @java.time.@Nullable Time
2710+ // Time
2711+
27072712 Mustache .Lambda jSpecifyDatatypeLambda = (fragment , writer ) -> {
27082713 String dataType = fragment .execute ();
2709- if (jSpecifyNullableLambda .keptNullable != null ) {
2714+ if (jSpecifyNullableLambda .isSetAndClear () ) {
27102715 int idx = dataType .lastIndexOf ('.' );
27112716 if (idx > 0 ) {
27122717 // generate declaration like java.time.@Nullable Timestamp
@@ -2717,7 +2722,6 @@ protected ImmutableMap.Builder<String, Mustache.Lambda> addMustacheLambdas() {
27172722 writer .write ("@Nullable " );
27182723 writer .write (dataType );
27192724 }
2720- jSpecifyNullableLambda .keptNullable = null ;
27212725 } else {
27222726 writer .write (dataType );
27232727// writer.write(" ");
@@ -2734,9 +2738,14 @@ protected ImmutableMap.Builder<String, Mustache.Lambda> addMustacheLambdas() {
27342738 */
27352739 class JSpecifyNullableLambda implements Mustache .Lambda {
27362740 private String nullableAnnotation = "@Nullable" ;
2737- // remember if @Nullable is needed
2738- String keptNullable = null ;
2739-
2741+ // remember @Nullable annotation value when jspecify is used.
2742+ private String keptNullable = null ;
2743+
2744+ /**
2745+ * Override default nullable annotation, for example with a full qualified className
2746+ *
2747+ * @param nullableAnnotation annotation used by the generator, for example @jakarta.annotation.Nullable
2748+ */
27402749 public void setNullableAnnotation (String nullableAnnotation ) {
27412750 this .nullableAnnotation = nullableAnnotation ;
27422751 }
@@ -2758,6 +2767,12 @@ public void execute(Template.Fragment fragment, Writer writer) throws IOExceptio
27582767 }
27592768 writer .write (value );
27602769 }
2770+
2771+ public boolean isSetAndClear () {
2772+ boolean isSet = keptNullable != null ;
2773+ keptNullable = null ;
2774+ return isSet ;
2775+ }
27612776 }
27622777
27632778 /**
0 commit comments