Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 8d47fb2

Browse files
authored
Java, adds prefixItems (#368)
* Turns on prefixItems test cases * java 310 sample gen * Adds PrefixItemsValidator validate functionality * Adds listItemSchema * Fixes most java tests * FIxes java tests, sample+docs regen * Python array types updated * Adjusts python Unpack usage in tuples
1 parent f4a509e commit 8d47fb2

File tree

95 files changed

+4457
-142
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+4457
-142
lines changed

docs/generators/java.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
305305
|OneOf|✓|OAS3
306306
|Pattern|✓|OAS2,OAS3
307307
|PatternProperties|✓|OAS3
308-
|PrefixItems||OAS3
308+
|PrefixItems||OAS3
309309
|Properties|✓|OAS2,OAS3
310310
|PropertyNames|✓|OAS3
311311
|Ref|✓|OAS2,OAS3

samples/client/3_0_3_unit_test/java/.openapi-generator/FILES

+1
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidato
259259
src/main/java/org/openapijsonschematools/client/schemas/validation/PathToSchemasMap.java
260260
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternPropertiesValidator.java
261261
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java
262+
src/main/java/org/openapijsonschematools/client/schemas/validation/PrefixItemsValidator.java
262263
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java
263264
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyEntry.java
264265
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyNamesValidator.java

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/ItemsValidator.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@ public ItemsValidator(Class<? extends JsonSchema> items) {
2020
@Nullable List<PathToSchemasMap> containsPathToSchemas,
2121
@Nullable PathToSchemasMap patternPropertiesPathToSchemas
2222
) {
23-
if (!(arg instanceof List)) {
23+
if (!(arg instanceof List<?> listArg)) {
24+
return null;
25+
}
26+
if (listArg.isEmpty()) {
2427
return null;
2528
}
2629
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
27-
// todo add handling for prefixItems
28-
int i = 0;
29-
for(Object itemValue: (List<?>) arg) {
30+
int minIndex = schema.prefixItems != null ? schema.prefixItems.size() : 0;
31+
JsonSchema itemsSchema = JsonSchemaFactory.getInstance(items);
32+
for(int i = minIndex; i < listArg.size(); i++) {
3033
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
3134
itemPathToItem.add(i);
3235
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
@@ -35,15 +38,12 @@ public ItemsValidator(Class<? extends JsonSchema> items) {
3538
validationMetadata.validatedPathToSchemas(),
3639
validationMetadata.seenClasses()
3740
);
38-
JsonSchema itemsSchema = JsonSchemaFactory.getInstance(items);
3941
if (itemValidationMetadata.validationRanEarlier(itemsSchema)) {
4042
// todo add_deeper_validated_schemas
41-
i +=1;
4243
continue;
4344
}
44-
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, itemValue, itemValidationMetadata);
45+
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, listArg.get(i), itemValidationMetadata);
4546
pathToSchemas.update(otherPathToSchemas);
46-
i += 1;
4747
}
4848
return pathToSchemas;
4949
}

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchema.java

+8
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public abstract class JsonSchema {
5353
public @Nullable Map<String, Set<String>> dependentRequired;
5454
public final @Nullable Map<String, Class<? extends JsonSchema>> dependentSchemas;
5555
public @Nullable Map<Pattern, Class<? extends JsonSchema>> patternProperties;
56+
public @Nullable List<Class<? extends JsonSchema>> prefixItems;
5657
private final LinkedHashMap<String, KeywordValidator> keywordToValidator;
5758

5859
protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
@@ -284,6 +285,13 @@ protected JsonSchema(JsonSchemaInfo jsonSchemaInfo) {
284285
new PatternPropertiesValidator(this.patternProperties)
285286
);
286287
}
288+
this.prefixItems = jsonSchemaInfo.prefixItems;
289+
if (this.prefixItems != null) {
290+
keywordToValidator.put(
291+
"prefixItems",
292+
new PrefixItemsValidator(this.prefixItems)
293+
);
294+
}
287295
this.keywordToValidator = keywordToValidator;
288296
}
289297

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/schemas/validation/JsonSchemaInfo.java

