Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • O openapi-generator
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,476
    • Issues 3,476
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 402
    • Merge requests 402
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OpenAPI Tools
  • openapi-generator
  • Merge requests
  • !6654

[C++]Enable forward declaration for C++

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Administrator requested to merge github/fork/etherealjoy/cpp_enable_forward_decl into master Jun 14, 2020
  • Overview 0
  • Commits 3
  • Pipelines 0
  • Changes 2

Created by: etherealjoy

Fixes #6377 (closed) @muttleyxd @MartinDelille @stkrwork @ravinikam @wing328

PR checklist

  • Read the contribution guidelines.
  • If contributing template-only or documentation-only changes which will change sample output, build the project beforehand.
  • Run the shell script ./bin/generate-samples.shto update all Petstore samples related to your fix. 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/config/java*. For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master
  • Copy the technical committee to review the pull request if your PR is targeting a particular programming language.

Fixes this spec below

openapi: 3.0.0
info:
  version: 0.0.1
  title: Test
paths:
  /endpoint:
    get:
      operationId: getOptions
      description: "-"
      parameters:
      - name: OptionA
        in: header
        schema:
          $ref: '#/components/schemas/OptionA'
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OptionA'
components:
  schemas:
    OptionA:
      type: object
      description: 'OptionA'
      properties:
        suboptions:
          type: array
          description: 'Suboptions of OptionA'
          items:
            $ref: '#/components/schemas/OptionB'
    OptionB:
      type: object
      description: 'OptionB'
      properties:
        suboptions1:
          type: array
          description: 'Suboptions 1 of OptionB'
          items:
            $ref: '#/components/schemas/OptionA'
        suboptions2:
          type: array
          description: 'Suboptions 2 of OptionB'
          items:
            $ref: '#/components/schemas/OptionB'

This spec below cannot be fixed due to C++ limitations.

openapi: 3.0.0
info:
  version: 0.0.1
  title: Test
paths:
  /endpoint:
    get:
      operationId: getOptions
      description: "-"
      parameters:
      - name: OptionA
        in: header
        schema:
          $ref: '#/components/schemas/OptionA'
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OptionA'
components:
  schemas:
    OptionA:
      type: object
      description: 'OptionA'
      properties:
        suboptions:
          $ref: '#/components/schemas/OptionB'
    OptionB:
      type: object
      description: 'OptionB'
      properties:
        suboptions1:
          $ref: '#/components/schemas/OptionA'

Generated code below has forward declaration and include as well.

#ifndef OAIOptionB_H
#define OAIOptionB_H

#include <QJsonObject>

#include "OAIOptionA.h"

#include "OAIEnum.h"
#include "OAIObject.h"

namespace OpenAPI {
class OAIOptionA;

class OAIOptionB : public OAIObject {
public:
    OAIOptionB();
    OAIOptionB(QString json);
    ~OAIOptionB() override;

    QString asJson() const override;
    QJsonObject asJsonObject() const override;
    void fromJsonObject(QJsonObject json) override;
    void fromJson(QString jsonString) override;

    OAIOptionA getSuboptions1() const;
    void setSuboptions1(const OAIOptionA &suboptions1);
    bool is_suboptions1_Set() const;
    bool is_suboptions1_Valid() const;

    virtual bool isSet() const override;
    virtual bool isValid() const override;

private:
    void initializeModel();

    OAIOptionA suboptions1;
    bool m_suboptions1_isSet;
    bool m_suboptions1_isValid;
};

} // namespace OpenAPI

Error for the one above

OAIOptionB.h:53: error: field ‘suboptions1’ has incomplete type ‘OpenAPI::OAIOptionA’
   53 |     OAIOptionA suboptions1;
      |                ^~~~~~~~~~~
Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: github/fork/etherealjoy/cpp_enable_forward_decl