diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java index 74e793239d..b565a32aac 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java @@ -82,21 +82,21 @@ public abstract class AbstractGeneratorStrategy implements GeneratorStrategy { @Override public final File getFileRoot() { String dir = getTargetDirectory(); - String pkg = patchPackageName(getTargetPackage().replaceAll("\\.", "/")); + String pkg = unescape(getTargetPackage().replaceAll("\\.", "/")); return new File(dir + "/" + pkg); } @Override public final File getGlobalNamesFile(Definition container, Class objectType) { String dir = getTargetDirectory(); - String pkg = patchPackageName(getGlobalNamesJavaPackageName(container, objectType).replaceAll("\\.", "/")); + String pkg = unescape(getGlobalNamesJavaPackageName(container, objectType).replaceAll("\\.", "/")); return new File(dir + "/" + pkg, getGlobalNamesFileName(container, objectType)); } @Override public final File getGlobalReferencesFile(Definition container, Class objectType) { String dir = getTargetDirectory(); - String pkg = patchPackageName(getGlobalReferencesJavaPackageName(container, objectType).replaceAll("\\.", "/")); + String pkg = unescape(getGlobalReferencesJavaPackageName(container, objectType).replaceAll("\\.", "/")); return new File(dir + "/" + pkg, getGlobalReferencesFileName(container, objectType)); } @@ -108,21 +108,25 @@ public abstract class AbstractGeneratorStrategy implements GeneratorStrategy { @Override public final File getFile(Definition definition, Mode mode) { String dir = getTargetDirectory(); - String pkg = patchPackageName(getJavaPackageName(definition, mode).replaceAll("\\.", "/")); + String pkg = unescape(getJavaPackageName(definition, mode).replaceAll("\\.", "/")); return new File(dir + "/" + pkg, getFileName(definition, mode)); } @Override public final File getFile(String fileName) { String dir = getTargetDirectory(); - String pkg = patchPackageName(getTargetPackage().replaceAll("\\.", "/")); + String pkg = unescape(getTargetPackage().replaceAll("\\.", "/")); return new File(dir + "/" + pkg, fileName); } - private final String patchPackageName(String pkg) { + final String unescape(String pkg) { + return unescape(getTargetLanguage(), pkg); + } + + static final String unescape(Language language, String pkg) { // [#13866] Backticks that were used to escape identifiers conflicting // with keywords shouldn't appear in file names. - switch (getTargetLanguage()) { + switch (language) { case KOTLIN: case SCALA: if (pkg.contains("`")) @@ -130,6 +134,7 @@ public abstract class AbstractGeneratorStrategy implements GeneratorStrategy { break; } + return pkg; } diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java index c367628fb3..d02d4d705f 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -5254,7 +5254,7 @@ public class JavaGenerator extends AbstractGenerator { columnLoop: for (Definition column : embeddablesAndUnreplacedColumns) { final String colName = column.getOutputName(); - final String colMemberUC = StringUtils.toUC(getStrategy().getJavaMemberName(column, Mode.DAO), getStrategy().getTargetLocale()); + final String colMemberUC = unescapeIdentifier(StringUtils.toUC(getStrategy().getJavaMemberName(column, Mode.DAO), getStrategy().getTargetLocale())); final String colTypeFull = getJavaType(column, out, Mode.POJO); final String colTypeRecord = out.ref(getJavaType(column, out, Mode.RECORD)); final String colType = out.ref(colTypeFull); @@ -8164,6 +8164,10 @@ public class JavaGenerator extends AbstractGenerator { return "\"" + escapeString(string) + "\""; } + private String unescapeIdentifier(String identifier) { + return AbstractGeneratorStrategy.unescape(getStrategy().getTargetLanguage(), identifier); + } + private String escapeString(String string) { if (string == null) return null;