5050import io .serverlessworkflow .annotations .Item ;
5151import io .serverlessworkflow .annotations .ItemKey ;
5252import io .serverlessworkflow .annotations .ItemValue ;
53+ import io .serverlessworkflow .generator .graalvm .ReflectNativeFileHandler ;
5354import java .io .File ;
5455import java .io .IOException ;
5556import java .io .PrintStream ;
@@ -78,6 +79,17 @@ public class JacksonMixInPojo extends AbstractMojo {
7879 defaultValue = "${project.build.directory}/generated-sources/jacksonmixinpojo" )
7980 private File outputDirectory ;
8081
82+ @ Parameter (defaultValue = "${project.groupId}" , readonly = true , required = true )
83+ private String groupId ;
84+
85+ @ Parameter (defaultValue = "${project.artifactId}" , readonly = true , required = true )
86+ private String artifactId ;
87+
88+ @ Parameter (
89+ property = "jacksonmixinpojo.outputResources" ,
90+ defaultValue = "${project.build.directory}/generated-resources" )
91+ private File outputResources ;
92+
8193 @ Parameter (property = "jacksonmixinpojo.srcPackage" )
8294 private String srcPackage ;
8395
@@ -90,6 +102,7 @@ public class JacksonMixInPojo extends AbstractMojo {
90102 private JCodeModel codeModel ;
91103 private JPackage rootPackage ;
92104 private JMethod setupMethod ;
105+ private ReflectNativeFileHandler nativeHandler ;
93106
94107 @ FunctionalInterface
95108 interface AnnotationProcessor {
@@ -107,12 +120,14 @@ public void execute() throws MojoExecutionException, MojoFailureException {
107120 .acceptPackages (srcPackage )
108121 .scan ()) {
109122 codeModel = new JCodeModel ();
123+ nativeHandler = new ReflectNativeFileHandler (groupId , artifactId );
110124 rootPackage = codeModel ._package (targetPackage );
111125 setupMethod =
112126 rootPackage
113127 ._class ("JacksonMixInModule" )
114128 ._extends (SimpleModule .class )
115129 .method (JMod .PUBLIC , codeModel .VOID , SETUP_METHOD );
130+ nativeHandler .addClasses (result .getAllClasses ().stream ().map (c -> c .getName ()));
116131 processAnnotatedClasses (result , ExclusiveUnion .class , this ::buildExclusiveUnionMixIn );
117132 processAnnotatedClasses (result , InclusiveUnion .class , this ::buildInclusiveUnionMixIn );
118133 processAnnotatedClasses (result , AdditionalProperties .class , this ::buildAdditionalPropsMixIn );
@@ -124,6 +139,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
124139 .arg (setupMethod .param (SetupContext .class , "context" ));
125140 Files .createDirectories (outputDirectory .toPath ());
126141 codeModel .build (outputDirectory , (PrintStream ) null );
142+
143+ nativeHandler .generate (outputResources .toPath ());
127144 } catch (JClassAlreadyExistsException | IOException e ) {
128145 getLog ().error (e );
129146 }
@@ -179,31 +196,28 @@ private void buildItemMixIn(ClassInfo classInfo, JDefinedClass mixClass)
179196 classInfo .getMethodInfo ().filter (m -> m .hasAnnotation (ItemKey .class )).get (0 );
180197 MethodInfo valueMethod =
181198 classInfo .getMethodInfo ().filter (m -> m .hasAnnotation (ItemValue .class )).get (0 );
182- mixClass
183- .annotate (JsonSerialize .class )
184- .param (
185- "using" ,
186- GeneratorUtils .generateSerializer (
187- rootPackage , relClass , keyMethod .getName (), valueMethod .getName ()));
188- mixClass
189- .annotate (JsonDeserialize .class )
190- .param (
191- "using" ,
192- GeneratorUtils .generateDeserializer (rootPackage , relClass , getReturnType (valueMethod )));
199+ JDefinedClass serializerClass =
200+ GeneratorUtils .generateSerializer (
201+ rootPackage , relClass , keyMethod .getName (), valueMethod .getName ());
202+ nativeHandler .addClass (serializerClass );
203+ mixClass .annotate (JsonSerialize .class ).param ("using" , serializerClass );
204+ JDefinedClass deserializerClass =
205+ GeneratorUtils .generateDeserializer (rootPackage , relClass , getReturnType (valueMethod ));
206+ nativeHandler .addClass (deserializerClass );
207+ mixClass .annotate (JsonDeserialize .class ).param ("using" , deserializerClass );
193208 }
194209
195210 private void buildExclusiveUnionMixIn (ClassInfo unionClassInfo , JDefinedClass unionMixClass )
196211 throws JClassAlreadyExistsException {
197212 JClass unionClass = codeModel .ref (unionClassInfo .getName ());
198- unionMixClass
199- .annotate (JsonSerialize .class )
200- .param ("using" , GeneratorUtils .generateSerializer (rootPackage , unionClass ));
201- unionMixClass
202- .annotate (JsonDeserialize .class )
203- .param (
204- "using" ,
205- GeneratorUtils .generateDeserializer (
206- rootPackage , unionClass , getUnionClasses (ExclusiveUnion .class , unionClassInfo )));
213+ JDefinedClass serializerClass = GeneratorUtils .generateSerializer (rootPackage , unionClass );
214+ unionMixClass .annotate (JsonSerialize .class ).param ("using" , serializerClass );
215+ nativeHandler .addClass (serializerClass );
216+ JDefinedClass deserializerClass =
217+ GeneratorUtils .generateDeserializer (
218+ rootPackage , unionClass , getUnionClasses (ExclusiveUnion .class , unionClassInfo ));
219+ unionMixClass .annotate (JsonDeserialize .class ).param ("using" , deserializerClass );
220+ nativeHandler .addClass (deserializerClass );
207221 }
208222
209223 private void buildInclusiveUnionMixIn (ClassInfo unionClassInfo , JDefinedClass unionMixClass )
0 commit comments