From 778bcaba31c35a50d48a5afb8c6efdee6b5b1256 Mon Sep 17 00:00:00 2001
From: Jueun Park <s5616012@mailbox.tu-dresden.de>
Date: Mon, 28 Feb 2022 14:52:24 +0900
Subject: [PATCH] edit ReverseParser.jrag fully (excl. SchemaOb because of
 structure difference)

---
 src/main/jastadd/OpenAPISpecification.relast |    2 +-
 src/main/jastadd/ReverseParser.jrag          | 1138 +++++++++---------
 2 files changed, 554 insertions(+), 586 deletions(-)

diff --git a/src/main/jastadd/OpenAPISpecification.relast b/src/main/jastadd/OpenAPISpecification.relast
index d9cfe56f..3e7cfbb9 100644
--- a/src/main/jastadd/OpenAPISpecification.relast
+++ b/src/main/jastadd/OpenAPISpecification.relast
@@ -224,7 +224,7 @@ rel ExampleObject.ex* -> Extension;
 abstract LinkOb;
 LinkReference : LinkOb ::= <Ref> <Summary> <Description>;
 LinkObject : LinkOb ::= <OperationRef> <OperationID> <LinkRequestBody:Object> <Description>;
-LinkParameterTuple ::= <Key> <Value:Object>;
+LinkParameterTuple ::= <Key> <Value>;
 
 rel LinkReference.r -> LinkObject;
 rel LinkObject.l* -> LinkParameterTuple;
