11package apiaddicts .sonar .openapi .checks .examples ;
22
3+ import apiaddicts .sonar .openapi .checks .BaseCheck ;
4+ import static apiaddicts .sonar .openapi .utils .JsonNodeUtils .getType ;
5+ import static apiaddicts .sonar .openapi .utils .JsonNodeUtils .isArrayType ;
6+ import static apiaddicts .sonar .openapi .utils .JsonNodeUtils .isExternalRef ;
7+ import static apiaddicts .sonar .openapi .utils .JsonNodeUtils .isObjectType ;
8+ import static apiaddicts .sonar .openapi .utils .JsonNodeUtils .isOperation ;
9+ import static apiaddicts .sonar .openapi .utils .JsonNodeUtils .resolve ;
310import com .google .common .collect .ImmutableSet ;
411import com .sonar .sslr .api .AstNodeType ;
5- import org .sonar .check .Rule ;
6- import org .apiaddicts .apitools .dosonarapi .api .v2 .OpenApi2Grammar ;
7- import org .apiaddicts .apitools .dosonarapi .api .v3 .OpenApi3Grammar ;
8- import org .apiaddicts .apitools .dosonarapi .api .v31 .OpenApi31Grammar ;
9- import apiaddicts .sonar .openapi .checks .BaseCheck ;
10- import org .apiaddicts .apitools .dosonarapi .sslr .yaml .grammar .JsonNode ;
11-
1212import java .util .List ;
1313import java .util .Map ;
1414import java .util .Set ;
1515import java .util .stream .Collectors ;
16-
17- import static apiaddicts .sonar .openapi .utils .JsonNodeUtils .*;
16+ import org .apiaddicts .apitools .dosonarapi .api .v2 .OpenApi2Grammar ;
17+ import org .apiaddicts .apitools .dosonarapi .api .v3 .OpenApi3Grammar ;
18+ import org .apiaddicts .apitools .dosonarapi .api .v31 .OpenApi31Grammar ;
19+ import org .apiaddicts .apitools .dosonarapi .sslr .yaml .grammar .JsonNode ;
20+ import org .sonar .check .Rule ;
1821
1922@ Rule (key = OAR031ExamplesCheck .KEY )
2023public class OAR031ExamplesCheck extends BaseCheck {
@@ -52,7 +55,9 @@ private void visitV2Node(JsonNode node) {
5255 }
5356 responseNode = resolve (responseNode );
5457 visitResponseV2Node (responseNode );
55- if (externalRefManagement ) externalRefNode = null ;
58+ if (externalRefManagement ) {
59+ externalRefNode = null ;
60+ }
5661 }
5762 }
5863 }
@@ -80,8 +85,10 @@ private void visitV3Node(JsonNode node) {
8085 }
8186 responseNode = resolve (responseNode );
8287 visitRequestBodyOrResponseV3Node (responseNode );
83- if (externalRefManagement ) externalRefNode = null ;
84- }
88+ if (externalRefManagement ) {
89+ externalRefNode = null ;
90+ }
91+ }
8592 }
8693 } else if (type .equals (OpenApi3Grammar .SCHEMA )) {
8794 visitSchemaNode (node );
@@ -92,7 +99,9 @@ private void visitV3Node(JsonNode node) {
9299
93100 private void visitRequestBodyOrResponseV3Node (JsonNode node ) {
94101 JsonNode content = node .at ("/content" );
95- if (content .isMissing ()) return ;
102+ if (content .isMissing ()) {
103+ return ;
104+ }
96105 for (JsonNode mediaTypeNode : content .propertyMap ().values ()) {
97106 AstNodeType type = node .getType ();
98107 JsonNode schemaNode = mediaTypeNode .get ("schema" );
@@ -117,8 +126,13 @@ private void visitSchemaNode(JsonNode node) {
117126 if (node .get ("example" ).isMissing () && parentNode .get ("example" ).isMissing () && parentNode .get ("examples" ).isMissing ()) {
118127 addIssue (KEY , translate ("OAR031.error-parameter" ), parentNode );
119128 }
120- } else if (parentNode .getType ().equals (OpenApi3Grammar .SCHEMA_PROPERTIES ) ||
121- parentNode .getType ().toString ().equals ("BLOCK_MAPPING" ) || parentNode .getType ().toString ().equals ("FLOW_MAPPING" )) {
129+ } else if (parentNode .getType ().equals (OpenApi3Grammar .SCHEMA_PROPERTIES )
130+ || parentNode .getType ().toString ().equals ("BLOCK_MAPPING" ) || parentNode .getType ().toString ().equals ("FLOW_MAPPING" )) {
131+ JsonNode schemaParent = (JsonNode ) parentNode .getParent ().getParent ();
132+ if (schemaParent != null && !schemaParent .get ("allOf" ).isMissing ()) {
133+ return ;
134+ }
135+
122136 JsonNode type = getType (node );
123137 if (!isObjectType (type ) && !type .isMissing () && !isArrayType (type )) {
124138 if (node .get ("example" ).isMissing ()) {
@@ -129,7 +143,7 @@ private void visitSchemaNode(JsonNode node) {
129143 }
130144
131145 private void visitPathNode (JsonNode node ) {
132- List <JsonNode > allResponses = node .properties ().stream ().filter (propertyNode -> isOperation (propertyNode ))
146+ List <JsonNode > allResponses = node .properties ().stream ().filter (propertyNode -> isOperation (propertyNode ))
133147 .map (JsonNode ::value )
134148 .flatMap (n -> n .properties ().stream ())
135149 .map (JsonNode ::value )
@@ -148,15 +162,21 @@ private void visitPathNode(JsonNode node) {
148162 } else if (responseNode .getType ().equals (OpenApi3Grammar .RESPONSE )) {
149163 JsonNode content = responseNode .at ("/content" );
150164 if (content .isMissing ()) {
151- if (externalRefManagement ) externalRefNode = null ;
165+ if (externalRefManagement ) {
166+ externalRefNode = null ;
167+ }
152168 continue ;
153169 }
154170 content .propertyMap ().forEach ((mediaType , mediaTypeNode ) -> { // estudiar función lambda
155- if (!mediaType .toLowerCase ().contains ("json" )) return ;
156- visitSchemaNode2 (mediaTypeNode );
171+ if (!mediaType .toLowerCase ().contains ("json" )) {
172+ return ;
173+ }
174+ visitSchemaNode (mediaTypeNode );
157175 });
158176 }
159- if (externalRefManagement ) externalRefNode = null ;
177+ if (externalRefManagement ) {
178+ externalRefNode = null ;
179+ }
160180 }
161181 }
162182
0 commit comments