From d95247dca27684c1accad67d159b41053f08ee21 Mon Sep 17 00:00:00 2001 From: Johannes Brodwall Date: Thu, 24 Oct 2024 13:07:23 +0200 Subject: [PATCH] fix: recursive `missingRequiredFields` --- .../model/AddMessageToConversationDeltaDto.java | 6 +++++- .../conversations/model/CommandToServerDto.java | 6 +++++- .../model/ConversationSnapshotDto.java | 6 +++++- .../model/CreateConversationDeltaDto.java | 6 +++++- .../model/UpdateConversationDeltaDto.java | 6 +++++- .../infectionTracker/model/InfectionDto.java | 6 +++++- .../jhannes/openapi/petstore/model/PetDto.java | 2 +- .../model/DataSourceHealthDetailsDto.java | 2 +- .../serverHealth/model/HealthComponentDto.java | 6 +++++- .../model/HealthComponentFailureDetailsDto.java | 2 +- .../serverHealth/model/ThreadHealthDetailsDto.java | 2 +- .../openapi/typeHierarchy/model/PetBaseDto.java | 2 +- .../websockets/model/CreatePersonCommandDto.java | 6 +++++- .../websockets/model/PersonSnapshotDto.java | 2 +- .../websockets/model/UpdatePersonCommandDto.java | 6 +++++- .../resources/JavaLombok/modelGeneric.handlebars | 14 +++++++++----- 16 files changed, 60 insertions(+), 20 deletions(-) diff --git a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/AddMessageToConversationDeltaDto.java b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/AddMessageToConversationDeltaDto.java index bfa1a5c..2913738 100644 --- a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/AddMessageToConversationDeltaDto.java +++ b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/AddMessageToConversationDeltaDto.java @@ -34,7 +34,11 @@ public List missingRequiredFields(String prefix) { if (getDelta() == null) fields.add(prefix + "delta"); if (getConversationId() == null) fields.add(prefix + "conversationId"); if (getMessageId() == null) fields.add(prefix + "messageId"); - if (getMessage() == null) fields.add(prefix + "message"); + if (getMessage() != null) { + fields.addAll(getMessage().missingRequiredFields(prefix + "message.")); + } else { + fields.add(prefix + "message"); + } return fields; } diff --git a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CommandToServerDto.java b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CommandToServerDto.java index 20e6054..b0f0fa7 100644 --- a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CommandToServerDto.java +++ b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CommandToServerDto.java @@ -32,7 +32,11 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getId() == null) fields.add(prefix + "id"); if (getClientTime() == null) fields.add(prefix + "clientTime"); - if (getDelta() == null) fields.add(prefix + "delta"); + if (getDelta() != null) { + fields.addAll(getDelta().missingRequiredFields(prefix + "delta.")); + } else { + fields.add(prefix + "delta"); + } return fields; } diff --git a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/ConversationSnapshotDto.java b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/ConversationSnapshotDto.java index e876cef..b97901a 100644 --- a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/ConversationSnapshotDto.java +++ b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/ConversationSnapshotDto.java @@ -47,7 +47,11 @@ public ConversationSnapshotDto removeWhereEqual(ConversationSnapshotDto o) { public List missingRequiredFields(String prefix) { List fields = super.missingRequiredFields(prefix); if (getId() == null) fields.add(prefix + "id"); - if (getInfo() == null) fields.add(prefix + "info"); + if (getInfo() != null) { + fields.addAll(getInfo().missingRequiredFields(prefix + "info.")); + } else { + fields.add(prefix + "info"); + } if (getMessages() == null) fields.add(prefix + "messages"); return fields; } diff --git a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CreateConversationDeltaDto.java b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CreateConversationDeltaDto.java index e8fefec..e5c9ec2 100644 --- a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CreateConversationDeltaDto.java +++ b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/CreateConversationDeltaDto.java @@ -31,7 +31,11 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getDelta() == null) fields.add(prefix + "delta"); if (getConversationId() == null) fields.add(prefix + "conversationId"); - if (getInfo() == null) fields.add(prefix + "info"); + if (getInfo() != null) { + fields.addAll(getInfo().missingRequiredFields(prefix + "info.")); + } else { + fields.add(prefix + "info"); + } return fields; } diff --git a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/UpdateConversationDeltaDto.java b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/UpdateConversationDeltaDto.java index ec72650..1b53141 100644 --- a/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/UpdateConversationDeltaDto.java +++ b/snapshotTests/snapshot/conversations/src/main/java/io/github/jhannes/openapi/conversations/model/UpdateConversationDeltaDto.java @@ -31,7 +31,11 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getDelta() == null) fields.add(prefix + "delta"); if (getConversationId() == null) fields.add(prefix + "conversationId"); - if (getInfo() == null) fields.add(prefix + "info"); + if (getInfo() != null) { + fields.addAll(getInfo().missingRequiredFields(prefix + "info.")); + } else { + fields.add(prefix + "info"); + } return fields; } diff --git a/snapshotTests/snapshot/infectionTracker/src/main/java/io/github/jhannes/openapi/infectionTracker/model/InfectionDto.java b/snapshotTests/snapshot/infectionTracker/src/main/java/io/github/jhannes/openapi/infectionTracker/model/InfectionDto.java index fd6709d..1a9eff5 100644 --- a/snapshotTests/snapshot/infectionTracker/src/main/java/io/github/jhannes/openapi/infectionTracker/model/InfectionDto.java +++ b/snapshotTests/snapshot/infectionTracker/src/main/java/io/github/jhannes/openapi/infectionTracker/model/InfectionDto.java @@ -30,7 +30,11 @@ public InfectionDto removeWhereEqual(InfectionDto o) { public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getId() == null) fields.add(prefix + "id"); - if (getInformation() == null) fields.add(prefix + "information"); + if (getInformation() != null) { + fields.addAll(getInformation().missingRequiredFields(prefix + "information.")); + } else { + fields.add(prefix + "information"); + } if (getRegisteredExposures() == null) fields.add(prefix + "registeredExposures"); return fields; } diff --git a/snapshotTests/snapshot/petstore/src/main/java/io/github/jhannes/openapi/petstore/model/PetDto.java b/snapshotTests/snapshot/petstore/src/main/java/io/github/jhannes/openapi/petstore/model/PetDto.java index b598720..320864b 100644 --- a/snapshotTests/snapshot/petstore/src/main/java/io/github/jhannes/openapi/petstore/model/PetDto.java +++ b/snapshotTests/snapshot/petstore/src/main/java/io/github/jhannes/openapi/petstore/model/PetDto.java @@ -67,7 +67,7 @@ public PetDto removeWhereEqual(PetDto o) { public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getCategory() != null) { - fields.addAll(getCategory().missingRequiredFields(prefix + ".category")); + fields.addAll(getCategory().missingRequiredFields(prefix + "category.")); } if (getName() == null) fields.add(prefix + "name"); if (getPhotoUrls() == null) fields.add(prefix + "photoUrls"); diff --git a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/DataSourceHealthDetailsDto.java b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/DataSourceHealthDetailsDto.java index 69e3043..36dc434 100644 --- a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/DataSourceHealthDetailsDto.java +++ b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/DataSourceHealthDetailsDto.java @@ -39,7 +39,7 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getType() == null) fields.add(prefix + "type"); if (getLastFailureException() != null) { - fields.addAll(getLastFailureException().missingRequiredFields(prefix + ".lastFailureException")); + fields.addAll(getLastFailureException().missingRequiredFields(prefix + "lastFailureException.")); } return fields; } diff --git a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentDto.java b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentDto.java index d9e2723..6a45336 100644 --- a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentDto.java +++ b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentDto.java @@ -34,7 +34,11 @@ public HealthComponentDto removeWhereEqual(HealthComponentDto o) { public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getStatus() == null) fields.add(prefix + "status"); - if (getDetails() == null) fields.add(prefix + "details"); + if (getDetails() != null) { + fields.addAll(getDetails().missingRequiredFields(prefix + "details.")); + } else { + fields.add(prefix + "details"); + } return fields; } diff --git a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentFailureDetailsDto.java b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentFailureDetailsDto.java index 6332810..70d64ac 100644 --- a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentFailureDetailsDto.java +++ b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/HealthComponentFailureDetailsDto.java @@ -30,7 +30,7 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getType() == null) fields.add(prefix + "type"); if (getException() != null) { - fields.addAll(getException().missingRequiredFields(prefix + ".exception")); + fields.addAll(getException().missingRequiredFields(prefix + "exception.")); } return fields; } diff --git a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/ThreadHealthDetailsDto.java b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/ThreadHealthDetailsDto.java index 5707b10..e5f4c84 100644 --- a/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/ThreadHealthDetailsDto.java +++ b/snapshotTests/snapshot/serverHealth/src/main/java/io/github/jhannes/openapi/serverHealth/model/ThreadHealthDetailsDto.java @@ -70,7 +70,7 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getType() == null) fields.add(prefix + "type"); if (getLastFailureException() != null) { - fields.addAll(getLastFailureException().missingRequiredFields(prefix + ".lastFailureException")); + fields.addAll(getLastFailureException().missingRequiredFields(prefix + "lastFailureException.")); } return fields; } diff --git a/snapshotTests/snapshot/typeHierarchy/src/main/java/io/github/jhannes/openapi/typeHierarchy/model/PetBaseDto.java b/snapshotTests/snapshot/typeHierarchy/src/main/java/io/github/jhannes/openapi/typeHierarchy/model/PetBaseDto.java index a6b389e..b19a83d 100644 --- a/snapshotTests/snapshot/typeHierarchy/src/main/java/io/github/jhannes/openapi/typeHierarchy/model/PetBaseDto.java +++ b/snapshotTests/snapshot/typeHierarchy/src/main/java/io/github/jhannes/openapi/typeHierarchy/model/PetBaseDto.java @@ -39,7 +39,7 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getName() == null) fields.add(prefix + "name"); if (getOwnerAddress() != null) { - fields.addAll(getOwnerAddress().missingRequiredFields(prefix + ".ownerAddress")); + fields.addAll(getOwnerAddress().missingRequiredFields(prefix + "ownerAddress.")); } return fields; } diff --git a/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/CreatePersonCommandDto.java b/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/CreatePersonCommandDto.java index e164982..efa2771 100644 --- a/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/CreatePersonCommandDto.java +++ b/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/CreatePersonCommandDto.java @@ -31,7 +31,11 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getCommand() == null) fields.add(prefix + "command"); if (getId() == null) fields.add(prefix + "id"); - if (getPerson() == null) fields.add(prefix + "person"); + if (getPerson() != null) { + fields.addAll(getPerson().missingRequiredFields(prefix + "person.")); + } else { + fields.add(prefix + "person"); + } return fields; } diff --git a/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/PersonSnapshotDto.java b/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/PersonSnapshotDto.java index 9c0cf2c..d6e6549 100644 --- a/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/PersonSnapshotDto.java +++ b/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/PersonSnapshotDto.java @@ -82,7 +82,7 @@ public List missingRequiredFields(String prefix) { if (getCreatedAt() == null) fields.add(prefix + "createdAt"); if (getCreatedBy() == null) fields.add(prefix + "createdBy"); if (getName() != null) { - fields.addAll(getName().missingRequiredFields(prefix + ".name")); + fields.addAll(getName().missingRequiredFields(prefix + "name.")); } return fields; } diff --git a/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/UpdatePersonCommandDto.java b/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/UpdatePersonCommandDto.java index 389d163..bbfe83d 100644 --- a/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/UpdatePersonCommandDto.java +++ b/snapshotTests/snapshot/websockets/src/main/java/io/github/jhannes/openapi/websockets/model/UpdatePersonCommandDto.java @@ -31,7 +31,11 @@ public List missingRequiredFields(String prefix) { List fields = new ArrayList<>(); if (getCommand() == null) fields.add(prefix + "command"); if (getId() == null) fields.add(prefix + "id"); - if (getPerson() == null) fields.add(prefix + "person"); + if (getPerson() != null) { + fields.addAll(getPerson().missingRequiredFields(prefix + "person.")); + } else { + fields.add(prefix + "person"); + } return fields; } diff --git a/src/main/resources/JavaLombok/modelGeneric.handlebars b/src/main/resources/JavaLombok/modelGeneric.handlebars index 7b8c86c..b323c8a 100644 --- a/src/main/resources/JavaLombok/modelGeneric.handlebars +++ b/src/main/resources/JavaLombok/modelGeneric.handlebars @@ -161,15 +161,19 @@ public {{#if children}}sealed{{else}}final{{/if}} class {{classname}} List fields = new ArrayList<>(); {{/if}} {{#vars}} -{{#if required}} {{#unless isInherited}} - if ({{getter}}() == null) fields.add(prefix + "{{name}}"); -{{/unless}} -{{else if isModel}} +{{#if isModel}} if ({{getter}}() != null) { - fields.addAll({{getter}}().missingRequiredFields(prefix + ".{{name}}")); + fields.addAll({{getter}}().missingRequiredFields(prefix + "{{name}}.")); +{{#if required}} + } else { + fields.add(prefix + "{{name}}"); +{{/if}} } +{{else if required}} + if ({{getter}}() == null) fields.add(prefix + "{{name}}"); {{/if}} +{{/unless}} {{/vars}} return fields; {{else}}