From f5cd81db4ceae53609cddea2e21e46c04ec1f45e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 9 May 2025 23:11:53 +0200 Subject: [PATCH 1/4] Fix complex (non-scalar) input collections in Java --- packages/plugins/java/java/src/visitor.ts | 10 +++++++++- packages/plugins/java/java/tests/java.spec.ts | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/plugins/java/java/src/visitor.ts b/packages/plugins/java/java/src/visitor.ts index 2fb80a607..167d15c47 100644 --- a/packages/plugins/java/java/src/visitor.ts +++ b/packages/plugins/java/java/src/visitor.ts @@ -237,7 +237,15 @@ export class JavaResolversVisitor extends BaseVisitor< } return indentMultiline( `if (args.get("${arg.name.value}") != null) { - this.${arg.name.value} = (${this.config.listType}<${typeToUse.baseType}>) args.get("${arg.name.value}"); + this.${arg.name.value} = new ArrayList<${typeToUse.baseType}>(); + for (var o : (${this.config.listType}) args.get("${arg.name.value}")) { + if (o != null) { + this.${arg.name.value}.add(new ${typeToUse.baseType}(o)); + } + else { + this.${arg.name.value}.add(null); + } + } }`, 3, ); diff --git a/packages/plugins/java/java/tests/java.spec.ts b/packages/plugins/java/java/tests/java.spec.ts index bcf66d98f..427dee327 100644 --- a/packages/plugins/java/java/tests/java.spec.ts +++ b/packages/plugins/java/java/tests/java.spec.ts @@ -158,7 +158,15 @@ describe('Java', () => { if (args != null) { this.f = (Iterable) args.get("f"); if (args.get("g") != null) { - this.g = (Iterable) args.get("g"); + this.g = new ArrayList(); + for (var o : (Iterable) args.get("g")) { + if (o != null) { + this.g.add(new SearchUserInput(o)); + } + else { + this.g.add(null); + } + } } } } From 3d3829d6141ddb0c37d73c73cd6e1c1d5f0d289e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 9 May 2025 23:17:27 +0200 Subject: [PATCH 2/4] Add changelog --- .changeset/petite-nights-add.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/petite-nights-add.md diff --git a/.changeset/petite-nights-add.md b/.changeset/petite-nights-add.md new file mode 100644 index 000000000..72ae3e208 --- /dev/null +++ b/.changeset/petite-nights-add.md @@ -0,0 +1,5 @@ +--- +'@graphql-codegen/java': patch +--- + +Fix complex (non-scalar) input collections From c127f0fb042982e25fc3a8acd0b3c6c2d0727f67 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 9 May 2025 23:58:32 +0200 Subject: [PATCH 3/4] Fix generated type, add import for ArrayList --- packages/plugins/java/java/src/visitor.ts | 3 ++- packages/plugins/java/java/tests/java.spec.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/plugins/java/java/src/visitor.ts b/packages/plugins/java/java/src/visitor.ts index 167d15c47..f69c0f23c 100644 --- a/packages/plugins/java/java/src/visitor.ts +++ b/packages/plugins/java/java/src/visitor.ts @@ -73,6 +73,7 @@ export class JavaResolversVisitor extends BaseVisitor< } if (this._addListImport) { + allImports.push(`java.util.ArrayList`); allImports.push(`java.util.List`); allImports.push(`java.util.stream.Collectors`); } @@ -238,7 +239,7 @@ export class JavaResolversVisitor extends BaseVisitor< return indentMultiline( `if (args.get("${arg.name.value}") != null) { this.${arg.name.value} = new ArrayList<${typeToUse.baseType}>(); - for (var o : (${this.config.listType}) args.get("${arg.name.value}")) { + for (var o : (${this.config.listType}>) args.get("${arg.name.value}")) { if (o != null) { this.${arg.name.value}.add(new ${typeToUse.baseType}(o)); } diff --git a/packages/plugins/java/java/tests/java.spec.ts b/packages/plugins/java/java/tests/java.spec.ts index 427dee327..29edffa0f 100644 --- a/packages/plugins/java/java/tests/java.spec.ts +++ b/packages/plugins/java/java/tests/java.spec.ts @@ -159,7 +159,7 @@ describe('Java', () => { this.f = (Iterable) args.get("f"); if (args.get("g") != null) { this.g = new ArrayList(); - for (var o : (Iterable) args.get("g")) { + for (var o : (Iterable>) args.get("g")) { if (o != null) { this.g.add(new SearchUserInput(o)); } From 1a2a57c1bec099f525aa058144e8c3a93b79ac37 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 11 May 2025 22:22:04 +0200 Subject: [PATCH 4/4] Use stream to make code more concise --- packages/plugins/java/java/src/visitor.ts | 13 +++---------- packages/plugins/java/java/tests/java.spec.ts | 12 +++--------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/packages/plugins/java/java/src/visitor.ts b/packages/plugins/java/java/src/visitor.ts index f69c0f23c..1c693e4ac 100644 --- a/packages/plugins/java/java/src/visitor.ts +++ b/packages/plugins/java/java/src/visitor.ts @@ -73,7 +73,6 @@ export class JavaResolversVisitor extends BaseVisitor< } if (this._addListImport) { - allImports.push(`java.util.ArrayList`); allImports.push(`java.util.List`); allImports.push(`java.util.stream.Collectors`); } @@ -238,15 +237,9 @@ export class JavaResolversVisitor extends BaseVisitor< } return indentMultiline( `if (args.get("${arg.name.value}") != null) { - this.${arg.name.value} = new ArrayList<${typeToUse.baseType}>(); - for (var o : (${this.config.listType}>) args.get("${arg.name.value}")) { - if (o != null) { - this.${arg.name.value}.add(new ${typeToUse.baseType}(o)); - } - else { - this.${arg.name.value}.add(null); - } - } + this.${arg.name.value} = ((${this.config.listType}>) args.get("${arg.name.value}")).stream() + .map(o -> o == null ? null : new ${typeToUse.baseType}(o)) + .collect(Collectors.toList()); }`, 3, ); diff --git a/packages/plugins/java/java/tests/java.spec.ts b/packages/plugins/java/java/tests/java.spec.ts index 29edffa0f..47526cf2e 100644 --- a/packages/plugins/java/java/tests/java.spec.ts +++ b/packages/plugins/java/java/tests/java.spec.ts @@ -158,15 +158,9 @@ describe('Java', () => { if (args != null) { this.f = (Iterable) args.get("f"); if (args.get("g") != null) { - this.g = new ArrayList(); - for (var o : (Iterable>) args.get("g")) { - if (o != null) { - this.g.add(new SearchUserInput(o)); - } - else { - this.g.add(null); - } - } + this.g = ((Iterable>) args.get("g")).stream() + .map(o -> o == null ? null : new SearchUserInput(o)) + .collect(Collectors.toList()); } } }