[jOOQ/jOOQ#7668] Unescape kotlin/scala identifiers

This commit is contained in:
Lukas Eder 2024-02-22 13:45:01 +01:00
parent f72521b209
commit eb6150893d
2 changed files with 17 additions and 8 deletions

View File

@ -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<? extends Definition> 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<? extends Definition> 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;
}

View File

@ -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;