Skip to content

[JAVA-SPRING;KOTLIN-SPRING]: honor useTags=false for HTTP interface libraries - #24862

Open
Picazsoo wants to merge 6 commits into
OpenAPITools:masterfrom
Picazsoo:bugfix/allow-useTags=false-for-http-interface2
Open

[JAVA-SPRING;KOTLIN-SPRING]: honor useTags=false for HTTP interface libraries#24862
Picazsoo wants to merge 6 commits into
OpenAPITools:masterfrom
Picazsoo:bugfix/allow-useTags=false-for-http-interface2

Conversation

@Picazsoo

@Picazsoo Picazsoo commented Sep 4, 2026

Copy link
Copy Markdown
Contributor
  • SpringCodegen: include spring-http-interface in supportLibraryUseTags() so useTags=false groups operations by first path segment instead of tag.
  • KotlinSpringServerCodegen: include spring-declarative-http-interface in the addOperationToGroup path-grouping condition alongside spring-boot. spring-cloud was deliberately left out of this condition since useTags defaults to false there and changing it would alter existing default grouping behavior for that library.
  • Add regression tests covering useTags=false/true grouping for both spring-http-interface and spring-declarative-http-interface.
  • Update two pre-existing kotlin-spring tests whose expected output filenames assumed the old (buggy) tag-based grouping for spring-declarative-http-interface.

PR checklist

  • Read the contribution guidelines.
  • Run the following to build the project and update samples:
    ./mvnw clean package || exit
    ./bin/generate-samples.sh ./bin/configs/*.yaml || exit
    ./bin/utils/export_docs_generators.sh || exit
    
    (For Windows users, please run the script in WSL)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

Summary by cubic

Fixes useTags=false being ignored for Spring HTTP interface libraries so operations group by first path segment instead of tag.

  • Adds spring-http-interface and spring-declarative-http-interface to the path-grouping condition.
  • Sanitizes path segments into valid Java identifiers (e.g. another-fake becomes anotherFake), prefixes digit-leading segments with Class, and falls back to Path for segments that sanitize to empty (e.g. @ or !), with root paths grouped under default.
  • Keeps groups unique when sanitization causes collisions by appending a numeric suffix (e.g. anotherFake2, Path2).
  • Leaves spring-cloud unchanged because useTags defaults to false there, and altering it would change existing grouping behavior.
  • Updates petstore samples and sample configs to set useTags: "true" for spring-http-interface, which also renames FakeClassnameTags123Api to FakeClassnameTestApi and moves a few operations between FakeApi and PetApi.

Written for commit 70948e0. Summary will update on new commits.

Review in cubic

- SpringCodegen: include spring-http-interface in supportLibraryUseTags()
  so useTags=false groups operations by first path segment instead of tag.
- KotlinSpringServerCodegen: include spring-declarative-http-interface in
  the addOperationToGroup path-grouping condition alongside spring-boot.
  spring-cloud was deliberately left out of this condition since useTags
  defaults to false there and changing it would alter existing default
  grouping behavior for that library.
- Add regression tests covering useTags=false/true grouping for both
  spring-http-interface and spring-declarative-http-interface.
- Update two pre-existing kotlin-spring tests whose expected output
  filenames assumed the old (buggy) tag-based grouping for
  spring-declarative-http-interface.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Picazsoo Picazsoo changed the title fix(spring): honor useTags=false for HTTP interface libraries [JAVA-SPRING;KOTLIN-SPRING]: honor useTags=false for HTTP interface libraries Sep 4, 2026
@Picazsoo
Picazsoo marked this pull request as ready for review September 8, 2026 05:21
@Picazsoo
Picazsoo marked this pull request as draft September 8, 2026 05:21

@cubic-dev-ai cubic-dev-ai 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.

1 issue found across 29 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="samples/client/petstore/spring-http-interface-bean-validation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java">

<violation number="1" location="samples/client/petstore/spring-http-interface-bean-validation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java:6">
P2: The sample regeneration left the old generated file FakeClassnameTags123Api.java behind in all four spring-http-interface sample directories (bean-validation, noResponseEntity, reactive-bean-validation, springboot-4). It is no longer listed in .openapi-generator/FILES and is no longer referenced (HttpInterfacesAbstractConfigurator now imports FakeClassnameTestApi), so it is dead code. Delete the stale FakeClassnameTags123Api.java in each directory when regenerating the samples so the sample dirs and the FILES manifest stay in sync.</violation>
</file>

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

* https://openapi-generator.tech
* Do not edit the class manually.
*/
package org.openapitools.api;

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.

P2: The sample regeneration left the old generated file FakeClassnameTags123Api.java behind in all four spring-http-interface sample directories (bean-validation, noResponseEntity, reactive-bean-validation, springboot-4). It is no longer listed in .openapi-generator/FILES and is no longer referenced (HttpInterfacesAbstractConfigurator now imports FakeClassnameTestApi), so it is dead code. Delete the stale FakeClassnameTags123Api.java in each directory when regenerating the samples so the sample dirs and the FILES manifest stay in sync.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At samples/client/petstore/spring-http-interface-bean-validation/src/main/java/org/openapitools/api/FakeClassnameTestApi.java, line 6:

<comment>The sample regeneration left the old generated file FakeClassnameTags123Api.java behind in all four spring-http-interface sample directories (bean-validation, noResponseEntity, reactive-bean-validation, springboot-4). It is no longer listed in .openapi-generator/FILES and is no longer referenced (HttpInterfacesAbstractConfigurator now imports FakeClassnameTestApi), so it is dead code. Delete the stale FakeClassnameTags123Api.java in each directory when regenerating the samples so the sample dirs and the FILES manifest stay in sync.</comment>

<file context>
@@ -0,0 +1,44 @@
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package org.openapitools.api;
+
+import org.openapitools.model.ClientDto;
</file context>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@cubic-dev-ai - this has been resolved. The files are no longer present AFAIK. Please re-review

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.

@Picazsoo I have started the AI code review. It will take a few minutes to complete.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

@cubic-dev-ai cubic-dev-ai 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.

1 existing issue remains and no new issues found across 29 files

Requires human review: Auto-approval blocked by 4 unresolved issues from a previous review of this commit.

Re-trigger cubic

@Picazsoo
Picazsoo marked this pull request as ready for review September 9, 2026 12:55
@Picazsoo
Picazsoo marked this pull request as draft September 9, 2026 12:55

@cubic-dev-ai cubic-dev-ai 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.

All reported issues were addressed across 29 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

@cubic-dev-ai cubic-dev-ai 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.

All reported issues were addressed across 29 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Picazsoo
Picazsoo marked this pull request as ready for review September 9, 2026 16:05

@cubic-dev-ai cubic-dev-ai 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.

No issues found across 29 files

Re-trigger cubic

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.

1 participant