Skip to content

Commit 84fff10

Browse files
committed
[Fix_#359] Common class
Signed-off-by: Francisco Javier Tirado Sarti <ftirados@redhat.com>
1 parent 074f559 commit 84fff10

File tree

1 file changed

+35
-10
lines changed

1 file changed

+35
-10
lines changed

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

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
import java.io.UnsupportedEncodingException;
1212
import java.net.URI;
1313
import java.net.URLDecoder;
14+
import java.util.HashSet;
15+
import java.util.LinkedHashSet;
1416
import java.util.Optional;
17+
import java.util.Set;
1518
import org.jsonschema2pojo.Jsonschema2Pojo;
1619
import org.jsonschema2pojo.Schema;
1720
import org.jsonschema2pojo.exception.GenerationException;
@@ -99,18 +102,40 @@ private Optional<JType> oneOfType(
99102
Schema parentSchema) {
100103
if (schemaNode.has("oneOf")) {
101104
int i = 0;
105+
Set<JType> oneOfClasses = new HashSet<>();
102106
for (JsonNode oneOf : (ArrayNode) schemaNode.get("oneOf")) {
103-
apply(
104-
nodeName,
105-
oneOf,
106-
parent,
107-
generatableType.getPackage(),
108-
ruleFactory
109-
.getSchemaStore()
110-
.create(
111-
URI.create(parentSchema.getId().toString() + "/oneOf/" + i++),
112-
ruleFactory.getGenerationConfig().getRefFragmentPathDelimiters()));
107+
oneOfClasses.add(
108+
apply(
109+
nodeName,
110+
oneOf,
111+
parent,
112+
generatableType.getPackage(),
113+
ruleFactory
114+
.getSchemaStore()
115+
.create(
116+
URI.create(parentSchema.getId().toString() + "/oneOf/" + i++),
117+
ruleFactory.getGenerationConfig().getRefFragmentPathDelimiters())));
113118
}
119+
120+
Set<JClass> commonAncestors = null;
121+
for (JType oneOfClass : oneOfClasses) {
122+
Set<JClass> ancestors = new LinkedHashSet<>();
123+
while (oneOfClass instanceof JClass) {
124+
JClass parentClass = ((JClass) oneOfClass)._extends();
125+
if (parentClass instanceof JClass && !parentClass.name().equals("Object")) {
126+
ancestors.add(parentClass);
127+
}
128+
oneOfClass = parentClass;
129+
}
130+
if (commonAncestors == null) {
131+
commonAncestors = ancestors;
132+
} else {
133+
commonAncestors.retainAll(ancestors);
134+
}
135+
}
136+
return commonAncestors.isEmpty()
137+
? Optional.empty()
138+
: Optional.of(commonAncestors.iterator().next());
114139
}
115140
return Optional.empty();
116141
}

0 commit comments

Comments
 (0)