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..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 @@ -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.getOperation(), imports -> objs.put("imports", imports)); + return objs; + } + + @Override + public WebhooksMap postProcessWebhooksWithModels(WebhooksMap objs, List allModels) { + super.postProcessWebhooksWithModels(objs, allModels); + OperationMap operations = objs.getWebhooks(); + processImports(operations.getOperation(), imports -> objs.put("imports", imports)); + return objs; + } + /** + * Processes imports for operations or webhooks, applying the same logic to both. + * + * @param operationList the list of CodegenOperation to process + * @param setImports the handler to apply the processed imports + */ + private void processImports(List operationList, java.util.function.Consumer> setImports) { 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/src/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)"); + } }