forked from loafle/openapi-generator-original
[core] consider content in parameters and headers when computing unused schemas (#3243)
* [core] consider content in parameters and headers when computing unused schemas * consider parameters in PathItem
This commit is contained in:
committed by
William Cheng
parent
cbca86b43a
commit
8d27857f83
@@ -170,23 +170,12 @@ public class ModelUtils {
|
||||
if (allOperations != null) {
|
||||
for (Operation operation : allOperations) {
|
||||
//Params:
|
||||
if (operation.getParameters() != null) {
|
||||
for (Parameter p : operation.getParameters()) {
|
||||
Parameter parameter = getReferencedParameter(openAPI, p);
|
||||
if (parameter.getSchema() != null) {
|
||||
visitSchema(openAPI, parameter.getSchema(), null, visitedSchemas, visitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
visitParameters(openAPI, operation.getParameters(), visitor, visitedSchemas);
|
||||
|
||||
//RequestBody:
|
||||
RequestBody requestBody = getReferencedRequestBody(openAPI, operation.getRequestBody());
|
||||
if (requestBody != null && requestBody.getContent() != null) {
|
||||
for (Entry<String, MediaType> e : requestBody.getContent().entrySet()) {
|
||||
if (e.getValue().getSchema() != null) {
|
||||
visitSchema(openAPI, e.getValue().getSchema(), e.getKey(), visitedSchemas, visitor);
|
||||
}
|
||||
}
|
||||
if (requestBody != null) {
|
||||
visitContent(openAPI, requestBody.getContent(), visitor, visitedSchemas);
|
||||
}
|
||||
|
||||
//Responses:
|
||||
@@ -194,19 +183,14 @@ public class ModelUtils {
|
||||
for (ApiResponse r : operation.getResponses().values()) {
|
||||
ApiResponse apiResponse = getReferencedApiResponse(openAPI, r);
|
||||
if (apiResponse != null) {
|
||||
if (apiResponse.getContent() != null) {
|
||||
for (Entry<String, MediaType> e : apiResponse.getContent().entrySet()) {
|
||||
if (e.getValue().getSchema() != null) {
|
||||
visitSchema(openAPI, e.getValue().getSchema(), e.getKey(), visitedSchemas, visitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
visitContent(openAPI, apiResponse.getContent(), visitor, visitedSchemas);
|
||||
if (apiResponse.getHeaders() != null) {
|
||||
for (Entry<String, Header> e : apiResponse.getHeaders().entrySet()) {
|
||||
Header header = getReferencedHeader(openAPI, e.getValue());
|
||||
if (header.getSchema() != null) {
|
||||
visitSchema(openAPI, header.getSchema(), e.getKey(), visitedSchemas, visitor);
|
||||
}
|
||||
visitContent(openAPI, header.getContent(), visitor, visitedSchemas);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -226,6 +210,31 @@ public class ModelUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
//Params:
|
||||
visitParameters(openAPI, pathItem.getParameters(), visitor, visitedSchemas);
|
||||
}
|
||||
|
||||
private static void visitParameters(OpenAPI openAPI, List<Parameter> parameters, OpenAPISchemaVisitor visitor,
|
||||
List<String> visitedSchemas) {
|
||||
if (parameters != null) {
|
||||
for (Parameter p : parameters) {
|
||||
Parameter parameter = getReferencedParameter(openAPI, p);
|
||||
if (parameter.getSchema() != null) {
|
||||
visitSchema(openAPI, parameter.getSchema(), null, visitedSchemas, visitor);
|
||||
}
|
||||
visitContent(openAPI, parameter.getContent(), visitor, visitedSchemas);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void visitContent(OpenAPI openAPI, Content content, OpenAPISchemaVisitor visitor, List<String> visitedSchemas) {
|
||||
if (content != null) {
|
||||
for (Entry<String, MediaType> e : content.entrySet()) {
|
||||
if (e.getValue().getSchema() != null) {
|
||||
visitSchema(openAPI, e.getValue().getSchema(), e.getKey(), visitedSchemas, visitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void visitSchema(OpenAPI openAPI, Schema schema, String mimeType, List<String> visitedSchemas, OpenAPISchemaVisitor visitor) {
|
||||
|
||||
@@ -37,7 +37,7 @@ public class ModelUtilsTest {
|
||||
public void testGetAllUsedSchemas() {
|
||||
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/unusedSchemas.yaml");
|
||||
List<String> allUsedSchemas = ModelUtils.getAllUsedSchemas(openAPI);
|
||||
Assert.assertEquals(allUsedSchemas.size(), 34);
|
||||
Assert.assertEquals(allUsedSchemas.size(), 38);
|
||||
|
||||
Assert.assertTrue(allUsedSchemas.contains("SomeObjShared"), "contains 'SomeObjShared'");
|
||||
Assert.assertTrue(allUsedSchemas.contains("SomeObj1"), "contains 'UnusedObj1'");
|
||||
@@ -73,6 +73,10 @@ public class ModelUtilsTest {
|
||||
Assert.assertTrue(allUsedSchemas.contains("SOutput22"), "contains 'SInput22'");
|
||||
Assert.assertTrue(allUsedSchemas.contains("SomeHeader23"), "contains 'SomeHeader23'");
|
||||
Assert.assertTrue(allUsedSchemas.contains("SomeHeader24"), "contains 'SomeHeader24'");
|
||||
Assert.assertTrue(allUsedSchemas.contains("SomeObj25"), "contains 'SomeObj25'");
|
||||
Assert.assertTrue(allUsedSchemas.contains("SomeObj26"), "contains 'SomeObj26'");
|
||||
Assert.assertTrue(allUsedSchemas.contains("Param27"), "contains 'Param27'");
|
||||
Assert.assertTrue(allUsedSchemas.contains("Param28"), "contains 'Param28'");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -301,6 +301,57 @@ paths:
|
||||
headers:
|
||||
x-app-info:
|
||||
$ref: "#/components/headers/sharedHeader24"
|
||||
/some/p25:
|
||||
post:
|
||||
operationId: op25
|
||||
parameters:
|
||||
- name: q
|
||||
in: query
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SomeObj25"
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
/some/p26:
|
||||
post:
|
||||
operationId: op26
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
headers:
|
||||
x-something:
|
||||
description: basic app info
|
||||
style: simple
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SomeObj26"
|
||||
/some/p27/{q}:
|
||||
parameters:
|
||||
- name: q
|
||||
in: path
|
||||
schema:
|
||||
$ref: "#/components/schemas/Param27"
|
||||
post:
|
||||
operationId: op27
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
/some/p28/{q}:
|
||||
parameters:
|
||||
- name: q
|
||||
in: path
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/Param28"
|
||||
post:
|
||||
operationId: op27
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
components:
|
||||
schemas:
|
||||
UnusedObj1:
|
||||
@@ -564,6 +615,32 @@ components:
|
||||
SomeHeader24:
|
||||
type: integer
|
||||
format: int64
|
||||
SomeObj25:
|
||||
type: object
|
||||
properties:
|
||||
p1:
|
||||
type: string
|
||||
p2:
|
||||
type: string
|
||||
SomeObj26:
|
||||
type: object
|
||||
properties:
|
||||
q1:
|
||||
type: string
|
||||
q2:
|
||||
type: string
|
||||
Param27:
|
||||
type: string
|
||||
enum:
|
||||
- alpha
|
||||
- beta
|
||||
Param28:
|
||||
type: object
|
||||
properties:
|
||||
r1:
|
||||
type: string
|
||||
r2:
|
||||
type: string
|
||||
SomeObjShared:
|
||||
type: object
|
||||
properties:
|
||||
|
||||
Reference in New Issue
Block a user