+5
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,9 @@ public JsonSchemaInfo patternProperties(Map<Pattern, Class<? extends JsonSchema>
177177
this.patternProperties = patternProperties;
178178
return this;
179179
}
180+
public @Nullable List<Class<? extends JsonSchema>> prefixItems = null;
181+
public JsonSchemaInfo prefixItems(List<Class<? extends JsonSchema>> prefixItems) {
182+
this.prefixItems = prefixItems;
183+
return this;
184+
}
180185
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.openapijsonschematools.client.schemas.validation;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class PrefixItemsValidator implements KeywordValidator {
9+
public final List<Class<? extends JsonSchema>> prefixItems;
10+
11+
public PrefixItemsValidator(List<Class<? extends JsonSchema>> prefixItems) {
12+
this.prefixItems = prefixItems;
13+
}
14+
15+
@Override
16+
public @Nullable PathToSchemasMap validate(
17+
JsonSchema schema,
18+
@Nullable Object arg,
19+
ValidationMetadata validationMetadata,
20+
@Nullable List<PathToSchemasMap> containsPathToSchemas,
21+
@Nullable PathToSchemasMap patternPropertiesPathToSchemas
22+
) {
23+
if (!(arg instanceof List<?> listArg)) {
24+
return null;
25+
}
26+
if (listArg.isEmpty()) {
27+
return null;
28+
}
29+
PathToSchemasMap pathToSchemas = new PathToSchemasMap();
30+
int maxIndex = Math.min(listArg.size(), prefixItems.size());
31+
for (int i=0; i < maxIndex; i++) {
32+
List<Object> itemPathToItem = new ArrayList<>(validationMetadata.pathToItem());
33+
itemPathToItem.add(i);
34+
ValidationMetadata itemValidationMetadata = new ValidationMetadata(
35+
itemPathToItem,
36+
validationMetadata.configuration(),
37+
validationMetadata.validatedPathToSchemas(),
38+
validationMetadata.seenClasses()
39+
);
40+
JsonSchema itemsSchema = JsonSchemaFactory.getInstance(prefixItems.get(i));
41+
PathToSchemasMap otherPathToSchemas = JsonSchema.validate(itemsSchema, listArg.get(i), itemValidationMetadata);
42+
pathToSchemas.update(otherPathToSchemas);
43+
}
44+
return pathToSchemas;
45+
}
46+
}

samples/client/3_1_0_unit_test/java/.openapi-generator/FILES

