Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not skip "...on" in all$ methods for union and interface projections #1376

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,10 @@ public class ${className} extends GraphQLResponseProjection {
public ${className} all$(int maxDepth) {
<#list fields as field>
<#if field.type?has_content>
<#if field.methodName?substring(0,2) != "on">
if (projectionDepthOnFields.getOrDefault("${className}.${field.type}.${field.methodName}", 0) <= maxDepth) {
projectionDepthOnFields.put("${className}.${field.type}.${field.methodName}", projectionDepthOnFields.getOrDefault("${className}.${field.type}.${field.methodName}", 0) + 1);
this.${field.methodName}(new ${field.type}().all$(maxDepth - projectionDepthOnFields.getOrDefault("${className}.${field.type}.${field.methodName}", 0)));
}
</#if>
<#else>
this.${field.methodName}();
</#if>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,10 @@ open class ${className} : GraphQLResponseProjection {
fun `all$`(maxDepth: Int): ${className} {
<#list fields as field>
<#if field.type?has_content>
<#if field.methodName?substring(0, 2) != "on">
if (projectionDepthOnFields.getOrDefault("${className}.${field.type}.${field.methodName}", 0) <= maxDepth) {
projectionDepthOnFields["${className}.${field.type}.${field.methodName}"] = projectionDepthOnFields.getOrDefault("${className}.${field.type}.${field.methodName}", 0) + 1
this.${field.methodName}(${field.type}().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("${className}.${field.type}.${field.methodName}", 0)))
}
</#if>
<#else>
this.${field.methodName}()
</#if>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,10 @@ class ${className}() extends GraphQLResponseProjection() {
def all$(maxDepth: Int): ${className} = {
<#list fields as field>
<#if field.type?has_content>
<#if field.methodName?substring(0, 2) != "on">
if (projectionDepthOnFields.getOrElse("${className}.${field.type}.${field.methodName}", 0) <= maxDepth) {
projectionDepthOnFields.put("${className}.${field.type}.${field.methodName}", projectionDepthOnFields.getOrElse("${className}.${field.type}.${field.methodName}", 0) + 1)
this.${field.methodName}(new ${field.type}().all$(maxDepth - projectionDepthOnFields.getOrElse("${className}.${field.type}.${field.methodName}", 0)))
}
</#if>
<#else>
this.${field.methodName}()
</#if>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.kobylynskyi.graphql.codegen;

import com.kobylynskyi.graphql.codegen.java.JavaGraphQLCodegen;
import com.kobylynskyi.graphql.codegen.model.MappingConfig;
import com.kobylynskyi.graphql.codegen.utils.Utils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;
import java.util.Objects;

import static com.kobylynskyi.graphql.codegen.TestUtils.assertSameTrimmedContent;
import static com.kobylynskyi.graphql.codegen.TestUtils.getFileByName;
import static java.util.Collections.singletonList;

class GraphQLCodegenUnionProjectionTest {

private final File outputBuildDir = new File("build/generated");

private MappingConfig mappingConfig;

@BeforeEach
void init() {
mappingConfig = new MappingConfig();
mappingConfig.setGenerateClient(true);
}

@AfterEach
void cleanup() {
Utils.deleteDir(outputBuildDir);
}

@Test
void generate_CheckFiles_with_projections() throws Exception {
generate();

File outputJavaClassesDir = new File("build/generated");
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());

assertSameTrimmedContent(new File("src/test/resources/expected-classes/" +
"UnionToResolveResponseProjection.java.txt"),
getFileByName(files, "UnionToResolveResponseProjection.java"));
}

private void generate() throws IOException {
new JavaGraphQLCodegen(singletonList("src/test/resources/schemas/union-projection.graphqls"),
outputBuildDir, mappingConfig, TestUtils.getStaticGeneratedInfo(mappingConfig))
.generate();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLResponseField;
import com.kobylynskyi.graphql.codegen.model.graphql.GraphQLResponseProjection;
import java.util.HashMap;
import java.util.Map;
import java.util.List;

/**
* Response projection for UnionToResolve
*/
@javax.annotation.Generated(
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
date = "2020-12-31T23:59:59-0500"
)
public class UnionToResolveResponseProjection extends GraphQLResponseProjection {

private final Map<String, Integer> projectionDepthOnFields = new HashMap<>();

public UnionToResolveResponseProjection() {
}

public UnionToResolveResponseProjection(UnionToResolveResponseProjection projection) {
super(projection);
}

public UnionToResolveResponseProjection(List<UnionToResolveResponseProjection> projections) {
super(projections);
}

public UnionToResolveResponseProjection all$() {
return all$(3);
}

public UnionToResolveResponseProjection all$(int maxDepth) {
if (projectionDepthOnFields.getOrDefault("UnionToResolveResponseProjection.UnionMemberAResponseProjection.onUnionMemberA", 0) <= maxDepth) {
projectionDepthOnFields.put("UnionToResolveResponseProjection.UnionMemberAResponseProjection.onUnionMemberA", projectionDepthOnFields.getOrDefault("UnionToResolveResponseProjection.UnionMemberAResponseProjection.onUnionMemberA", 0) + 1);
this.onUnionMemberA(new UnionMemberAResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("UnionToResolveResponseProjection.UnionMemberAResponseProjection.onUnionMemberA", 0)));
}
if (projectionDepthOnFields.getOrDefault("UnionToResolveResponseProjection.UnionMemberBResponseProjection.onUnionMemberB", 0) <= maxDepth) {
projectionDepthOnFields.put("UnionToResolveResponseProjection.UnionMemberBResponseProjection.onUnionMemberB", projectionDepthOnFields.getOrDefault("UnionToResolveResponseProjection.UnionMemberBResponseProjection.onUnionMemberB", 0) + 1);
this.onUnionMemberB(new UnionMemberBResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("UnionToResolveResponseProjection.UnionMemberBResponseProjection.onUnionMemberB", 0)));
}
this.typename();
return this;
}

public UnionToResolveResponseProjection onUnionMemberA(UnionMemberAResponseProjection subProjection) {
return onUnionMemberA(null, subProjection);
}

public UnionToResolveResponseProjection onUnionMemberA(String alias, UnionMemberAResponseProjection subProjection) {
add$(new GraphQLResponseField("...on UnionMemberA").alias(alias).projection(subProjection));
return this;
}

public UnionToResolveResponseProjection onUnionMemberB(UnionMemberBResponseProjection subProjection) {
return onUnionMemberB(null, subProjection);
}

public UnionToResolveResponseProjection onUnionMemberB(String alias, UnionMemberBResponseProjection subProjection) {
add$(new GraphQLResponseField("...on UnionMemberB").alias(alias).projection(subProjection));
return this;
}

public UnionToResolveResponseProjection typename() {
return typename(null);
}

public UnionToResolveResponseProjection typename(String alias) {
add$(new GraphQLResponseField("__typename").alias(alias));
return this;
}

@Override
public UnionToResolveResponseProjection deepCopy$() {
return new UnionToResolveResponseProjection(this);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,34 @@ open class SearchResultItemResponseProjection : GraphQLResponseProjection {
fun `all$`(): SearchResultItemResponseProjection = `all$`(3)

fun `all$`(maxDepth: Int): SearchResultItemResponseProjection {
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.AppResponseProjection.onApp", 0) <= maxDepth) {
projectionDepthOnFields["SearchResultItemResponseProjection.AppResponseProjection.onApp"] = projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.AppResponseProjection.onApp", 0) + 1
this.onApp(AppResponseProjection().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.AppResponseProjection.onApp", 0)))
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository", 0) <= maxDepth) {
projectionDepthOnFields["SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository"] = projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository", 0) + 1
this.onRepository(RepositoryResponseProjection().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository", 0)))
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.IssueResponseProjection.onIssue", 0) <= maxDepth) {
projectionDepthOnFields["SearchResultItemResponseProjection.IssueResponseProjection.onIssue"] = projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.IssueResponseProjection.onIssue", 0) + 1
this.onIssue(IssueResponseProjection().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.IssueResponseProjection.onIssue", 0)))
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization", 0) <= maxDepth) {
projectionDepthOnFields["SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization"] = projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization", 0) + 1
this.onOrganization(OrganizationResponseProjection().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization", 0)))
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.UserResponseProjection.onUser", 0) <= maxDepth) {
projectionDepthOnFields["SearchResultItemResponseProjection.UserResponseProjection.onUser"] = projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.UserResponseProjection.onUser", 0) + 1
this.onUser(UserResponseProjection().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.UserResponseProjection.onUser", 0)))
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing", 0) <= maxDepth) {
projectionDepthOnFields["SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing"] = projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing", 0) + 1
this.onMarketplaceListing(MarketplaceListingResponseProjection().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing", 0)))
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest", 0) <= maxDepth) {
projectionDepthOnFields["SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest"] = projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest", 0) + 1
this.onPullRequest(PullRequestResponseProjection().`all$`(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest", 0)))
}
this.typename()
return this
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ public class LocationResponseProjection extends GraphQLResponseProjection {
public LocationResponseProjection all$(int maxDepth) {
this.id();
this.locationType();
if (projectionDepthOnFields.getOrDefault("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", 0) <= maxDepth) {
projectionDepthOnFields.put("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", projectionDepthOnFields.getOrDefault("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", 0) + 1);
this.onCustomerLocation(new CustomerLocationResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", 0)));
}
if (projectionDepthOnFields.getOrDefault("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", 0) <= maxDepth) {
projectionDepthOnFields.put("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", projectionDepthOnFields.getOrDefault("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", 0) + 1);
this.onDealerLocation(new DealerLocationResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", 0)));
}
this.typename();
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ public class LocationResponseProjection extends GraphQLResponseProjection {
public LocationResponseProjection all$(int maxDepth) {
this.id();
this.locationType();
if (projectionDepthOnFields.getOrDefault("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", 0) <= maxDepth) {
projectionDepthOnFields.put("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", projectionDepthOnFields.getOrDefault("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", 0) + 1);
this.onCustomerLocation(new CustomerLocationResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("LocationResponseProjection.CustomerLocationResponseProjection.onCustomerLocation", 0)));
}
if (projectionDepthOnFields.getOrDefault("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", 0) <= maxDepth) {
projectionDepthOnFields.put("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", projectionDepthOnFields.getOrDefault("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", 0) + 1);
this.onDealerLocation(new DealerLocationResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("LocationResponseProjection.DealerLocationResponseProjection.onDealerLocation", 0)));
}
this.typename();
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,34 @@ public class SearchResultItemResponseProjection extends GraphQLResponseProjectio
}

public SearchResultItemResponseProjection all$(int maxDepth) {
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.AppResponseProjection.onApp", 0) <= maxDepth) {
projectionDepthOnFields.put("SearchResultItemResponseProjection.AppResponseProjection.onApp", projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.AppResponseProjection.onApp", 0) + 1);
this.onApp(new AppResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.AppResponseProjection.onApp", 0)));
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository", 0) <= maxDepth) {
projectionDepthOnFields.put("SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository", projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository", 0) + 1);
this.onRepository(new RepositoryResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.RepositoryResponseProjection.onRepository", 0)));
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.IssueResponseProjection.onIssue", 0) <= maxDepth) {
projectionDepthOnFields.put("SearchResultItemResponseProjection.IssueResponseProjection.onIssue", projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.IssueResponseProjection.onIssue", 0) + 1);
this.onIssue(new IssueResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.IssueResponseProjection.onIssue", 0)));
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization", 0) <= maxDepth) {
projectionDepthOnFields.put("SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization", projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization", 0) + 1);
this.onOrganization(new OrganizationResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.OrganizationResponseProjection.onOrganization", 0)));
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.UserResponseProjection.onUser", 0) <= maxDepth) {
projectionDepthOnFields.put("SearchResultItemResponseProjection.UserResponseProjection.onUser", projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.UserResponseProjection.onUser", 0) + 1);
this.onUser(new UserResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.UserResponseProjection.onUser", 0)));
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing", 0) <= maxDepth) {
projectionDepthOnFields.put("SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing", projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing", 0) + 1);
this.onMarketplaceListing(new MarketplaceListingResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.MarketplaceListingResponseProjection.onMarketplaceListing", 0)));
}
if (projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest", 0) <= maxDepth) {
projectionDepthOnFields.put("SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest", projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest", 0) + 1);
this.onPullRequest(new PullRequestResponseProjection().all$(maxDepth - projectionDepthOnFields.getOrDefault("SearchResultItemResponseProjection.PullRequestResponseProjection.onPullRequest", 0)));
}
this.typename();
return this;
}
Expand Down
Loading