From 26eb3f0c7624e4839c41b0378bcb4458d68cca8c Mon Sep 17 00:00:00 2001 From: Lutra-Fs <36790218+Lutra-Fs@users.noreply.github.com> Date: Thu, 1 Jan 2026 16:24:39 +1100 Subject: [PATCH 1/3] Fix dart-dio webhook imports generating Map-style strings (issue #22586) Webhook operations were generating broken import statements with Map-style representation and HTML entity encoding: import '{import=model.Pet, classname=Pet}'; Instead of proper Dart package imports: import 'package:my-package/src/model/pet.dart'; This occurred because DartDioClientCodegen.postProcessOperationsWithModels() applied import processing to regular operations, but postProcessWebhooksWithModels() was missing the same logic. Fix: - Extracted shared import processing logic into processImports() method - Added postProcessWebhooksWithModels() override to apply same logic - Both operations and webhooks now use consistent import generation Test: - Added verifyWebhookImports() test using existing webhooks.yaml resource - Verifies generated code does not contain Map-style imports - Verifies generated code does not contain HTML entity encoding --- .../languages/DartDioClientCodegen.java | 26 ++++++++++--- .../dart/dio/DartDioClientCodegenTest.java | 37 +++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java index d9d038746372..311bcbf371fb 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java @@ -36,6 +36,7 @@ import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.model.OperationMap; import org.openapitools.codegen.model.OperationsMap; +import org.openapitools.codegen.model.WebhooksMap; import org.openapitools.codegen.templating.CommonTemplateContentLocator; import org.openapitools.codegen.templating.GeneratorTemplateContentLocator; import org.openapitools.codegen.templating.MustacheEngineAdapter; @@ -649,8 +650,25 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List allModels) { super.postProcessOperationsWithModels(objs, allModels); OperationMap operations = objs.getOperations(); - List operationList = operations.getOperation(); + processImports(operations, operations.getOperation()); + return objs; + } + + @Override + public WebhooksMap postProcessWebhooksWithModels(WebhooksMap objs, List allModels) { + super.postProcessWebhooksWithModels(objs, allModels); + OperationMap operations = objs.getWebhooks(); + processImports(operations, operations.getOperation()); + return objs; + } + /** + * Processes imports for operations or webhooks, applying the same logic to both. + * + * @param operations the OperationMap containing the operations + * @param operationList the list of CodegenOperation to process + */ + private void processImports(OperationMap operations, List operationList) { Set resultImports = new HashSet<>(); for (CodegenOperation op : operationList) { @@ -687,7 +705,7 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List files = generator.generate(); + files.forEach(File::deleteOnExit); + + // Find webhook API file (default_api.dart for 'newPet' webhook) + File apiDir = new File(output, "lib/src/api"); + Assert.assertTrue(apiDir.exists() && apiDir.isDirectory(), "API directory should exist"); + + File apiFile = new File(apiDir, "default_api.dart"); + Assert.assertTrue(apiFile.exists(), "default_api.dart should be generated for webhook"); + + String apiContent = Files.readString(apiFile.toPath(), StandardCharsets.UTF_8); + + // Bug symptom #22586: Map-style import with HTML entity encoding + // Before fix: import '{import=model.Pet, classname=Pet}'; + // After fix: import 'package:my_package/lib/src/gen/model/pet.dart'; + Assert.assertFalse(apiContent.contains("import '{"), + "Webhook should not contain Map-style import (bug #22586 symptom)"); + Assert.assertFalse(apiContent.contains("="), + "Webhook should not contain HTML entity encoding (bug #22586 symptom)"); + } } From 3a634e2961f544ff145a947ce5914ccce8c2cf52 Mon Sep 17 00:00:00 2001 From: Lutra-Fs <36790218+Lutra-Fs@users.noreply.github.com> Date: Thu, 1 Jan 2026 18:22:20 +1100 Subject: [PATCH 2/3] Refactor DartDio imports processing --- .../codegen/languages/DartDioClientCodegen.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java index 311bcbf371fb..2f0aaad64779 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartDioClientCodegen.java @@ -650,7 +650,7 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List allModels) { super.postProcessOperationsWithModels(objs, allModels); OperationMap operations = objs.getOperations(); - processImports(operations, operations.getOperation()); + processImports(operations.getOperation(), imports -> objs.put("imports", imports)); return objs; } @@ -658,17 +658,17 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List allModels) { super.postProcessWebhooksWithModels(objs, allModels); OperationMap operations = objs.getWebhooks(); - processImports(operations, operations.getOperation()); + processImports(operations.getOperation(), imports -> objs.put("imports", imports)); return objs; } /** * Processes imports for operations or webhooks, applying the same logic to both. * - * @param operations the OperationMap containing the operations * @param operationList the list of CodegenOperation to process + * @param setImports the handler to apply the processed imports */ - private void processImports(OperationMap operations, List operationList) { + private void processImports(List operationList, java.util.function.Consumer> setImports) { Set resultImports = new HashSet<>(); for (CodegenOperation op : operationList) { @@ -747,7 +747,7 @@ private void processImports(OperationMap operations, List oper } } // for some reason "import" structure is changed .. - operations.put("imports", resultImports.stream().sorted().collect(Collectors.toList())); + setImports.accept(resultImports.stream().sorted().collect(Collectors.toList())); } private void addBuiltValueSerializerImport(String type) { From 2dd599cef29b9204195fe13817fbae4908560ec9 Mon Sep 17 00:00:00 2001 From: Bill ZHANG <36790218+Lutra-Fs@users.noreply.github.com> Date: Thu, 1 Jan 2026 18:24:01 +1100 Subject: [PATCH 3/3] Update DartDioClientCodegenTest.java for doc clarity Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../openapitools/codegen/dart/dio/DartDioClientCodegenTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientCodegenTest.java index f9ec7b3fbcb3..2349377a4ab0 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/dart/dio/DartDioClientCodegenTest.java @@ -146,7 +146,7 @@ public void verifyWebhookImports() throws IOException { // Bug symptom #22586: Map-style import with HTML entity encoding // Before fix: import '{import=model.Pet, classname=Pet}'; - // After fix: import 'package:my_package/lib/src/gen/model/pet.dart'; + // After fix: import 'package:my-package/src/model/pet.dart'; Assert.assertFalse(apiContent.contains("import '{"), "Webhook should not contain Map-style import (bug #22586 symptom)"); Assert.assertFalse(apiContent.contains("="),