+15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
README.md
2+
docs/components/schemas/ASchemaGivenForPrefixitems.md
3+
docs/components/schemas/AdditionalItemsAreAllowedByDefault.md
24
docs/components/schemas/AdditionalpropertiesAreAllowedByDefault.md
35
docs/components/schemas/AdditionalpropertiesCanExistByItself.md
46
docs/components/schemas/AdditionalpropertiesDoesNotLookInApplicators.md
@@ -51,6 +53,7 @@ docs/components/schemas/Ipv6Format.md
5153
docs/components/schemas/IriFormat.md
5254
docs/components/schemas/IriReferenceFormat.md
5355
docs/components/schemas/ItemsContains.md
56+
docs/components/schemas/ItemsDoesNotLookInApplicatorsValidCase.md
5457
docs/components/schemas/ItemsWithNullInstanceElements.md
5558
docs/components/schemas/JsonPointerFormat.md
5659
docs/components/schemas/MaxcontainsWithoutContainsIsIgnored.md
@@ -90,6 +93,8 @@ docs/components/schemas/PatternIsNotAnchored.md
9093
docs/components/schemas/PatternValidation.md
9194
docs/components/schemas/PatternpropertiesValidatesPropertiesMatchingARegex.md
9295
docs/components/schemas/PatternpropertiesWithNullValuedInstanceProperties.md
96+
docs/components/schemas/PrefixitemsValidationAdjustsTheStartingIndexForItems.md
97+
docs/components/schemas/PrefixitemsWithNullInstanceElements.md
9398
docs/components/schemas/PropertiesPatternpropertiesAdditionalpropertiesInteraction.md
9499
docs/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNames.md
95100
docs/components/schemas/PropertiesWithEscapedCharacters.md
@@ -116,13 +121,17 @@ docs/components/schemas/UnevaluateditemsWithItems.md
116121
docs/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.md
117122
docs/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.md
118123
docs/components/schemas/UniqueitemsFalseValidation.md
124+
docs/components/schemas/UniqueitemsFalseWithAnArrayOfItems.md
119125
docs/components/schemas/UniqueitemsValidation.md
126+
docs/components/schemas/UniqueitemsWithAnArrayOfItems.md
120127
docs/components/schemas/UriFormat.md
121128
docs/components/schemas/UriReferenceFormat.md
122129
docs/components/schemas/UriTemplateFormat.md
123130
docs/components/schemas/UuidFormat.md
124131
docs/servers/Server0.md
125132
pom.xml
133+
src/main/java/org/openapijsonschematools/client/components/schemas/ASchemaGivenForPrefixitems.java
134+
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalItemsAreAllowedByDefault.java
126135
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesAreAllowedByDefault.java
127136
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesCanExistByItself.java
128137
src/main/java/org/openapijsonschematools/client/components/schemas/AdditionalpropertiesDoesNotLookInApplicators.java
@@ -175,6 +184,7 @@ src/main/java/org/openapijsonschematools/client/components/schemas/Ipv6Format.ja
175184
src/main/java/org/openapijsonschematools/client/components/schemas/IriFormat.java
176185
src/main/java/org/openapijsonschematools/client/components/schemas/IriReferenceFormat.java
177186
src/main/java/org/openapijsonschematools/client/components/schemas/ItemsContains.java
187+
src/main/java/org/openapijsonschematools/client/components/schemas/ItemsDoesNotLookInApplicatorsValidCase.java
178188
src/main/java/org/openapijsonschematools/client/components/schemas/ItemsWithNullInstanceElements.java
179189
src/main/java/org/openapijsonschematools/client/components/schemas/JsonPointerFormat.java
180190
src/main/java/org/openapijsonschematools/client/components/schemas/MaxcontainsWithoutContainsIsIgnored.java
@@ -214,6 +224,8 @@ src/main/java/org/openapijsonschematools/client/components/schemas/PatternIsNotA
214224
src/main/java/org/openapijsonschematools/client/components/schemas/PatternValidation.java
215225
src/main/java/org/openapijsonschematools/client/components/schemas/PatternpropertiesValidatesPropertiesMatchingARegex.java
216226
src/main/java/org/openapijsonschematools/client/components/schemas/PatternpropertiesWithNullValuedInstanceProperties.java
227+
src/main/java/org/openapijsonschematools/client/components/schemas/PrefixitemsValidationAdjustsTheStartingIndexForItems.java
228+
src/main/java/org/openapijsonschematools/client/components/schemas/PrefixitemsWithNullInstanceElements.java
217229
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesPatternpropertiesAdditionalpropertiesInteraction.java
218230
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNames.java
219231
src/main/java/org/openapijsonschematools/client/components/schemas/PropertiesWithEscapedCharacters.java
@@ -240,7 +252,9 @@ src/main/java/org/openapijsonschematools/client/components/schemas/Unevaluatedit
240252
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.java
241253
src/main/java/org/openapijsonschematools/client/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.java
242254
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsFalseValidation.java
255+
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsFalseWithAnArrayOfItems.java
243256
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsValidation.java
257+
src/main/java/org/openapijsonschematools/client/components/schemas/UniqueitemsWithAnArrayOfItems.java
244258
src/main/java/org/openapijsonschematools/client/components/schemas/UriFormat.java
245259
src/main/java/org/openapijsonschematools/client/components/schemas/UriReferenceFormat.java
246260
src/main/java/org/openapijsonschematools/client/components/schemas/UriTemplateFormat.java
@@ -329,6 +343,7 @@ src/main/java/org/openapijsonschematools/client/schemas/validation/OneOfValidato
329343
src/main/java/org/openapijsonschematools/client/schemas/validation/PathToSchemasMap.java
330344
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternPropertiesValidator.java
331345
src/main/java/org/openapijsonschematools/client/schemas/validation/PatternValidator.java
346+
src/main/java/org/openapijsonschematools/client/schemas/validation/PrefixItemsValidator.java
332347
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertiesValidator.java
333348
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyEntry.java
334349
src/main/java/org/openapijsonschematools/client/schemas/validation/PropertyNamesValidator.java

