Skip to content

[recurring] Code generation: update services and models - #1880

Closed
AdyenAutomationBot wants to merge 2 commits into
mainfrom
patch/v41.1.1
Closed

[recurring] Code generation: update services and models#1880
AdyenAutomationBot wants to merge 2 commits into
mainfrom
patch/v41.1.1

Conversation

@AdyenAutomationBot

Copy link
Copy Markdown
Collaborator

This PR contains the automated changes for the recurring service.

The commit history of this PR reflects the adyen-openapi commits that have been applied.

@AdyenAutomationBot
AdyenAutomationBot requested review from a team as code owners April 7, 2026 18:45

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the Recurring API base URL and applies formatting improvements across several files. Feedback was provided to replace hardcoded JSON field names with constants in the AuthenticatedDataTypeAdapterFactory to enhance maintainability.

Comment on lines +50 to +89
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
if (!AuthenticatedData.class.isAssignableFrom(type.getRawType())) {
return null;
}

TypeAdapter<AuthenticatedData> delegate =
gson.getDelegateAdapter(this, TypeToken.get(AuthenticatedData.class));
TypeAdapter<JsonObject> jsonObjectAdapter = gson.getAdapter(JsonObject.class);
TypeAdapter<AuthenticatedData> delegate =
gson.getDelegateAdapter(this, TypeToken.get(AuthenticatedData.class));
TypeAdapter<JsonObject> jsonObjectAdapter = gson.getAdapter(JsonObject.class);

return (TypeAdapter<T>)
new TypeAdapter<AuthenticatedData>() {
@Override
public void write(JsonWriter out, AuthenticatedData value) throws IOException {
delegate.write(out, value);
}
return (TypeAdapter<T>)
new TypeAdapter<AuthenticatedData>() {
@Override
public void write(JsonWriter out, AuthenticatedData value) throws IOException {
delegate.write(out, value);
}

@Override
public AuthenticatedData read(JsonReader in) throws IOException {
JsonObject jsonObject = jsonObjectAdapter.read(in);
@Override
public AuthenticatedData read(JsonReader in) throws IOException {
JsonObject jsonObject = jsonObjectAdapter.read(in);

JsonArray keyTransportOrKEKArray = null;
if (jsonObject.has("keyTransportOrKEK")) {
keyTransportOrKEKArray = jsonObject.getAsJsonArray("keyTransportOrKEK");
jsonObject.remove("keyTransportOrKEK");
}
AuthenticatedData result = delegate.fromJsonTree(jsonObject);
if (keyTransportOrKEKArray != null) {
for (JsonElement element : keyTransportOrKEKArray) {
JsonObject item = element.getAsJsonObject();
if (item.has("KEKIdentifier")) {
result.getKeyTransportOrKEK().add(gson.fromJson(item, KEK.class));
} else {
result.getKeyTransportOrKEK().add(gson.fromJson(item, KeyTransport.class));
}
}
}
return result;
}
};
}
JsonArray keyTransportOrKEKArray = null;
if (jsonObject.has("keyTransportOrKEK")) {
keyTransportOrKEKArray = jsonObject.getAsJsonArray("keyTransportOrKEK");
jsonObject.remove("keyTransportOrKEK");
}
AuthenticatedData result = delegate.fromJsonTree(jsonObject);
if (keyTransportOrKEKArray != null) {
for (JsonElement element : keyTransportOrKEKArray) {
JsonObject item = element.getAsJsonObject();
if (item.has("KEKIdentifier")) {
result.getKeyTransportOrKEK().add(gson.fromJson(item, KEK.class));
} else {
result.getKeyTransportOrKEK().add(gson.fromJson(item, KeyTransport.class));
}
}
}
return result;
}
};
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To improve maintainability and avoid typos from using string literals for JSON field names, it's better to define them as constants. Since they are only used within the read method of the anonymous TypeAdapter, defining them as final local variables in the create method scope is a good approach.

  public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
    if (!AuthenticatedData.class.isAssignableFrom(type.getRawType())) {
      return null;
    }

    final String keyTransportOrKekField = "keyTransportOrKEK";
    final String kekIdentifierField = "KEKIdentifier";

    TypeAdapter<AuthenticatedData> delegate =
        gson.getDelegateAdapter(this, TypeToken.get(AuthenticatedData.class));
    TypeAdapter<JsonObject> jsonObjectAdapter = gson.getAdapter(JsonObject.class);

    return (TypeAdapter<T>)
        new TypeAdapter<AuthenticatedData>() {
          @Override
          public void write(JsonWriter out, AuthenticatedData value) throws IOException {
            delegate.write(out, value);
          }

          @Override
          public AuthenticatedData read(JsonReader in) throws IOException {
            JsonObject jsonObject = jsonObjectAdapter.read(in);

            JsonArray keyTransportOrKEKArray = null;
            if (jsonObject.has(keyTransportOrKekField)) {
              keyTransportOrKEKArray = jsonObject.getAsJsonArray(keyTransportOrKekField);
              jsonObject.remove(keyTransportOrKekField);
            }
            AuthenticatedData result = delegate.fromJsonTree(jsonObject);
            if (keyTransportOrKEKArray != null) {
              for (JsonElement element : keyTransportOrKEKArray) {
                JsonObject item = element.getAsJsonObject();
                if (item.has(kekIdentifierField)) {
                  result.getKeyTransportOrKEK().add(gson.fromJson(item, KEK.class));
                } else {
                  result.getKeyTransportOrKEK().add(gson.fromJson(item, KeyTransport.class));
                }
              }
            }
            return result;
          }
        };
  }

@gcatanese gcatanese closed this Apr 8, 2026
@gcatanese
gcatanese deleted the patch/v41.1.1 branch April 8, 2026 07:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants