diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index 2c21fbc547..f66d0de6fe 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -326,6 +326,7 @@ runs: hashFiles( 'clients/algoliasearch-client-java-2/**', '!clients/algoliasearch-client-java-2/target', + 'templates/java/**', 'specs/bundled/search.yml' )}} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a84ece97d0..410406c43a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -202,6 +202,7 @@ jobs: hashFiles( format('{0}/**', matrix.client.folder), format('!{0}/target', matrix.client.folder), + 'templates/java/**', format('specs/bundled/{0}.yml', matrix.client.name) )}} diff --git a/.gitignore b/.gitignore index 369c3c63af..273f78ec23 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ dist .openapi-generator tests/output/*/.openapi-generator-ignore + +generators/bin diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java index 406084ae20..09a8dac8b5 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java @@ -115,7 +115,19 @@ public Map postProcessAllModels(Map objs) { CodegenModel model = ((Map>>) modelContainer).get("models").get(0) .get("model"); if (!model.oneOf.isEmpty()) { + List> listOneOf = new ArrayList(); + + for (String iterateModel : model.oneOf) { + HashMap hashMapOneOf = new HashMap(); + + hashMapOneOf.put("type", iterateModel); + hashMapOneOf.put("name", iterateModel.replace("<", "").replace(">", "")); + + listOneOf.add(hashMapOneOf); + } + model.vendorExtensions.put("x-is-one-of-interface", true); + model.vendorExtensions.put("x-is-one-of-list", listOneOf); } } diff --git a/generators/src/main/java/com/algolia/codegen/cts/ParametersWithDataType.java b/generators/src/main/java/com/algolia/codegen/cts/ParametersWithDataType.java index db00b3950f..bc5b42d8b4 100644 --- a/generators/src/main/java/com/algolia/codegen/cts/ParametersWithDataType.java +++ b/generators/src/main/java/com/algolia/codegen/cts/ParametersWithDataType.java @@ -165,7 +165,14 @@ private void handleModel(String paramName, Object param, Map tes IJsonSchemaValidationProperties match = findMatchingOneOf(param, model); testOutput.clear(); testOutput.putAll(traverseParams(paramName, param, match, parent, suffix)); - testOutput.put("oneOfModel", baseType); + + HashMap hashMapOneOfModel = new HashMap(); + + hashMapOneOfModel.put("classname", baseType); + hashMapOneOfModel.put("name", getTypeName(match).replace("<", "").replace(">", "")); + + testOutput.put("oneOfModel", hashMapOneOfModel); + return; } diff --git a/templates/java/oneof_interface.mustache b/templates/java/oneof_interface.mustache index 1f9979e490..577f7e5b71 100644 --- a/templates/java/oneof_interface.mustache +++ b/templates/java/oneof_interface.mustache @@ -11,12 +11,12 @@ import java.io.IOException; @JsonAdapter({{classname}}.Adapter.class) {{>additionalModelTypeAnnotations}} public abstract class {{classname}} implements CompoundType { - {{#oneOf}} - public static {{classname}} of({{.}} inside) { - return new {{classname}}{{.}}(inside); + {{#vendorExtensions.x-is-one-of-list}} + public static {{classname}} of{{name}}({{{type}}} inside) { + return new {{classname}}{{name}}(inside); } - {{/oneOf}} + {{/vendorExtensions.x-is-one-of-list}} public abstract Object getInsideValue(); public static class Adapter extends TypeAdapter<{{classname}}> { @@ -37,18 +37,18 @@ public abstract class {{classname}} implements CompoundType { } } -{{#oneOf}} +{{#vendorExtensions.x-is-one-of-list}} @JsonAdapter({{classname}}.Adapter.class) -class {{classname}}{{.}} extends {{classname}} { - private final {{.}} insideValue; +class {{classname}}{{name}} extends {{classname}} { + private final {{{type}}} insideValue; - {{classname}}{{.}}({{.}} insideValue) { + {{classname}}{{name}}({{{type}}} insideValue) { this.insideValue = insideValue; } @Override - public {{.}} getInsideValue() { + public {{{type}}} getInsideValue() { return insideValue; } } -{{/oneOf}} +{{/vendorExtensions.x-is-one-of-list}} diff --git a/tests/CTS/methods/requests/templates/java/requests.mustache b/tests/CTS/methods/requests/templates/java/requests.mustache index 5b3940022f..9e5b990d18 100644 --- a/tests/CTS/methods/requests/templates/java/requests.mustache +++ b/tests/CTS/methods/requests/templates/java/requests.mustache @@ -36,7 +36,7 @@ class {{client}}Tests { {{#parametersWithDataType}}{{> generateParams}}{{/parametersWithDataType}} EchoResponseInterface req = (EchoResponseInterface) assertDoesNotThrow(() -> { - return client.{{method}}({{#parametersWithDataType}}{{#oneOfModel}}{{{.}}}.of({{{key}}}{{suffix}}){{/oneOfModel}}{{^oneOfModel}}{{{key}}}{{suffix}}{{/oneOfModel}}{{^-last}},{{/-last}}{{/parametersWithDataType}}); + return client.{{method}}({{#parametersWithDataType}}{{#oneOfModel}}{{{classname}}}.of{{{name}}}({{{key}}}{{suffix}}){{/oneOfModel}}{{^oneOfModel}}{{{key}}}{{suffix}}{{/oneOfModel}}{{^-last}},{{/-last}}{{/parametersWithDataType}}); }); assertEquals(req.getPath(), "{{{request.path}}}"); diff --git a/tests/output/java/src/test/java/com/algolia/methods/requests/search.test.java b/tests/output/java/src/test/java/com/algolia/methods/requests/search.test.java index 28ea4f3a0d..a8940c1571 100644 --- a/tests/output/java/src/test/java/com/algolia/methods/requests/search.test.java +++ b/tests/output/java/src/test/java/com/algolia/methods/requests/search.test.java @@ -723,7 +723,10 @@ void deleteByTest0() { } EchoResponseInterface req = (EchoResponseInterface) assertDoesNotThrow(() -> { - return client.deleteBy(indexName0, SearchParams.of(searchParams0)); + return client.deleteBy( + indexName0, + SearchParams.ofSearchParamsObject(searchParams0) + ); } ); @@ -1722,7 +1725,10 @@ void searchTest0() { } EchoResponseInterface req = (EchoResponseInterface) assertDoesNotThrow(() -> { - return client.search(indexName0, SearchParams.of(searchParams0)); + return client.search( + indexName0, + SearchParams.ofSearchParamsObject(searchParams0) + ); } );