diff --git a/src/main/jastadd/ReverseParser.jrag b/src/main/jastadd/ReverseParser.jrag
index 32658f5f..49924071 100644
--- a/src/main/jastadd/ReverseParser.jrag
+++ b/src/main/jastadd/ReverseParser.jrag
@@ -54,7 +54,7 @@ aspect ReverseParser {
   }
 
   public static io.swagger.v3.oas.models.info.Info InfoObject.reverseInfo (InfoObject infoObject){
-        io.swagger.v3.oas.models.info.Info info = new Info();
+        io.swagger.v3.oas.models.info.Info info = new io.swagger.v3.oas.models.info.Info();
 
         if (!infoObject.getTitle().isEmpty())
         info.setTitle(infoObject.getTitle());
@@ -79,7 +79,7 @@ aspect ReverseParser {
   }
 
   public static io.swagger.v3.oas.models.info.Contact ContactObject.reverseContact (ContactObject contactObject){
-        io.swagger.v3.oas.models.info.Contact contact = new Contact();
+        io.swagger.v3.oas.models.info.Contact contact = new io.swagger.v3.oas.models.info.Contact();
 
         if (!contactObject.getName().isEmpty())
         contact.setName(contactObject.getName());
@@ -98,7 +98,7 @@ aspect ReverseParser {
   }
 
   public static io.swagger.v3.oas.models.info.License LicenseObject.reverseLicense (LicenseObject licenseObject){
-        io.swagger.v3.oas.models.info.License license = new License();
+        io.swagger.v3.oas.models.info.License license = new io.swagger.v3.oas.models.info.License();
 
         if (!licenseObject.getName().isEmpty())
         license.setName(licenseObject.getName());
@@ -115,145 +115,143 @@ aspect ReverseParser {
   }
 
   public static Server ServerObject.reverseServer (ServerObject serverObject){
-    Server server = new Server();
-
-    if (!serverObject.getUrl().isEmpty())
-      server.setUrl(serverObject.getUrl());
-    if (!serverObject.getDescription().isEmpty())
-      server.setDescription(serverObject.getDescription());
-    if (serverObject.hasServerVariablesTuple()) {
-      Map<String, ServerVariable> serverVariables = new HashMap<>();
-      for (ServerVariablesTuple s : serverObject.getServerVariablesTuples())
-        serverVariables.put(s.getName(), ServerVariableObject.reverseServerVariable(s.getServerVariableObject(), map));
-      server.setVariables(serverVariables);
-    }
-    if (serverObject.getNumExtension() != 0) {
-      Map<String, Object> extensions = new HashMap<>();
-      for (Extension e : serverObject.getExtensions())
+        Server server = new Server();
+
+        if (!serverObject.getUrl().isEmpty())
+        server.setUrl(serverObject.getUrl());
+        if (!serverObject.getDescription().isEmpty())
+        server.setDescription(serverObject.getDescription());
+        if (serverObject.get_impl_st().size() != 0) {
+        ServerVariables serverVariables = new ServerVariables();
+        for (ServerVariablesTuple s : serverObject.get_impl_st())
+        serverVariables.addServerVariable(s.getName(), ServerVariableObject.reverseServerVariable(s.get_impl_s()));
+        server.setVariables(serverVariables);
+        }
+        if (serverObject.getExList().size() != 0) {
+        Map<String, Object> extensions = new HashMap<>();
+        for (Extension e : serverObject.getExList())
         extensions.put(e.getKey(), e.getValue());
-      server.setExtensions(extensions);
-    }
+        server.setExtensions(extensions);
+        }
 
-    map.put(server, serverObject);
-    return server;
+        return server;
   }
 
   public static ServerVariable ServerVariableObject.reverseServerVariable (ServerVariableObject serverVariableObject){
-    ServerVariable serverVariable = new ServerVariable();
-
-    if (!serverVariableObject.getDefault().isEmpty())
-      serverVariable.setDefault(serverVariableObject.getDefault());
-    if (!serverVariableObject.getDescription().isEmpty())
-      serverVariable.setDescription(serverVariableObject.getDescription());
-    if (serverVariableObject.getNumEnum() != 0) {
-      List<String> enums = new ArrayList<>();
-      for (Enum e : serverVariableObject.getEnums())
+        ServerVariable serverVariable = new ServerVariable();
+
+        if (!serverVariableObject.getDefault().isEmpty())
+        serverVariable.setDefault(serverVariableObject.getDefault());
+        if (!serverVariableObject.getDescription().isEmpty())
+        serverVariable.setDescription(serverVariableObject.getDescription());
+        if (serverVariableObject.get_impl_e().size() != 0) {
+        List<String> enums = new ArrayList<>();
+        for (Enum e : serverVariableObject.getEList())
         enums.add(e.getEnumValue());
-      serverVariable.setEnums(enums);
-    }
-    if (serverVariableObject.getNumExtension() != 0) {
-      Map<String, Object> extensions = new HashMap<>();
-      for (Extension e : serverVariableObject.getExtensions())
+        serverVariable.setEnum(enums);
+        }
+        if (serverVariableObject.getEList().size() != 0) {
+        Map<String, Object> extensions = new HashMap<>();
+        for (Extension e : serverVariableObject.getExList())
         extensions.put(e.getKey(), e.getValue());
-      serverVariable.setExtensions(extensions);
-    }
+        serverVariable.setExtensions(extensions);
+        }
 
-    map.put(serverVariable, serverVariableObject);
-    return serverVariable;
+        return serverVariable;
   }
 
   public static Components ComponentsObject.reverseComponents (ComponentsObject componentsObject){
-    Components components = new Components();
+        Components components = new Components();
 
-    if (componentsObject.getNumSchemaTuple() != 0) {
-      Map<String, org.openapi4j.parser.model.v3.Schema> schemaMap = new HashMap<>();
-      SchemaOb s;
-      for (SchemaTuple t : componentsObject.getSchemaTuples()) {
-        s = t.getSchemaOb();
+        if (componentsObject.getSList().size() != 0) {
+        Map<String, io.swagger.v3.oas.models.media.Schema> schemaMap = new HashMap<>();
+        SchemaOb s;
+        for (SchemaTuple t : componentsObject.getSList()) {
+        s = t.get_impl_o();
         if (s instanceof SchemaObject)
-          schemaMap.put(t.getKey(), ((SchemaObject) s).reverseSchema(s, map));
+        schemaMap.put(t.getKey(), ((SchemaObject) s).reverseSchema(s));
         else
-          schemaMap.put(t.getKey(), ((SchemaReference) s).reverseSchema(s, map));
-      }
-      components.setSchemas(schemaMap);
-    }
-    if (componentsObject.getNumResponseTuple() != 0) {
-      Map<String, Response> responseMap = new HashMap<>();
-      ResponseOb r;
-      for (ResponseTuple t : componentsObject.getResponseTuples()) {
-        r = t.getResponseOb();
-        responseMap.put(t.getKey(), r.reverseResponse(r, map));
-      }
-      components.setResponses(responseMap);
-    }
-    if (componentsObject.getNumParameterTuple() != 0) {
-      Map<String, Parameter> parameterMap = new HashMap<>();
-      ParameterOb p;
-      for (ParameterTuple t : componentsObject.getParameterTuples()) {
-        p = t.getParameterOb();
-        parameterMap.put(t.getKey(), p.reverseParameter(p, map));
-      }
-      components.setParameters(parameterMap);
-    }
-    if (componentsObject.getNumExampleTuple() != 0) {
-      Map<String, Example> exampleMap = new HashMap<>();
-      for (ExampleTuple t : componentsObject.getExampleTuples())
-        exampleMap.put(t.getKey(), ExampleObject.reverseExample(t.getExampleObject(), map));
-      components.setExamples(exampleMap);
-    }
-    if (componentsObject.getNumRequestBodyTuple() != 0) {
-      Map<String, RequestBody> requestBodyMap = new HashMap<>();
-      RequestBodyOb r;
-      for (RequestBodyTuple t : componentsObject.getRequestBodyTuples()) {
-        r = t.getRequestBodyOb();
-        requestBodyMap.put(t.getKey(), r.reverseRequestBody(r, map));
-      }
-      components.setRequestBodies(requestBodyMap);
-    }
-    if (componentsObject.getNumHeaderTuple() != 0) {
-      Map<String, Header> headerMap = new HashMap<>();
-      HeaderOb h;
-      for (HeaderTuple t : componentsObject.getHeaderTuples()) {
-        h = t.getHeaderOb();
-        headerMap.put(t.getKey(), h.reverseHeader(h, map));
-      }
-      components.setHeaders(headerMap);
-    }
-    if (componentsObject.getNumSecuritySchemeTuple() != 0) {
-      Map<String, SecurityScheme> securitySchemeMap = new HashMap<>();
-      SecuritySchemeOb s;
-      for (SecuritySchemeTuple t : componentsObject.getSecuritySchemeTuples()) {
-        s = t.getSecuritySchemeOb();
-        securitySchemeMap.put(t.getKey(), s.reverseSecurityScheme(s, map));
-      }
-      components.setSecuritySchemes(securitySchemeMap);
-    }
-    if (componentsObject.getNumLinkTuple() != 0) {
-      Map<String, Link> linkMap = new HashMap<>();
-      LinkOb l;
-      for (LinkTuple t : componentsObject.getLinkTuples()) {
-        l = t.getLinkOb();
-        linkMap.put(t.getKey(), l.reverseLink(l, map));
-      }
-      components.setLinks(linkMap);
-    }
-    if (componentsObject.getNumCallbackTuple() != 0) {
-      Map<String, Callback> callbackMap = new HashMap<>();
-      CallbackOb c;
-      for (CallbackTuple t : componentsObject.getCallbackTuples()) {
-        c = t.getCallbackOb();
-        callbackMap.put(t.getKey(), c.reverseCallback(c, map));
-      }
-      components.setCallbacks(callbackMap);
-    }
-    if (componentsObject.getNumExtension() != 0) {
-      Map<String, Object> extensions = new HashMap<>();
-      for (Extension e : componentsObject.getExtensions())
+        schemaMap.put(t.getKey(), ((SchemaReference) s).reverseSchema(s));
+        }
+        components.setSchemas(schemaMap);
+        }
+        if (componentsObject.getRList().size() != 0) {
+        Map<String, ApiResponse> responseMap = new HashMap<>();
+        ResponseOb r;
+        for (ResponseTuple t : componentsObject.getRList()) {
+        r = t.get_impl_o();
+        responseMap.put(t.getKey(), r.reverseResponse(r));
+        }
+        components.setResponses(responseMap);
+        }
+        if (componentsObject.getPList().size() != 0) {
+        Map<String, Parameter> parameterMap = new HashMap<>();
+        ParameterOb p;
+        for (ParameterTuple t : componentsObject.getPList()) {
+        p = t.get_impl_o();
+        parameterMap.put(t.getKey(), p.reverseParameter(p));
+        }
+        components.setParameters(parameterMap);
+        }
+        if (componentsObject.getEList().size() != 0) {
+        Map<String, Example> exampleMap = new HashMap<>();
+        for (ExampleTuple t : componentsObject.getEList())
+        exampleMap.put(t.getKey(), ExampleObject.reverseExample(t.get_impl_o()));
+        components.setExamples(exampleMap);
+        }
+        if (componentsObject.getRbList().size() != 0) {
+        Map<String, RequestBody> requestBodyMap = new HashMap<>();
+        RequestBodyOb r;
+        for (RequestBodyTuple t : componentsObject.getRbList()) {
+        r = t.get_impl_o();
+        requestBodyMap.put(t.getKey(), r.reverseRequestBody(r));
+        }
+        components.setRequestBodies(requestBodyMap);
+        }
+        if (componentsObject.getHList().size() != 0) {
+        Map<String, Header> headerMap = new HashMap<>();
+        HeaderOb h;
+        for (HeaderTuple t : componentsObject.getHList()) {
+        h = t.get_impl_o();
+        headerMap.put(t.getKey(), h.reverseHeader(h));
+        }
+        components.setHeaders(headerMap);
+        }
+        if (componentsObject.getScList().size() != 0) {
+        Map<String, SecurityScheme> securitySchemeMap = new HashMap<>();
+        SecuritySchemeOb s;
+        for (SecuritySchemeTuple t : componentsObject.getScList()) {
+        s = t.get_impl_o();
+        securitySchemeMap.put(t.getKey(), s.reverseSecurityScheme(s));
+        }
+        components.setSecuritySchemes(securitySchemeMap);
+        }
+        if (componentsObject.getLList().size() != 0) {
+        Map<String, Link> linkMap = new HashMap<>();
+        LinkOb l;
+        for (LinkTuple t : componentsObject.getLList()) {
+        l = t.get_impl_o();
+        linkMap.put(t.getKey(), l.reverseLink(l));
+        }
+        components.setLinks(linkMap);
+        }
+        if (componentsObject.getCList().size() != 0) {
+        Map<String, Callback> callbackMap = new HashMap<>();
+        CallbackOb c;
+        for (CallbackTuple t : componentsObject.getCList()) {
+        c = t.get_impl_o();
+        callbackMap.put(t.getKey(), c.reverseCallback(c));
+        }
+        components.setCallbacks(callbackMap);
+        }
+        if (componentsObject.getExList().size() != 0) {
+        Map<String, Object> extensions = new HashMap<>();
+        for (Extension e : componentsObject.getExList())
         extensions.put(e.getKey(), e.getValue());
-      components.setExtensions(extensions);
-    }
+        components.setExtensions(extensions);
+        }
 
-    return components;
+        return components;
   }
 
         syn PathItem PathItemOb.reversePath (PathItemOb pathItemOb);
@@ -274,38 +272,38 @@ aspect ReverseParser {
         return pathItem;
         }
         eq PathItemObject.reversePath (PathItemOb pathItemOb) {
-        Path path = new Path();
-        PathItemObject p = (PathItemObject) pathItem;
+        PathItem path = new PathItem();
+        PathItemObject p = (PathItemObject) pathItemOb;
 
         if (!p.getSummary().isEmpty())
         path.setSummary(p.getSummary());
         if (!p.getDescription().isEmpty())
         path.setDescription(p.getDescription());
-        if (p.hasGet())
-        path.setGet(OperationObject.reverseOperation(p.getGet().getOperationObject(), map));
+        if (p.hasG())
+        path.setGet(OperationObject.reverseOperation(p.getG().get_impl_o()));
         if (p.hasPut())
-        path.setPut(OperationObject.reverseOperation(p.getPut().getOperationObject(), map));
+        path.setPut(OperationObject.reverseOperation(p.getPut().get_impl_o()));
         if (p.hasPost())
-        path.setPost(OperationObject.reverseOperation(p.getPost().getOperationObject(), map));
-        if (p.hasDelete())
-        path.setDelete(OperationObject.reverseOperation(p.getDelete().getOperationObject(), map));
-        if (p.hasOptions())
-        path.setOptions(OperationObject.reverseOperation(p.getOptions().getOperationObject(), map));
-        if (p.hasHead())
-        path.setHead(OperationObject.reverseOperation(p.getHead().getOperationObject(), map));
-        if (p.hasPatch())
-        path.setPatch(OperationObject.reverseOperation(p.getPatch().getOperationObject(), map));
-        if (p.getNumServerObject() != 0) {
-        for (ServerObject s : p.getServerObjects())
-        path.addServer(ServerObject.reverseServer(s, map));
-        }
-        if (p.getNumParameterOb() != 0) {
-        for (ParameterOb e : p.getParameterObs())
-        path.addParameter(e.reverseParameter(e, map));
-        }
-        if (p.getNumExtension() != 0) {
+        path.setPost(OperationObject.reverseOperation(p.getPost().get_impl_o()));
+        if (p.hasD())
+        path.setDelete(OperationObject.reverseOperation(p.getD().get_impl_o()));
+        if (p.hasO())
+        path.setOptions(OperationObject.reverseOperation(p.getO().get_impl_o()));
+        if (p.hasH())
+        path.setHead(OperationObject.reverseOperation(p.getH().get_impl_o()));
+        if (p.hasP())
+        path.setPatch(OperationObject.reverseOperation(p.getP().get_impl_o()));
+        if (p.getSList().size() != 0) {
+        for (ServerObject s : p.getSList())
+        path.addServersItem(ServerObject.reverseServer(s));
+        }
+        if (p.getPoList().size() != 0) {
+        for (ParameterOb e : p.getPoList())
+        path.addParametersItem(e.reverseParameter(e));
+        }
+        if (p.getExList().size() != 0) {
         Map<String, Object> extensionMap = new HashMap<>();
-        for (Extension e : p.getExtensions())
+        for (Extension e : p.getExList())
         extensionMap.put(e.getKey(), e.getValue());
         path.setExtensions(extensionMap);
         }
@@ -313,137 +311,133 @@ aspect ReverseParser {
         return path;
         }
 
-  public static Operation OperationObject.reverseOperation (OperationObject operationObject){
-    Operation operation = new Operation();
+  public static io.swagger.v3.oas.models.Operation OperationObject.reverseOperation (OperationObject operationObject){
+        io.swagger.v3.oas.models.Operation operation = new io.swagger.v3.oas.models.Operation();
 
-    if (operationObject.getNumTag() != 0) {
-      for (de.tudresden.inf.st.openapi.ast.Tag t : operationObject.getTags())
-        operation.addTag(t.getTag());
-    }
-    if (!operationObject.getSummary().isEmpty())
-      operation.setSummary(operationObject.getSummary());
-    if (!operationObject.getDescription().isEmpty())
-      operation.setDescription(operationObject.getDescription());
-    if (operationObject.hasExternalDocObject())
-      operation.setExternalDocs(ExternalDocObject.reverseExternalDocs(operationObject.getExternalDocObject(), map));
-    if (!operationObject.getOperationID().isEmpty())
-      operation.setOperationId(operationObject.getOperationID());
-    if (operationObject.getNumParameterOb() != 0) {
-      for (ParameterOb p : operationObject.getParameterObs())
-        operation.addParameter(p.reverseParameter(p, map));
-    }
-    if (operationObject.hasRequestBodyOb())
-      operation.setRequestBody(operationObject.getRequestBodyOb().reverseRequestBody(operationObject.getRequestBodyOb(), map));
-    if (operationObject.getNumResponseTuple() != 0) {
-      Map<String, Response> responseMap = new HashMap<>();
-      for (ResponseTuple t : operationObject.getResponseTuples())
-        responseMap.put(t.getKey(), t.getResponseOb().reverseResponse(t.getResponseOb(), map));
-      operation.setResponses(responseMap);
-    }
-    if (operationObject.getNumCallbackTuple() != 0) {
-      Map<String, Callback> callbacks = new HashMap<>();
-      for (CallbackTuple t : operationObject.getCallbackTuples())
-        callbacks.put(t.getKey(), t.getCallbackOb().reverseCallback(t.getCallbackOb(), map));
-      operation.setCallbacks(callbacks);
-    }
-    if (operationObject.getDeprecatedBoolean() != null)
-      operation.setDeprecated(operationObject.getDeprecatedBoolean());
-    if (operationObject.getSecurityRequirementObjects() != null) {
-      for (SecurityRequirementObject s : operationObject.getSecurityRequirementObjects())
-        operation.addSecurityRequirement(SecurityRequirementObject.reverseSecurityRequirement(s, map));
-    }
-    if (operationObject.getNumServerObject() != 0) {
-      for (ServerObject s : operationObject.getServerObjects())
-        operation.addServer(ServerObject.reverseServer(s, map));
-    }
-    if (operationObject.getNumExtension() != 0) {
-      Map<String, Object> extensionMap = new HashMap<>();
-      for (Extension e : operationObject.getExtensions())
+        if (operationObject.getTList().size() != 0) {
+        for (de.tudresden.inf.st.openapi.ast.Tag t : operationObject.getTList())
+        operation.addTagsItem(t.getTag());
+        }
+        if (!operationObject.getSummary().isEmpty())
+        operation.setSummary(operationObject.getSummary());
+        if (!operationObject.getDescription().isEmpty())
+        operation.setDescription(operationObject.getDescription());
+        if (operationObject.hasEd())
+        operation.setExternalDocs(ExternalDocObject.reverseExternalDocs(operationObject.get_impl_ed()));
+        if (!operationObject.getOperationID().isEmpty())
+        operation.setOperationId(operationObject.getOperationID());
+        if (operationObject.getPList().size() != 0) {
+        for (ParameterOb p : operationObject.getPList())
+        operation.addParametersItem(p.reverseParameter(p));
+        }
+        if (operationObject.hasRb())
+        operation.setRequestBody(operationObject.get_impl_rb().reverseRequestBody(operationObject.get_impl_rb()));
+        if (operationObject.getR().getRList().size() != 0) {
+        ApiResponses responses = new ApiResponses();
+        for (ResponseTuple t : operationObject.getR().getRList())
+        responses.put(t.getKey(), t.get_impl_o().reverseResponse(t.get_impl_o()));
+        operation.setResponses(responses);
+        }
+        if (operationObject.getCList().size() != 0) {
+        Map<String, Callback> callbacks = new HashMap<>();
+        for (CallbackTuple t : operationObject.getCList())
+        callbacks.put(t.getKey(), t.get_impl_o().reverseCallback(t.get_impl_o()));
+        operation.setCallbacks(callbacks);
+        }
+        if (operationObject.getDeprecatedBoolean() != null)
+        operation.setDeprecated(operationObject.getDeprecatedBoolean());
+        if (operationObject.getSrList().size() != 0) {
+        for (SecurityRequirementObject s : operationObject.getSrList())
+        operation.addSecurityItem(SecurityRequirementObject.reverseSecurityRequirement(s));
+        }
+        if (operationObject.getSList().size() != 0) {
+        for (ServerObject s : operationObject.getSList())
+        operation.addServersItem(ServerObject.reverseServer(s));
+        }
+        if (operationObject.getExList().size() != 0) {
+        Map<String, Object> extensionMap = new HashMap<>();
+        for (Extension e : operationObject.getExList())
         extensionMap.put(e.getKey(), e.getValue());
-      operation.setExtensions(extensionMap);
-    }
+        operation.setExtensions(extensionMap);
+        }
 
-    return operation;
+        return operation;
   }
 
-  public static ExternalDocs ExternalDocObject.reverseExternalDocs (ExternalDocObject externalDocObject){
-    ExternalDocs externalDocs = new ExternalDocs();
+  public static io.swagger.v3.oas.models.ExternalDocumentation ExternalDocObject.reverseExternalDocs (ExternalDocObject externalDocObject){
+        ExternalDocumentation externalDocs = new ExternalDocumentation();
 
-    if (!externalDocObject.getDescription().isEmpty())
-      externalDocs.setDescription(externalDocObject.getDescription());
-    if (!externalDocObject.getUrl().isEmpty())
-      externalDocs.setUrl(externalDocObject.getUrl());
-    if (externalDocObject.getNumExtension() != 0) {
-      Map<String, Object> extensionMap = new HashMap<>();
-      for (Extension e : externalDocObject.getExtensions())
+        if (!externalDocObject.getDescription().isEmpty())
+        externalDocs.setDescription(externalDocObject.getDescription());
+        if (!externalDocObject.getUrl().isEmpty())
+        externalDocs.setUrl(externalDocObject.getUrl());
+        if (externalDocObject.getExList().size() != 0) {
+        Map<String, Object> extensionMap = new HashMap<>();
+        for (Extension e : externalDocObject.getExList())
         extensionMap.put(e.getKey(), e.getValue());
-      externalDocs.setExtensions(extensionMap);
-    }
+        externalDocs.setExtensions(extensionMap);
+        }
 
-    return externalDocs;
+        return externalDocs;
   }
 
-  syn Parameter ParameterOb.reverseParameter (ParameterOb parameterOb);
+  syn io.swagger.v3.oas.models.parameters.Parameter ParameterOb.reverseParameter (ParameterOb parameterOb);
   eq ParameterReference.reverseParameter (ParameterOb parameterOb) {
-    Parameter parameter = new Parameter();
-    ParameterReference p = (ParameterReference) parameterOb;
+        io.swagger.v3.oas.models.parameters.Parameter parameter = new io.swagger.v3.oas.models.parameters.Parameter();
+        ParameterReference p = (ParameterReference) parameterOb;
 
-    if (!p.getRef().isEmpty()) {
-      try {
-        parameter.setReference(new org.openapi4j.core.model.v3.OAI3Context(new URL("")), new URL(""), p.getRef());
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+        if (!p.getRef().isEmpty()) {
+        parameter.set$ref(p.getRef());
+        }
 
-    return parameter;
+        return parameter;
   }
   eq ParameterObject.reverseParameter (ParameterOb parameterOb) {
-    Parameter parameter = new Parameter();
-    ParameterObject p = (ParameterObject) parameterOb;
-
-    if (!p.getName().isEmpty())
-      parameter.setName(p.getName());
-    if (!p.getIn().isEmpty())
-      parameter.setIn(p.getIn());
-    if (p.getRequired() != null)
-      parameter.setRequired(p.getRequired());
-    if (!p.getDescription().isEmpty())
-      parameter.setDescription(p.getDescription());
-    if (p.getDeprecatedBoolean() != null)
-      parameter.setDeprecated(p.getDeprecatedBoolean());
-    if (!p.getStyle().isEmpty())
-      parameter.setStyle(p.getStyle());
-    if (p.getAllowReserved() != null)
-      parameter.setAllowReserved(p.getAllowReserved());
-    if (p.getExplode() != null)
-      parameter.setExplode(p.getExplode());
-    if (p.getSchemaOb() != null)
-      parameter.setSchema(p.getSchemaOb().reverseSchema(p.getSchemaOb(), map));
-    if (p.getExample() != null)
-      parameter.setExample(p.getExample());
-    if (p.getNumExampleTuple() != 0) {
-      Map<String, Example> exampleMap = new HashMap<>();
-      for (ExampleTuple t : p.getExampleTuples())
-        exampleMap.put(t.getKey(), ExampleObject.reverseExample(t.getExampleObject(), map));
-      parameter.setExamples(exampleMap);
-    }
-    if (p.getNumContentTuple() != 0) {
-      Map<String, MediaType> contentMap = new HashMap<>();
-      for (ContentTuple t : p.getContentTuples())
-        contentMap.put(t.getKey(), MediaTypeObject.reverseMediaType(t.getMediaTypeObject(), map));
-      parameter.setContentMediaTypes(contentMap);
-    }
-    if (p.getRequired() != null)
-      parameter.setRequired(p.getRequired());
-    if (p.getNumExtension() != 0) {
-      Map<String, Object> extensionMap = new HashMap<>();
-      for (Extension e : p.getExtensions())
+        io.swagger.v3.oas.models.parameters.Parameter parameter = new io.swagger.v3.oas.models.parameters.Parameter();
+        ParameterObject p = (ParameterObject) parameterOb;
+
+        if (!p.getName().isEmpty())
+        parameter.setName(p.getName());
+        if (!p.getIn().isEmpty())
+        parameter.setIn(p.getIn());
+        if (p.getRequired() != null)
+        parameter.setRequired(p.getRequired());
+        if (!p.getDescription().isEmpty())
+        parameter.setDescription(p.getDescription());
+        if (p.getDeprecatedBoolean() != null)
+        parameter.setDeprecated(p.getDeprecatedBoolean());
+        if (!p.getStyle().isEmpty())
+        parameter.setStyle(Parameter.StyleEnum.valueOf(p.getStyle()));
+        if (p.getAllowReserved() != null)
+        parameter.setAllowReserved(p.getAllowReserved());
+        if (p.getExplode() != null)
+        parameter.setExplode(p.getExplode());
+        if (p.getS() != null)
+        parameter.setSchema(p.get_impl_s().reverseSchema(p.get_impl_s()));
+        if (p.getExample() != null)
+        parameter.setExample(p.getExample());
+        if (p.getEList().size() != 0) {
+        Map<String, Example> exampleMap = new HashMap<>();
+        for (ExampleTuple t : p.getEList())
+        exampleMap.put(t.getKey(), ExampleObject.reverseExample(t.get_impl_o()));
+        parameter.setExamples(exampleMap);
+        }
+        if (p.getCList().size() != 0) {
+        io.swagger.v3.oas.models.media.Content content = new Content();
+        for (ContentTuple t : p.getCList())
+        content.put(t.getKey(), MediaTypeObject.reverseMediaType(t.get_impl_m()));
+        parameter.setContent(content);
+        }
+        if (p.getRequired() != null)
+        parameter.setRequired(p.getRequired());
+        if (p.getExList().size() != 0) {
+        Map<String, Object> extensionMap = new HashMap<>();
+        for (Extension e : p.getExList())
         extensionMap.put(e.getKey(), e.getValue());
-      parameter.setExtensions(extensionMap);
-    }
+        parameter.setExtensions(extensionMap);
+        }
 
-    return parameter;
+        return parameter;
   }
 
   syn RequestBody RequestBodyOb.reverseRequestBody (RequestBodyOb requestBodyOb);
@@ -451,289 +445,270 @@ aspect ReverseParser {
     RequestBody requestBody = new RequestBody();
     RequestBodyReference r = (RequestBodyReference) requestBodyOb;
 
-    if (!r.getRef().isEmpty()) {
-      try {
-        requestBody.setReference(new org.openapi4j.core.model.v3.OAI3Context(new URL("")), new URL(""), r.getRef());
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+        if (!r.getRef().isEmpty()) {
+        requestBody.set$ref(r.getRef());
+        }
 
     return requestBody;
   }
   eq RequestBodyObject.reverseRequestBody (RequestBodyOb requestBodyOb) {
-    RequestBody requestBody = new RequestBody();
-    RequestBodyObject r = (RequestBodyObject) requestBodyOb;
-
-    if (r.getNumContentTuple() != 0) {
-      Map<String, MediaType> contents = new HashMap<>();
-      for (ContentTuple t : r.getContentTuples())
-        contents.put(t.getKey(), MediaTypeObject.reverseMediaType(t.getMediaTypeObject(), map));
-      requestBody.setContentMediaTypes(contents);
-    }
-    if (!r.getDescription().isEmpty())
-      requestBody.setDescription(r.getDescription());
-    if (r.getRequired() != null)
-      requestBody.setRequired(r.getRequired());
+        RequestBody requestBody = new RequestBody();
+        RequestBodyObject r = (RequestBodyObject) requestBodyOb;
+
+        if (r.getCList().size() != 0) {
+        io.swagger.v3.oas.models.media.Content contents = new Content();
+        for (ContentTuple t : r.getCList())
+        contents.put(t.getKey(), MediaTypeObject.reverseMediaType(t.get_impl_m()));
+        requestBody.setContent(contents);
+        }
+        if (!r.getDescription().isEmpty())
+        requestBody.setDescription(r.getDescription());
+        if (r.getRequired() != null)
+        requestBody.setRequired(r.getRequired());
 
-    return requestBody;
+        return requestBody;
   }
 
-  public static MediaType MediaTypeObject.reverseMediaType (MediaTypeObject mediaTypeObject){
-    MediaType mediaType = new MediaType();
-    SchemaOb s;
+  public static io.swagger.v3.oas.models.media.MediaType MediaTypeObject.reverseMediaType (MediaTypeObject mediaTypeObject){
+        MediaType mediaType = new MediaType();
+        SchemaOb s;
 
-    if (mediaTypeObject.getSchemaOb() != null) {
-      s = mediaTypeObject.getSchemaOb();
-      mediaType.setSchema(s.reverseSchema(s, map));
-    }
-    if (mediaTypeObject.getExample() != null)
-      mediaType.setExample(mediaTypeObject.getExample());
-    if (mediaTypeObject.getNumExampleTuple() != 0) {
-      Map<String, Example> exampleMap = new HashMap<>();
-      for (ExampleTuple t : mediaTypeObject.getExampleTuples())
-        exampleMap.put(t.getKey(), ExampleObject.reverseExample(t.getExampleObject(), map));
-      mediaType.setExamples(exampleMap);
-    }
-    if (mediaTypeObject.getNumEncodingTuple() != 0) {
-      Map<String, EncodingProperty> encodingMap = new HashMap<>();
-      for (EncodingTuple t : mediaTypeObject.getEncodingTuples())
-        encodingMap.put(t.getKey(), EncodingObject.reverseEncodingProperty(t.getEncodingObject(), map));
-      mediaType.setEncodings(encodingMap);
-    }
+        if (mediaTypeObject.get_impl_s() != null) {
+        s = mediaTypeObject.get_impl_s();
+        mediaType.setSchema(s.reverseSchema(s));
+        }
+        if (mediaTypeObject.getExample() != null)
+        mediaType.setExample(mediaTypeObject.getExample());
+        if (mediaTypeObject.getEList().size() != 0) {
+        Map<String, Example> exampleMap = new HashMap<>();
+        for (ExampleTuple t : mediaTypeObject.getEList())
+        exampleMap.put(t.getKey(), ExampleObject.reverseExample(t.get_impl_o()));
+        mediaType.setExamples(exampleMap);
+        }
+        if (mediaTypeObject.getEnList().size() != 0) {
+        Map<String, io.swagger.v3.oas.models.media.Encoding> encodingMap = new HashMap<>();
+        for (EncodingTuple t : mediaTypeObject.getEnList())
+        encodingMap.put(t.getKey(), EncodingObject.reverseEncoding(t.get_impl_e()));
+        mediaType.setEncoding(encodingMap);
+        }
 
-    return mediaType;
+        return mediaType;
   }
 
-  public static EncodingProperty EncodingObject.reverseEncodingProperty (EncodingObject encodingObject){
-    EncodingProperty encodingProperty = new EncodingProperty();
-    HeaderOb h;
+  public static io.swagger.v3.oas.models.media.Encoding EncodingObject.reverseEncoding (EncodingObject encodingObject){
+        io.swagger.v3.oas.models.media.Encoding encodingProperty = new io.swagger.v3.oas.models.media.Encoding();
+        HeaderOb h;
 
-    if (!encodingObject.getContentType().isEmpty())
-      encodingProperty.setContentType(encodingObject.getContentType());
-    if (encodingObject.getNumHeaderTuple() != 0) {
-      Map<String, Header> headers = new HashMap<>();
-      for (HeaderTuple t : encodingObject.getHeaderTuples()) {
-        h = t.getHeaderOb();
-        headers.put(t.getKey(), h.reverseHeader(h, map));
-      }
-      encodingProperty.setHeaders(headers);
-    }
-    if (!encodingObject.getStyle().isEmpty())
-      encodingProperty.setStyle(encodingObject.getStyle());
-    if (encodingObject.getExplode() != null)
-      encodingProperty.setExplode(encodingObject.getExplode());
-    if (encodingObject.getNumExtension() != 0) {
-      Map<String, Object> extensionMap = new HashMap<>();
-      for (Extension e : encodingObject.getExtensions())
+        if (!encodingObject.getContentType().isEmpty())
+        encodingProperty.setContentType(encodingObject.getContentType());
+        if (encodingObject.get_impl_h().size() != 0) {
+        Map<String, Header> headers = new HashMap<>();
+        for (HeaderTuple t : encodingObject.get_impl_h()) {
+        h = t.get_impl_o();
+        headers.put(t.getKey(), h.reverseHeader(h));
+        }
+        encodingProperty.setHeaders(headers);
+        }
+        //if (!encodingObject.getStyle().isEmpty())
+        //  encodingProperty.setStyle(Encoding.StyleEnum.valueOf());
+        if (encodingObject.getExplode() != null)
+        encodingProperty.setExplode(encodingObject.getExplode());
+        if (encodingObject.getExList().size() != 0) {
+        Map<String, Object> extensionMap = new HashMap<>();
+        for (Extension e : encodingObject.getExList())
         extensionMap.put(e.getKey(), e.getValue());
-      encodingProperty.setExtensions(extensionMap);
-    }
+        encodingProperty.setExtensions(extensionMap);
+        }
 
-    return encodingProperty;
+        return encodingProperty;
   }
 
-  syn Response ResponseOb.reverseResponse (ResponseOb responseOb);
+  syn ApiResponse ResponseOb.reverseResponse (ResponseOb responseOb);
   eq ResponseReference.reverseResponse (ResponseOb responseOb){
-    Response response = new Response();
-    ResponseReference r = (ResponseReference) responseOb;
+        ApiResponse response = new ApiResponse();
+        ResponseReference r = (ResponseReference) responseOb;
 
-    if (!r.getRef().isEmpty()) {
-      try {
-        response.setReference(new org.openapi4j.core.model.v3.OAI3Context(new URL("")), new URL(""), r.getRef());
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+        if (!r.getRef().isEmpty()) {
+        response.set$ref(r.getRef());
+        }
 
-    return response;
+        return response;
   }
   eq ResponseObject.reverseResponse (ResponseOb responseOb){
-    Response response = new Response();
-    ResponseObject r = (ResponseObject) responseOb;
-
-    if (!r.getDescription().isEmpty())
-      response.setDescription(r.getDescription());
-    if (r.getNumHeaderTuple() != 0) {
-      Map<String, Header> headers = new HashMap<>();
-      for (HeaderTuple t : r.getHeaderTuples())
-        headers.put(t.getKey(), t.getHeaderOb().reverseHeader(t.getHeaderOb(), map));
-      response.setHeaders(headers);
-    }
-    if (r.getNumContentTuple() != 0) {
-      Map<String, MediaType> contents = new HashMap<>();
-      for (ContentTuple t : r.getContentTuples())
-        contents.put(t.getKey(), MediaTypeObject.reverseMediaType(t.getMediaTypeObject(), map));
-      response.setContentMediaTypes(contents);
-    }
-    if (r.getNumLinkTuple() != 0) {
-      Map<String, Link> links = new HashMap<>();
-      for (LinkTuple t : r.getLinkTuples())
-        links.put(t.getKey(), t.getLinkOb().reverseLink(t.getLinkOb(), map));
-      response.setLinks(links);
-    }
+        ApiResponse response = new ApiResponse();
+        ResponseObject r = (ResponseObject) responseOb;
+
+        if (!r.getDescription().isEmpty())
+        response.setDescription(r.getDescription());
+        if (r.get_impl_h().size() != 0) {
+        Map<String, Header> headers = new HashMap<>();
+        for (HeaderTuple t : r.get_impl_h())
+        headers.put(t.getKey(), t.get_impl_o().reverseHeader(t.get_impl_o()));
+        response.setHeaders(headers);
+        }
+        if (r.getCList().size() != 0) {
+        io.swagger.v3.oas.models.media.Content contents = new io.swagger.v3.oas.models.media.Content();
+        for (ContentTuple t : r.getCList())
+        contents.put(t.getKey(), MediaTypeObject.reverseMediaType(t.get_impl_m()));
+        response.setContent(contents);
+        }
+        if (r.get_impl_l().size() != 0) {
+        Map<String, Link> links = new HashMap<>();
+        for (LinkTuple t : r.get_impl_l())
+        links.put(t.getKey(), t.get_impl_o().reverseLink(t.get_impl_o()));
+        response.setLinks(links);
+        }
 
-    return response;
+        return response;
   }
 
-  syn Callback CallbackOb.reverseCallback (CallbackOb callbackOb);
+  syn io.swagger.v3.oas.models.callbacks.Callback CallbackOb.reverseCallback (CallbackOb callbackOb);
   eq CallbackReference.reverseCallback (CallbackOb callbackOb) {
-    Callback callback = new Callback();
-    CallbackReference c = (CallbackReference) callbackOb;
+        io.swagger.v3.oas.models.callbacks.Callback callback = new io.swagger.v3.oas.models.callbacks.Callback();
+        CallbackReference c = (CallbackReference) callbackOb;
 
-    if (!c.getRef().isEmpty()) {
-      try {
-        callback.setReference(new org.openapi4j.core.model.v3.OAI3Context(new URL("")), new URL(""), c.getRef());
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+        if (!c.getRef().isEmpty()) {
+        callback.set$ref(c.getRef());
+        }
 
-    return callback;
+        return callback;
   }
   eq CallbackObject.reverseCallback (CallbackOb callbackOb) {
-    Callback callback = new Callback();
-    CallbackObject c = (CallbackObject) callbackOb;
-
-    if (c.getNumExpression() != 0) {
-      Map<String, Path> paths = new HashMap<>();
-      PathItemObject p;
-      for (Expression e : c.getExpressions()) {
-        p = e.getPathItemObject();
-        paths.put(e.getName(), p.reversePath(p, map));
-      }
-      callback.setCallbackPaths(paths);
-    }
+        io.swagger.v3.oas.models.callbacks.Callback callback = new io.swagger.v3.oas.models.callbacks.Callback();
+        CallbackObject c = (CallbackObject) callbackOb;
+
+        if (c.getEList().size() != 0) {
+        Map<String, Path> paths = new HashMap<>();
+        PathItemOb p;
+        for (Expression e : c.getEList())
+        callback.addPathItem(e.getName(), e.get_impl_p().reversePath(e.get_impl_p()));
+        }
 
-    return callback;
+        return callback;
   }
 
   public static Example ExampleObject.reverseExample (ExampleObject exampleObject){
-    Example example = new Example();
-
-    if (!exampleObject.getSummary().isEmpty())
-      example.setSummary(exampleObject.getSummary());
-    if (!exampleObject.getDescription().isEmpty())
-      example.setDescription(exampleObject.getDescription());
-    if (exampleObject.getValue() != null)
-      example.setValue(exampleObject.getValue());
-    if (!exampleObject.getExternalValue().isEmpty())
-      example.setExternalValue(exampleObject.getExternalValue());
-    if (exampleObject.getNumExtension() != 0) {
-      Map<String, Object> extension = new HashMap<>();
-      for (Extension e : exampleObject.getExtensions())
+        Example example = new Example();
+
+        if (!exampleObject.getSummary().isEmpty())
+        example.setSummary(exampleObject.getSummary());
+        if (!exampleObject.getDescription().isEmpty())
+        example.setDescription(exampleObject.getDescription());
+        if (exampleObject.getValue() != null)
+        example.setValue(exampleObject.getValue());
+        if (!exampleObject.getExternalValue().isEmpty())
+        example.setExternalValue(exampleObject.getExternalValue());
+        if (exampleObject.getExList().size() != 0) {
+        Map<String, Object> extension = new HashMap<>();
+        for (Extension e : exampleObject.getExList())
         extension.put(e.getKey(), e.getValue());
-      example.setExtensions(extension);
-    }
+        example.setExtensions(extension);
+        }
 
-    return example;
+        return example;
   }
 
-  syn Link LinkOb.reverseLink (LinkOb linkOb);
+  syn io.swagger.v3.oas.models.links.Link LinkOb.reverseLink (LinkOb linkOb);
   eq LinkReference.reverseLink (LinkOb linkOb){
-    Link link = new Link();
-    LinkReference l = (LinkReference) linkOb;
+        io.swagger.v3.oas.models.links.Link link = new io.swagger.v3.oas.models.links.Link();
+        LinkReference l = (LinkReference) linkOb;
 
-    if (!l.getRef().isEmpty()) {
-      try {
-        link.setReference(new org.openapi4j.core.model.v3.OAI3Context(new URL("")), new URL(""), l.getRef());
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+        if (!l.getRef().isEmpty())
+        link.set$ref(l.getRef());
 
-    return link;
+        return link;
   }
   eq LinkObject.reverseLink (LinkOb linkOb){
-    Link link = new Link();
-    LinkObject l = (LinkObject) linkOb;
-
-    if (!l.getOperationRef().isEmpty())
-      link.setOperationRef(l.getOperationRef());
-    if (!l.getOperationID().isEmpty())
-      link.setOperationId(l.getOperationID());
-    if (l.getNumLinkParameterTuple() != 0) {
-      Map<String, String> parameters = new HashMap<>();
-      for (LinkParameterTuple t : l.getLinkParameterTuples())
-        parameters.put(t.getLinkParameterKey(), t.getLinkParameterValue());
-      link.setParameters(parameters);
-    }
-    if (!l.getDescription().isEmpty())
-      link.setDescription(l.getDescription());
-    if (l.hasServerObject())
-      link.setServer(ServerObject.reverseServer(l.getServerObject(), map));
+        io.swagger.v3.oas.models.links.Link link = new io.swagger.v3.oas.models.links.Link();
+        LinkObject l = (LinkObject) linkOb;
+
+        if (!l.getOperationRef().isEmpty())
+        link.setOperationRef(l.getOperationRef());
+        if (!l.getOperationID().isEmpty())
+        link.setOperationId(l.getOperationID());
+        if (l.get_impl_l().size() != 0) {
+        Map<String, String> parameters = new HashMap<>();
+        for (LinkParameterTuple t : l.get_impl_l())
+        parameters.put(t.getKey(), t.getValue());
+        link.setParameters(parameters);
+        }
+        if (!l.getDescription().isEmpty())
+        link.setDescription(l.getDescription());
+        if (l.hasS())
+        link.setServer(ServerObject.reverseServer(l.get_impl_s()));
+        if (l.getExList().size() != 0){
+        for(Extension e : l.getExList())
+        link.addExtension(e.getKey(), e.getValue());
+        }
 
-    return link;
+        return link;
   }
 
-  syn Header HeaderOb.reverseHeader (HeaderOb headerOb);
+  syn io.swagger.v3.oas.models.headers.Header HeaderOb.reverseHeader (HeaderOb headerOb);
   eq HeaderReference.reverseHeader (HeaderOb headerOb) {
-    Header header = new Header();
-    HeaderReference h = new HeaderReference();
+        io.swagger.v3.oas.models.headers.Header header = new io.swagger.v3.oas.models.headers.Header();
+        HeaderReference h = new HeaderReference();
 
-    if (!h.getRef().isEmpty()) {
-      try {
-        header.setReference(new org.openapi4j.core.model.v3.OAI3Context(new URL("")), new URL(""), h.getRef());
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+        if (!h.getRef().isEmpty()) {
+        header.set$ref(h.getRef());
+        }
 
-    return header;
+        return header;
   }
   eq HeaderObject.reverseHeader (HeaderOb headerOb) {
-    Header header = new Header();
-    HeaderObject h = (HeaderObject) headerOb;
-
-    if (h.getRequired() != null)
-      header.setRequired(h.getRequired());
-    if (!h.getDescription().isEmpty())
-      header.setDescription(h.getDescription());
-    if (!h.getStyle().isEmpty())
-      header.setStyle(h.getStyle());
-    if (h.getExplode() != null)
-      header.setExplode(h.getExplode());
-    if (h.getAllowReserved() != null)
-      header.setAllowReserved(h.getAllowReserved());
-    if (h.getExample() != null)
-      header.setExample(h.getExample());
-    if (h.getNumExampleTuple() != 0) {
-      Map<String, Example> examples = new HashMap<>();
-      for (ExampleTuple t : h.getExampleTuples())
-        examples.put(t.getKey(), ExampleObject.reverseExample(t.getExampleObject(), map));
-      header.setExample(examples);
-    }
-    if (h.getNumContentTuple() != 0) {
-      Map<String, MediaType> contents = new HashMap<>();
-      for (ContentTuple t : h.getContentTuples())
-        contents.put(t.getKey(), MediaTypeObject.reverseMediaType(t.getMediaTypeObject(), map));
-      header.setContentMediaTypes(contents);
-    }
-    if (h.hasSchemaOb())
-      header.setSchema(h.getSchemaOb().reverseSchema(h.getSchemaOb(), map));
+        io.swagger.v3.oas.models.headers.Header header = new io.swagger.v3.oas.models.headers.Header();
+        HeaderObject h = (HeaderObject) headerOb;
+
+        if (h.getRequired() != null)
+        header.setRequired(h.getRequired());
+        if (!h.getDescription().isEmpty())
+        header.setDescription(h.getDescription());
+        if (!h.getStyle().isEmpty())
+        header.setStyle(Header.StyleEnum.valueOf(h.getStyle()));
+        if (h.getExplode() != null)
+        header.setExplode(h.getExplode());
+        //if (h.getAllowReserved() != null)
+        //  header.setAllowReserved(h.getAllowReserved());
+        if (h.getExample() != null)
+        header.setExample(h.getExample());
+        if (h.getEList().size() != 0) {
+        Map<String, Example> examples = new HashMap<>();
+        for (ExampleTuple t : h.getEList())
+        examples.put(t.getKey(), ExampleObject.reverseExample(t.get_impl_o()));
+        header.setExample(examples);
+        }
+        if (h.getCList().size() != 0) {
+        io.swagger.v3.oas.models.media.Content contents = new io.swagger.v3.oas.models.media.Content();
+        for (ContentTuple t : h.getCList())
+        contents.put(t.getKey(), MediaTypeObject.reverseMediaType(t.get_impl_m()));
+        header.setContent(contents);
+        }
+        if (h.hasS())
+        header.setSchema(h.get_impl_s().reverseSchema(h.get_impl_s()));
 
-    return header;
+        return header;
   }
 
-  public static org.openapi4j.parser.model.v3.Tag TagObject.reverseTag (TagObject tagObject){
-    org.openapi4j.parser.model.v3.Tag tag = new org.openapi4j.parser.model.v3.Tag();
+  public static io.swagger.v3.oas.models.tags.Tag TagObject.reverseTag (TagObject tagObject){
+        io.swagger.v3.oas.models.tags.Tag tag = new io.swagger.v3.oas.models.tags.Tag();
 
-    tag.setName(tagObject.getName());
+        tag.setName(tagObject.getName());
 
-    if (!tagObject.getDescription().isEmpty())
-      tag.setDescription(tagObject.getDescription());
-    if (tagObject.hasExternalDocObject())
-      tag.setExternalDocs(ExternalDocObject.reverseExternalDocs(tagObject.getExternalDocObject(), map));
-    if (tagObject.getNumExtension() != 0) {
-      Map<String, Object> extensionMap = new HashMap<>();
-      for (Extension e : tagObject.getExtensions())
+        if (!tagObject.getDescription().isEmpty())
+        tag.setDescription(tagObject.getDescription());
+        if (tagObject.hasE())
+        tag.setExternalDocs(ExternalDocObject.reverseExternalDocs(tagObject.get_impl_e()));
+        if (tagObject.getExList().size() != 0) {
+        Map<String, Object> extensionMap = new HashMap<>();
+        for (Extension e : tagObject.getExList())
         extensionMap.put(e.getKey(), e.getValue());
-      tag.setExtensions(extensionMap);
-    }
+        tag.setExtensions(extensionMap);
+        }
 
-    return tag;
+        return tag;
   }
 
+  /*
   syn org.openapi4j.parser.model.v3.Schema SchemaOb.reverseSchema (SchemaOb schemaOb);
   eq SchemaReference.reverseSchema (SchemaOb schemaOb){
     org.openapi4j.parser.model.v3.Schema schema = new org.openapi4j.parser.model.v3.Schema();
@@ -878,131 +853,124 @@ aspect ReverseParser {
 
     return schema;
   }
+   */
 
-  public static Discriminator DiscriminatorObject.reverseDiscriminator (DiscriminatorObject discriminatorObject) {
-    Discriminator discriminator = new Discriminator();
+  public static io.swagger.v3.oas.models.media.Discriminator DiscriminatorObject.reverseDiscriminator (DiscriminatorObject discriminatorObject) {
+        io.swagger.v3.oas.models.media.Discriminator discriminator = new io.swagger.v3.oas.models.media.Discriminator();
 
-    if (!discriminatorObject.getPropertyName().isEmpty())
-      discriminator.setPropertyName(discriminatorObject.getPropertyName());
-    if (discriminatorObject.getNumMappingTuple() != 0) {
-      Map<String, String> mapping = new HashMap<>();
-      for (MappingTuple m : discriminatorObject.getMappingTuples())
+        if (!discriminatorObject.getPropertyName().isEmpty())
+        discriminator.setPropertyName(discriminatorObject.getPropertyName());
+        if (discriminatorObject.get_impl_m().size() != 0) {
+        Map<String, String> mapping = new HashMap<>();
+        for (MappingTuple m : discriminatorObject.get_impl_m())
         mapping.put(m.getKey(), m.getValue());
-      discriminator.setMapping(mapping);
-    }
+        discriminator.setMapping(mapping);
+        }
 
-    return discriminator;
+        return discriminator;
   }
 
-  public static Xml XmlObject.reverseXml (XmlObject xmlObject) {
-    Xml xml = new Xml();
+  public static io.swagger.v3.oas.models.media.XML XmlObject.reverseXml (XmlObject xmlObject) {
+        io.swagger.v3.oas.models.media.XML xml = new io.swagger.v3.oas.models.media.XML();
 
-    if (!xmlObject.getName().isEmpty())
-      xml.setName(xmlObject.getName());
-    if (!xmlObject.getNamespace().isEmpty())
-      xml.setNamespace(xmlObject.getNamespace());
-    if (!xmlObject.getPrefix().isEmpty())
-      xml.setPrefix(xmlObject.getPrefix());
-    if (xmlObject.getAttribute() != null)
-      xml.setAttribute((boolean) xmlObject.getAttribute());
-    if (xmlObject.getWrapped() != null)
-      xml.setWrapped((boolean) xmlObject.getWrapped());
+        if (!xmlObject.getName().isEmpty())
+        xml.setName(xmlObject.getName());
+        if (!xmlObject.getNamespace().isEmpty())
+        xml.setNamespace(xmlObject.getNamespace());
+        if (!xmlObject.getPrefix().isEmpty())
+        xml.setPrefix(xmlObject.getPrefix());
+        if (xmlObject.getAttribute() != null)
+        xml.setAttribute(xmlObject.getAttribute());
+        if (xmlObject.getWrapped() != null)
+        xml.setWrapped(xmlObject.getWrapped());
 
-    return xml;
+        return xml;
   }
 
-  syn SecurityScheme SecuritySchemeOb.reverseSecurityScheme (SecuritySchemeOb securitySchemeOb);
+  syn io.swagger.v3.oas.models.security.SecurityScheme SecuritySchemeOb.reverseSecurityScheme (SecuritySchemeOb securitySchemeOb);
   eq SecuritySchemeReference.reverseSecurityScheme (SecuritySchemeOb securitySchemeOb){
-    SecurityScheme securityScheme = new SecurityScheme();
-    SecuritySchemeReference s = (SecuritySchemeReference) securitySchemeOb;
+        io.swagger.v3.oas.models.security.SecurityScheme securityScheme = new io.swagger.v3.oas.models.security.SecurityScheme();
+        SecuritySchemeReference s = (SecuritySchemeReference) securitySchemeOb;
 
-    if (!s.getRef().isEmpty()) {
-      try {
-        securityScheme.setReference(new org.openapi4j.core.model.v3.OAI3Context(new URL("")), new URL(""), s.getRef());
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
+        if (!s.getRef().isEmpty()) {securityScheme.set$ref(s.getRef());
+        }
 
-    return securityScheme;
+        return securityScheme;
   }
   eq SecuritySchemeObject.reverseSecurityScheme (SecuritySchemeOb securitySchemeOb){
-    SecurityScheme securityScheme = new SecurityScheme();
-    SecuritySchemeObject s = (SecuritySchemeObject) securitySchemeOb;
-
-    if (!s.getType().isEmpty())
-      securityScheme.setType(s.getType());
-    if (!s.getName().isEmpty())
-      securityScheme.setName(s.getName());
-    if (!s.getIn().isEmpty())
-      securityScheme.setIn(s.getIn());
-    if (!s.getScheme().isEmpty())
-      securityScheme.setScheme(s.getScheme());
-    if (!s.getOpenIdConnectUrl().isEmpty())
-      securityScheme.setOpenIdConnectUrl(s.getOpenIdConnectUrl());
-    if (s.getOAuthFlowsObject() != null)
-      securityScheme.setFlows(OAuthFlowsObject.reverseOAuthFlows(s.getOAuthFlowsObject(), map));
-    if (!s.getDescription().isEmpty())
-      securityScheme.setDescription(s.getDescription());
-    if (!s.getBearerFormat().isEmpty())
-      securityScheme.setBearerFormat(s.getBearerFormat());
-    if (s.getNumExtension() != 0) {
-      Map<String, Object> extensionMap = new HashMap<>();
-      for (Extension e : s.getExtensions())
+        io.swagger.v3.oas.models.security.SecurityScheme securityScheme = new io.swagger.v3.oas.models.security.SecurityScheme();
+        SecuritySchemeObject s = (SecuritySchemeObject) securitySchemeOb;
+
+        if (!s.getType().isEmpty())
+        securityScheme.setType(SecurityScheme.Type.valueOf(s.getType()));
+        if (!s.getName().isEmpty())
+        securityScheme.setName(s.getName());
+        if (!s.getIn().isEmpty())
+        securityScheme.setIn(SecurityScheme.In.valueOf(s.getIn()));
+        if (!s.getScheme().isEmpty())
+        securityScheme.setScheme(s.getScheme());
+        if (!s.getOpenIdConnectUrl().isEmpty())
+        securityScheme.setOpenIdConnectUrl(s.getOpenIdConnectUrl());
+        if (s.get_impl_o() != null)
+        securityScheme.setFlows(OAuthFlowsObject.reverseOAuthFlows(s.get_impl_o()));
+        if (!s.getDescription().isEmpty())
+        securityScheme.setDescription(s.getDescription());
+        if (!s.getBearerFormat().isEmpty())
+        securityScheme.setBearerFormat(s.getBearerFormat());
+        if (s.getExList().size() != 0) {
+        Map<String, Object> extensionMap = new HashMap<>();
+        for (Extension e : s.getExList())
         extensionMap.put(e.getKey(), e.getValue());
-      securityScheme.setExtensions(extensionMap);
-    }
+        securityScheme.setExtensions(extensionMap);
+        }
 
-    return securityScheme;
+        return securityScheme;
   }
 
-  public static OAuthFlows OAuthFlowsObject.reverseOAuthFlows (OAuthFlowsObject oAuthFlowsObject){
-    OAuthFlows oAuthFlows = new OAuthFlows();
+  public static io.swagger.v3.oas.models.security.OAuthFlows OAuthFlowsObject.reverseOAuthFlows (OAuthFlowsObject oAuthFlowsObject){
+        io.swagger.v3.oas.models.security.OAuthFlows oAuthFlows = new io.swagger.v3.oas.models.security.OAuthFlows();
 
-    if (oAuthFlowsObject.hasImplicit())
-      oAuthFlows.setImplicit(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.getImplicit().getOAuthFlowObject(), map));
-    if (oAuthFlowsObject.hasPassword())
-      oAuthFlows.setPassword(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.getPassword().getOAuthFlowObject(), map));
-    if (oAuthFlowsObject.hasClientCredentials())
-      oAuthFlows.setClientCredentials(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.getClientCredentials().getOAuthFlowObject(), map));
-    if (oAuthFlowsObject.hasAuthorizationCode())
-      oAuthFlows.setAuthorizationCode(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.getAuthorizationCode().getOAuthFlowObject(), map));
+        if (oAuthFlowsObject.hasI())
+        oAuthFlows.setImplicit(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.get_impl_i().get_impl_o()));
+        if (oAuthFlowsObject.hasP())
+        oAuthFlows.setPassword(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.get_impl_p().get_impl_o()));
+        if (oAuthFlowsObject.hasC())
+        oAuthFlows.setClientCredentials(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.get_impl_c().get_impl_o()));
+        if (oAuthFlowsObject.hasA())
+        oAuthFlows.setAuthorizationCode(OAuthFlowObject.reverseOAuthFlow(oAuthFlowsObject.get_impl_a().get_impl_o()));
 
-    return oAuthFlows;
+        return oAuthFlows;
   }
 
-  public static OAuthFlow OAuthFlowObject.reverseOAuthFlow (OAuthFlowObject oAuthFlowObject){
-    OAuthFlow oAuthFlow = new OAuthFlow();
-    Map<String, String> scopes = new HashMap<>();
-
-    if (oAuthFlowObject.getAuthorizationUrl() != null)
-      oAuthFlow.setAuthorizationUrl(oAuthFlowObject.getAuthorizationUrl());
-    if (oAuthFlowObject.getTokenUrl() != null)
-      oAuthFlow.setTokenUrl(oAuthFlowObject.getTokenUrl());
-    for (ScopesTuple t : oAuthFlowObject.getScopesTuples())
-      scopes.put(t.getScopesKey(), t.getScopesValue());
-    oAuthFlow.setScopes(scopes);
+  public static io.swagger.v3.oas.models.security.OAuthFlow OAuthFlowObject.reverseOAuthFlow (OAuthFlowObject oAuthFlowObject){
+        io.swagger.v3.oas.models.security.OAuthFlow oAuthFlow = new io.swagger.v3.oas.models.security.OAuthFlow();
+        Scopes scopes = new Scopes();
 
-    if (oAuthFlowObject.getRefreshUrl() != null)
-      oAuthFlow.setRefreshUrl(oAuthFlowObject.getRefreshUrl());
+        if (oAuthFlowObject.getAuthorizationUrl() != null)
+        oAuthFlow.setAuthorizationUrl(oAuthFlowObject.getAuthorizationUrl());
+        if (oAuthFlowObject.getTokenUrl() != null)
+        oAuthFlow.setTokenUrl(oAuthFlowObject.getTokenUrl());
+        for (ScopesTuple t : oAuthFlowObject.getSList())
+        scopes.put(t.getScopesKey(), t.getScopesValue());
+        oAuthFlow.setScopes(scopes);
+        if (oAuthFlowObject.getRefreshUrl() != null)
+        oAuthFlow.setRefreshUrl(oAuthFlowObject.getRefreshUrl());
 
-    return oAuthFlow;
+        return oAuthFlow;
   }
 
-  public static SecurityRequirement SecurityRequirementObject.reverseSecurityRequirement (SecurityRequirementObject securityRequirementObject){
-    SecurityRequirement securityRequirement = new SecurityRequirement();
+  public static io.swagger.v3.oas.models.security.SecurityRequirement SecurityRequirementObject.reverseSecurityRequirement (SecurityRequirementObject securityRequirementObject){
+        io.swagger.v3.oas.models.security.SecurityRequirement securityRequirement = new io.swagger.v3.oas.models.security.SecurityRequirement();
 
-    if (securityRequirementObject.getNumSecurityRequirementTuple() != 0) {
-      Map<String, List<String>> requirements = new HashMap<>();
-      for (SecurityRequirementTuple t : securityRequirementObject.getSecurityRequirementTuples()) {
+        if (securityRequirementObject.get_impl_t().size() != 0) {
+        Map<String, List<String>> requirements = new HashMap<>();
+        for (SecurityRequirementTuple t : securityRequirementObject.get_impl_t()) {
         List<String> values = new ArrayList<>();
-        for (SecurityRequirementValue v : t.getSecurityRequirementValues())
-          values.add(v.getValue());
-        requirements.put(t.getName(), values);
-      }
-      securityRequirement.setRequirements(requirements);
-    }
+        for (SecurityRequirementValue v : t.get_impl_v())
+        values.add(v.getValue());
+        securityRequirement.addList(t.getName(), values);
+        }
+        }
 
-    return securityRequirement;
-  }
+        return securityRequirement;
 }
\ No newline at end of file
-- 
GitLab