samples/client/3_1_0_unit_test/java/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ allowed input and output types.
157157

158158
| Class | Description |
159159
| ----- | ----------- |
160+
| [ASchemaGivenForPrefixitems.ASchemaGivenForPrefixitems1](docs/components/schemas/ASchemaGivenForPrefixitems.md#aschemagivenforprefixitems1) | |
161+
| [AdditionalItemsAreAllowedByDefault.AdditionalItemsAreAllowedByDefault1](docs/components/schemas/AdditionalItemsAreAllowedByDefault.md#additionalitemsareallowedbydefault1) | |
160162
| [AdditionalpropertiesAreAllowedByDefault.AdditionalpropertiesAreAllowedByDefault1](docs/components/schemas/AdditionalpropertiesAreAllowedByDefault.md#additionalpropertiesareallowedbydefault1) | |
161163
| [AdditionalpropertiesCanExistByItself.AdditionalpropertiesCanExistByItself1](docs/components/schemas/AdditionalpropertiesCanExistByItself.md#additionalpropertiescanexistbyitself1) | |
162164
| [AdditionalpropertiesDoesNotLookInApplicators.AdditionalpropertiesDoesNotLookInApplicators1](docs/components/schemas/AdditionalpropertiesDoesNotLookInApplicators.md#additionalpropertiesdoesnotlookinapplicators1) | |
@@ -209,6 +211,7 @@ allowed input and output types.
209211
| [IriFormat.IriFormat1](docs/components/schemas/IriFormat.md#iriformat1) | |
210212
| [IriReferenceFormat.IriReferenceFormat1](docs/components/schemas/IriReferenceFormat.md#irireferenceformat1) | |
211213
| [ItemsContains.ItemsContains1](docs/components/schemas/ItemsContains.md#itemscontains1) | |
214+
| [ItemsDoesNotLookInApplicatorsValidCase.ItemsDoesNotLookInApplicatorsValidCase1](docs/components/schemas/ItemsDoesNotLookInApplicatorsValidCase.md#itemsdoesnotlookinapplicatorsvalidcase1) | |
212215
| [ItemsWithNullInstanceElements.ItemsWithNullInstanceElements1](docs/components/schemas/ItemsWithNullInstanceElements.md#itemswithnullinstanceelements1) | |
213216
| [JsonPointerFormat.JsonPointerFormat1](docs/components/schemas/JsonPointerFormat.md#jsonpointerformat1) | |
214217
| [MaxcontainsWithoutContainsIsIgnored.MaxcontainsWithoutContainsIsIgnored1](docs/components/schemas/MaxcontainsWithoutContainsIsIgnored.md#maxcontainswithoutcontainsisignored1) | |
@@ -248,6 +251,8 @@ allowed input and output types.
248251
| [PatternValidation.PatternValidation1](docs/components/schemas/PatternValidation.md#patternvalidation1) | |
249252
| [PatternpropertiesValidatesPropertiesMatchingARegex.PatternpropertiesValidatesPropertiesMatchingARegex1](docs/components/schemas/PatternpropertiesValidatesPropertiesMatchingARegex.md#patternpropertiesvalidatespropertiesmatchingaregex1) | |
250253
| [PatternpropertiesWithNullValuedInstanceProperties.PatternpropertiesWithNullValuedInstanceProperties1](docs/components/schemas/PatternpropertiesWithNullValuedInstanceProperties.md#patternpropertieswithnullvaluedinstanceproperties1) | |
254+
| [PrefixitemsValidationAdjustsTheStartingIndexForItems.PrefixitemsValidationAdjustsTheStartingIndexForItems1](docs/components/schemas/PrefixitemsValidationAdjustsTheStartingIndexForItems.md#prefixitemsvalidationadjuststhestartingindexforitems1) | |
255+
| [PrefixitemsWithNullInstanceElements.PrefixitemsWithNullInstanceElements1](docs/components/schemas/PrefixitemsWithNullInstanceElements.md#prefixitemswithnullinstanceelements1) | |
251256
| [PropertiesPatternpropertiesAdditionalpropertiesInteraction.PropertiesPatternpropertiesAdditionalpropertiesInteraction1](docs/components/schemas/PropertiesPatternpropertiesAdditionalpropertiesInteraction.md#propertiespatternpropertiesadditionalpropertiesinteraction1) | |
252257
| [PropertiesWhoseNamesAreJavascriptObjectPropertyNames.PropertiesWhoseNamesAreJavascriptObjectPropertyNames1](docs/components/schemas/PropertiesWhoseNamesAreJavascriptObjectPropertyNames.md#propertieswhosenamesarejavascriptobjectpropertynames1) | |
253258
| [PropertiesWithEscapedCharacters.PropertiesWithEscapedCharacters1](docs/components/schemas/PropertiesWithEscapedCharacters.md#propertieswithescapedcharacters1) | |
@@ -274,7 +279,9 @@ allowed input and output types.
274279
| [UnevaluatedpropertiesWithAdjacentAdditionalproperties.UnevaluatedpropertiesWithAdjacentAdditionalproperties1](docs/components/schemas/UnevaluatedpropertiesWithAdjacentAdditionalproperties.md#unevaluatedpropertieswithadjacentadditionalproperties1) | |
275280
| [UnevaluatedpropertiesWithNullValuedInstanceProperties.UnevaluatedpropertiesWithNullValuedInstanceProperties1](docs/components/schemas/UnevaluatedpropertiesWithNullValuedInstanceProperties.md#unevaluatedpropertieswithnullvaluedinstanceproperties1) | |
276281
| [UniqueitemsFalseValidation.UniqueitemsFalseValidation1](docs/components/schemas/UniqueitemsFalseValidation.md#uniqueitemsfalsevalidation1) | |
282+
| [UniqueitemsFalseWithAnArrayOfItems.UniqueitemsFalseWithAnArrayOfItems1](docs/components/schemas/UniqueitemsFalseWithAnArrayOfItems.md#uniqueitemsfalsewithanarrayofitems1) | |
277283
| [UniqueitemsValidation.UniqueitemsValidation1](docs/components/schemas/UniqueitemsValidation.md#uniqueitemsvalidation1) | |
284+
| [UniqueitemsWithAnArrayOfItems.UniqueitemsWithAnArrayOfItems1](docs/components/schemas/UniqueitemsWithAnArrayOfItems.md#uniqueitemswithanarrayofitems1) | |
278285
| [UriFormat.UriFormat1](docs/components/schemas/UriFormat.md#uriformat1) | |
279286
| [UriReferenceFormat.UriReferenceFormat1](docs/components/schemas/UriReferenceFormat.md#urireferenceformat1) | |
280287
| [UriTemplateFormat.UriTemplateFormat1](docs/components/schemas/UriTemplateFormat.md#uritemplateformat1) | |

0 commit comments

Comments
 (0)