From 8f881a27046cbcfd0a1bfda7b0cd5db939540731 Mon Sep 17 00:00:00 2001 From: tan Date: Tue, 1 Apr 2025 21:46:12 +0530 Subject: [PATCH 1/3] [julia] fix regex escape on server codegen Fixed escaping of regex patterns on julialang server codegen. --- .../codegen/languages/AbstractJuliaCodegen.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java index a4eab1f20e5e..fc48f93220a6 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java @@ -531,6 +531,14 @@ private void changeParamNames(List paramsList, HashSet } } + private void changeRegexEscape(List paramsList) { + for (CodegenParameter param : paramsList) { + if (param.pattern != null) { + param.pattern = escapeRegex(param.pattern); + } + } + } + /** * Convert OAS Operation object to Codegen Operation object * @@ -562,6 +570,13 @@ public CodegenOperation fromOperation(String path, changeParamNames(op.queryParams, reservedNames); changeParamNames(op.formParams, reservedNames); + changeRegexEscape(op.allParams); + changeRegexEscape(op.bodyParams); + changeRegexEscape(op.headerParams); + changeRegexEscape(op.pathParams); + changeRegexEscape(op.queryParams); + changeRegexEscape(op.formParams); + return op; } From c445ea22cb7cf4b139a1201c7dbe4a20460fa044 Mon Sep 17 00:00:00 2001 From: tan Date: Tue, 1 Apr 2025 22:57:00 +0530 Subject: [PATCH 2/3] add comment for the escapeRegex method --- .../openapitools/codegen/languages/AbstractJuliaCodegen.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java index fc48f93220a6..d6f9428234a6 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java @@ -531,6 +531,9 @@ private void changeParamNames(List paramsList, HashSet } } + // The DefaultCodegen.toRegularExpression method returns regex in a format + // that is unsuitable for use in Julia. This method changes the regex to + // a suitable format. private void changeRegexEscape(List paramsList) { for (CodegenParameter param : paramsList) { if (param.pattern != null) { From 3bc26f6af3cfda90bea18f8f67565e6225997f4e Mon Sep 17 00:00:00 2001 From: tan Date: Wed, 2 Apr 2025 00:03:51 +0530 Subject: [PATCH 3/3] simplify --- .../languages/AbstractJuliaCodegen.java | 51 ++++--------------- 1 file changed, 10 insertions(+), 41 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java index d6f9428234a6..ea5a868b2fa0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJuliaCodegen.java @@ -454,29 +454,6 @@ public String escapeQuotationMark(String input) { return input.replace("\"", "\\\""); } - protected String escapeRegex(String pattern) { - pattern = pattern.replaceAll("\\\\\\\\", "\\\\"); - pattern = pattern.replaceAll("^/", ""); - pattern = pattern.replaceAll("/$", ""); - return pattern; - } - - /** - * Convert OpenAPI Parameter object to Codegen Parameter object - * - * @param imports set of imports for library/package/module - * @param param OpenAPI parameter object - * @return Codegen Parameter object - */ - @Override - public CodegenParameter fromParameter(Parameter param, Set imports) { - CodegenParameter parameter = super.fromParameter(param, imports); - if (parameter.pattern != null) { - parameter.pattern = escapeRegex(parameter.pattern); - } - return parameter; - } - /** * Convert OAS Property schema to Codegen Property object. *

@@ -498,9 +475,6 @@ public CodegenProperty fromProperty(String name, Schema schema, boolean required if (needsVarEscape(property.name)) { property.name = "var\"" + property.name + "\""; } - if (property.pattern != null) { - property.pattern = escapeRegex(property.pattern); - } return property; } @@ -531,15 +505,17 @@ private void changeParamNames(List paramsList, HashSet } } - // The DefaultCodegen.toRegularExpression method returns regex in a format - // that is unsuitable for use in Julia. This method changes the regex to - // a suitable format. - private void changeRegexEscape(List paramsList) { - for (CodegenParameter param : paramsList) { - if (param.pattern != null) { - param.pattern = escapeRegex(param.pattern); - } + @Override + public String toRegularExpression(String pattern) { + if (pattern == null) { + return pattern; } + + pattern = escapeText(pattern); + // escapeText unnecessarily escapes `\` such that `\.` in the regex ends up as `\\.` for example. + // we need to restore it back by converting `\\` to `\` + pattern = pattern.replaceAll("\\\\\\\\", "\\\\"); + return pattern; } /** @@ -573,13 +549,6 @@ public CodegenOperation fromOperation(String path, changeParamNames(op.queryParams, reservedNames); changeParamNames(op.formParams, reservedNames); - changeRegexEscape(op.allParams); - changeRegexEscape(op.bodyParams); - changeRegexEscape(op.headerParams); - changeRegexEscape(op.pathParams); - changeRegexEscape(op.queryParams); - changeRegexEscape(op.formParams); - return op; }