Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3861,8 +3861,29 @@ public CodegenProperty fromProperty(String name, Schema p, boolean required, boo
}

Schema original = null;
// process the dereference schema if it's a ref to allOf with a single item
// and certain field(s) (e.g. description, readyOnly, etc) is set
if (p.get$ref() != null) {
Schema derefSchema = ModelUtils.getReferencedSchema(openAPI, p);
if (ModelUtils.isAllOfWithSingleItem(derefSchema) && (
derefSchema.getReadOnly() != null ||
derefSchema.getWriteOnly() != null ||
derefSchema.getDeprecated() != null ||
derefSchema.getDescription() != null ||
derefSchema.getMaxLength() != null ||
derefSchema.getMinLength() != null ||
derefSchema.getMinimum() != null ||
derefSchema.getMaximum() != null ||
derefSchema.getMaximum() != null ||
derefSchema.getMinItems() != null ||
derefSchema.getTitle() != null
)) {
p = ModelUtils.getReferencedSchema(openAPI, p);
}
}

// check if it's allOf (only 1 sub schema) with or without default/nullable/etc set in the top level
if (ModelUtils.isAllOf(p) && p.getAllOf().size() == 1) {
if (ModelUtils.isAllOfWithSingleItem(p)) {
if (p.getAllOf().get(0) instanceof Schema) {
original = p;
p = (Schema) p.getAllOf().get(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2031,6 +2031,18 @@ public static boolean isAllOf(Schema schema) {
return false;
}


/**
* Returns true if the schema contains allOf with a single item but
* no properties/oneOf/anyOf defined
*
* @param schema the schema
* @return true if the schema contains allOf but no properties/oneOf/anyOf defined.
*/
public static boolean isAllOfWithSingleItem(Schema schema) {
return (isAllOf(schema) && schema.getAllOf().size() == 1);
}

/**
* Returns true if the schema contains allOf and may or may not have
* properties/oneOf/anyOf defined.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2610,6 +2610,10 @@ components:
minItems: 1
items:
$ref: '#/components/schemas/Scalar'
AllOfRefToString:
allOf:
- $ref: '#/components/schemas/OuterString'
description: testing allOf with a ref to string
NewPet:
type: object
required:
Expand All @@ -2620,6 +2624,12 @@ components:
type: integer
format: int64
x-is-unique: true
category_ref_to_inline_allof_string:
$ref: '#/components/schemas/AllOfRefToString'
category_inline_allof_string:
allOf:
- $ref: '#/components/schemas/OuterString'
description: testing allOf with a ref to string
category_inline_allof:
allOf:
- type: object
Expand Down
10 changes: 10 additions & 0 deletions samples/client/petstore/java/okhttp-gson/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2689,12 +2689,22 @@ components:
$ref: '#/components/schemas/Scalar'
minItems: 1
type: array
AllOfRefToString:
allOf:
- $ref: '#/components/schemas/OuterString'
description: testing allOf with a ref to string
NewPet:
properties:
id:
format: int64
type: integer
x-is-unique: true
category_ref_to_inline_allof_string:
$ref: '#/components/schemas/AllOfRefToString'
category_inline_allof_string:
allOf:
- $ref: '#/components/schemas/OuterString'
description: testing allOf with a ref to string
category_inline_allof:
$ref: '#/components/schemas/NewPet_category_inline_allof'
category_allOf_ref:
Expand Down
2 changes: 2 additions & 0 deletions samples/client/petstore/java/okhttp-gson/docs/NewPet.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
| Name | Type | Description | Notes |
|------------ | ------------- | ------------- | -------------|
|**id** | **Long** | | [optional] |
|**categoryRefToInlineAllofString** | **String** | testing allOf with a ref to string | [optional] |
|**categoryInlineAllofString** | **String** | testing allOf with a ref to string | [optional] |
|**categoryInlineAllof** | [**NewPetCategoryInlineAllof**](NewPetCategoryInlineAllof.md) | | [optional] |
|**categoryAllOfRef** | [**Category**](Category.md) | | [optional] |
|**categoryAllOfRefDescription** | [**Category**](Category.md) | Adding description to property using allOf | [optional] |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,16 @@ public class NewPet {
@javax.annotation.Nullable
private Long id;

public static final String SERIALIZED_NAME_CATEGORY_REF_TO_INLINE_ALLOF_STRING = "category_ref_to_inline_allof_string";
@SerializedName(SERIALIZED_NAME_CATEGORY_REF_TO_INLINE_ALLOF_STRING)
@javax.annotation.Nullable
private String categoryRefToInlineAllofString;

public static final String SERIALIZED_NAME_CATEGORY_INLINE_ALLOF_STRING = "category_inline_allof_string";
@SerializedName(SERIALIZED_NAME_CATEGORY_INLINE_ALLOF_STRING)
@javax.annotation.Nullable
private String categoryInlineAllofString;

public static final String SERIALIZED_NAME_CATEGORY_INLINE_ALLOF = "category_inline_allof";
@SerializedName(SERIALIZED_NAME_CATEGORY_INLINE_ALLOF)
@javax.annotation.Nullable
Expand Down Expand Up @@ -183,6 +193,44 @@ public void setId(@javax.annotation.Nullable Long id) {
}


public NewPet categoryRefToInlineAllofString(@javax.annotation.Nullable String categoryRefToInlineAllofString) {
this.categoryRefToInlineAllofString = categoryRefToInlineAllofString;
return this;
}

/**
* testing allOf with a ref to string
* @return categoryRefToInlineAllofString
*/
@javax.annotation.Nullable
public String getCategoryRefToInlineAllofString() {
return categoryRefToInlineAllofString;
}

public void setCategoryRefToInlineAllofString(@javax.annotation.Nullable String categoryRefToInlineAllofString) {
this.categoryRefToInlineAllofString = categoryRefToInlineAllofString;
}


public NewPet categoryInlineAllofString(@javax.annotation.Nullable String categoryInlineAllofString) {
this.categoryInlineAllofString = categoryInlineAllofString;
return this;
}

/**
* testing allOf with a ref to string
* @return categoryInlineAllofString
*/
@javax.annotation.Nullable
public String getCategoryInlineAllofString() {
return categoryInlineAllofString;
}

public void setCategoryInlineAllofString(@javax.annotation.Nullable String categoryInlineAllofString) {
this.categoryInlineAllofString = categoryInlineAllofString;
}


public NewPet categoryInlineAllof(@javax.annotation.Nullable NewPetCategoryInlineAllof categoryInlineAllof) {
this.categoryInlineAllof = categoryInlineAllof;
return this;
Expand Down Expand Up @@ -398,6 +446,8 @@ public boolean equals(Object o) {
}
NewPet newPet = (NewPet) o;
return Objects.equals(this.id, newPet.id) &&
Objects.equals(this.categoryRefToInlineAllofString, newPet.categoryRefToInlineAllofString) &&
Objects.equals(this.categoryInlineAllofString, newPet.categoryInlineAllofString) &&
Objects.equals(this.categoryInlineAllof, newPet.categoryInlineAllof) &&
Objects.equals(this.categoryAllOfRef, newPet.categoryAllOfRef) &&
Objects.equals(this.categoryAllOfRefDescription, newPet.categoryAllOfRefDescription) &&
Expand All @@ -411,14 +461,16 @@ public boolean equals(Object o) {

@Override
public int hashCode() {
return Objects.hash(id, categoryInlineAllof, categoryAllOfRef, categoryAllOfRefDescription, categoryAllOfRefDescriptionReadonly, name, photoUrls, tags, status, additionalProperties);
return Objects.hash(id, categoryRefToInlineAllofString, categoryInlineAllofString, categoryInlineAllof, categoryAllOfRef, categoryAllOfRefDescription, categoryAllOfRefDescriptionReadonly, name, photoUrls, tags, status, additionalProperties);
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class NewPet {\n");
sb.append(" id: ").append(toIndentedString(id)).append("\n");
sb.append(" categoryRefToInlineAllofString: ").append(toIndentedString(categoryRefToInlineAllofString)).append("\n");
sb.append(" categoryInlineAllofString: ").append(toIndentedString(categoryInlineAllofString)).append("\n");
sb.append(" categoryInlineAllof: ").append(toIndentedString(categoryInlineAllof)).append("\n");
sb.append(" categoryAllOfRef: ").append(toIndentedString(categoryAllOfRef)).append("\n");
sb.append(" categoryAllOfRefDescription: ").append(toIndentedString(categoryAllOfRefDescription)).append("\n");
Expand Down Expand Up @@ -451,6 +503,8 @@ private String toIndentedString(Object o) {
// a set of all properties/fields (JSON key names)
openapiFields = new HashSet<String>();
openapiFields.add("id");
openapiFields.add("category_ref_to_inline_allof_string");
openapiFields.add("category_inline_allof_string");
openapiFields.add("category_inline_allof");
openapiFields.add("category_allOf_ref");
openapiFields.add("category_allOf_ref_description");
Expand Down Expand Up @@ -486,6 +540,12 @@ public static void validateJsonElement(JsonElement jsonElement) throws IOExcepti
}
}
JsonObject jsonObj = jsonElement.getAsJsonObject();
if ((jsonObj.get("category_ref_to_inline_allof_string") != null && !jsonObj.get("category_ref_to_inline_allof_string").isJsonNull()) && !jsonObj.get("category_ref_to_inline_allof_string").isJsonPrimitive()) {
throw new IllegalArgumentException(String.format("Expected the field `category_ref_to_inline_allof_string` to be a primitive type in the JSON string but got `%s`", jsonObj.get("category_ref_to_inline_allof_string").toString()));
}
if ((jsonObj.get("category_inline_allof_string") != null && !jsonObj.get("category_inline_allof_string").isJsonNull()) && !jsonObj.get("category_inline_allof_string").isJsonPrimitive()) {
throw new IllegalArgumentException(String.format("Expected the field `category_inline_allof_string` to be a primitive type in the JSON string but got `%s`", jsonObj.get("category_inline_allof_string").toString()));
}
// validate the optional field `category_inline_allof`
if (jsonObj.get("category_inline_allof") != null && !jsonObj.get("category_inline_allof").isJsonNull()) {
NewPetCategoryInlineAllof.validateJsonElement(jsonObj.get("category_inline_allof"));
Expand Down