Skip to content

Commit 7f62ffd

Browse files
committed
[Fix #634] Preserving union class order
Signed-off-by: fjtirado <ftirados@redhat.com>
1 parent a7efd23 commit 7f62ffd

File tree

5 files changed

+16
-39
lines changed

5 files changed

+16
-39
lines changed

custom-generator/src/main/java/io/serverlessworkflow/generator/AllAnyOneOfSchemaRule.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import com.fasterxml.jackson.databind.JsonNode;
1919
import com.fasterxml.jackson.databind.node.ArrayNode;
20+
import com.sun.codemodel.JAnnotationArrayMember;
2021
import com.sun.codemodel.JBlock;
2122
import com.sun.codemodel.JClass;
2223
import com.sun.codemodel.JClassAlreadyExistsException;
@@ -317,11 +318,11 @@ private JDefinedClass populateOneOf(
317318
commonType.orElse(definedClass.owner().ref(Object.class)),
318319
ruleFactory.getNameHelper().getPropertyName("value", null),
319320
null);
320-
321321
definedClass._implements(
322322
definedClass.owner().ref(OneOfValueProvider.class).narrow(valueField.type()));
323323
GeneratorUtils.implementInterface(definedClass, valueField);
324-
definedClass.annotate(Union.class);
324+
JAnnotationArrayMember unionAnnotation = definedClass.annotate(Union.class).paramArray("value");
325+
oneOfTypes.forEach(t -> unionAnnotation.param(t.getType()));
325326
return wrapAll(parentSchema, definedClass, commonType, oneOfTypes, Optional.of(valueField));
326327
}
327328

custom-generator/src/main/java/io/serverlessworkflow/generator/GeneratorUtils.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.sun.codemodel.JFieldVar;
2020
import com.sun.codemodel.JMethod;
2121
import com.sun.codemodel.JMod;
22-
import io.serverlessworkflow.annotations.GetterMethod;
2322
import org.jsonschema2pojo.util.NameHelper;
2423

2524
public class GeneratorUtils {
@@ -39,7 +38,6 @@ public static JMethod getterMethod(
3938
instanceField.type(),
4039
nameHelper.getGetterName(name, instanceField.type(), null));
4140
method.body()._return(instanceField);
42-
method.annotate(GetterMethod.class);
4341
return method;
4442
}
4543

jackson-generator/src/main/java/io/serverlessworkflow/generator/jackson/JacksonMixInPojo.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import com.sun.codemodel.JMethod;
3434
import com.sun.codemodel.JMod;
3535
import com.sun.codemodel.JPackage;
36+
import io.github.classgraph.AnnotationClassRef;
37+
import io.github.classgraph.AnnotationInfo;
3638
import io.github.classgraph.ClassGraph;
3739
import io.github.classgraph.ClassInfo;
3840
import io.github.classgraph.ClassRefTypeSignature;
@@ -41,7 +43,6 @@
4143
import io.github.classgraph.TypeArgument;
4244
import io.github.classgraph.TypeSignature;
4345
import io.serverlessworkflow.annotations.AdditionalProperties;
44-
import io.serverlessworkflow.annotations.GetterMethod;
4546
import io.serverlessworkflow.annotations.Item;
4647
import io.serverlessworkflow.annotations.ItemKey;
4748
import io.serverlessworkflow.annotations.ItemValue;
@@ -52,7 +53,8 @@
5253
import java.lang.annotation.Annotation;
5354
import java.nio.file.Files;
5455
import java.util.Collection;
55-
import java.util.LinkedHashSet;
56+
import java.util.stream.Collectors;
57+
import java.util.stream.Stream;
5658
import org.apache.maven.plugin.AbstractMojo;
5759
import org.apache.maven.plugin.MojoExecutionException;
5860
import org.apache.maven.plugin.MojoFailureException;
@@ -216,12 +218,12 @@ private JDefinedClass createMixInClass(ClassInfo classInfo) throws JClassAlready
216218
}
217219

218220
private Collection<JClass> getUnionClasses(ClassInfo unionClassInfo) {
219-
Collection<JClass> result = new LinkedHashSet<JClass>();
220-
unionClassInfo
221-
.getMethodInfo()
222-
.filter(f -> f.hasAnnotation(GetterMethod.class))
223-
.forEach(m -> result.add(getReturnType(m)));
224-
return result;
221+
AnnotationInfo info = unionClassInfo.getAnnotationInfoRepeatable(Union.class).get(0);
222+
Object[] unionClasses = (Object[]) info.getParameterValues().getValue("value");
223+
return Stream.of(unionClasses)
224+
.map(AnnotationClassRef.class::cast)
225+
.map(ref -> codeModel.ref(ref.getName()))
226+
.collect(Collectors.toList());
225227
}
226228

227229
private JClass getReturnType(MethodInfo info) {

serverlessworkflow-annotations/src/main/java/io/serverlessworkflow/annotations/GetterMethod.java

Lines changed: 0 additions & 26 deletions
This file was deleted.

serverlessworkflow-annotations/src/main/java/io/serverlessworkflow/annotations/Union.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,6 @@
2323

2424
@Retention(RUNTIME)
2525
@Target(ElementType.TYPE)
26-
public @interface Union {}
26+
public @interface Union {
27+
Class<?>[] value();
28+
}

0 commit comments

Comments
 (0)