From 809e0c1cf990c923903f330544fbb3a3ddcd5ed9 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 22 Oct 2024 08:44:22 +0200 Subject: [PATCH] [jOOQ/jOOQ#17476] Support new Scala 3 keywords in code generator --- .../java/org/jooq/codegen/GenerationUtil.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java index 3b80a74d76..32ff254ec0 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationUtil.java @@ -43,6 +43,8 @@ import static org.jooq.codegen.GenerationUtil.ExpressionType.CONSTRUCTOR_REFEREN import static org.jooq.codegen.GenerationUtil.ExpressionType.EXPRESSION; import static org.jooq.codegen.Language.JAVA; import static org.jooq.codegen.Language.KOTLIN; +import static org.jooq.codegen.Language.SCALA; +import static org.jooq.codegen.Language.SCALA_3; import java.util.HashSet; import java.util.Set; @@ -157,8 +159,8 @@ class GenerationUtil { "this", "throw", "trait", - "try", "true", + "try", "type", "val", "var", @@ -177,6 +179,23 @@ class GenerationUtil { "@"*/ ))); + private static final Set SCALA3_KEYWORDS; + + static { + // See https://docs.scala-lang.org/scala3/reference/syntax.html + Set k = new HashSet<>(asList( + "enum", + "export", + "given", + "then"/*, + "=>>", + "?=>"*/ + )); + + k.addAll(SCALA_KEYWORDS); + SCALA3_KEYWORDS = unmodifiableSet(k); + } + private static final Set KOTLIN_KEYWORDS = unmodifiableSet(new HashSet<>(asList( // Hard keywords https://kotlinlang.org/docs/reference/keyword-reference.html @@ -420,7 +439,9 @@ class GenerationUtil { private static String convertToIdentifier0(String literal, Language language) { if (language == JAVA && JAVA_KEYWORDS.contains(literal)) return literal + "_"; - if (language.isScala() && SCALA_KEYWORDS.contains(literal)) + if (language == SCALA && SCALA_KEYWORDS.contains(literal)) + return "`" + literal + "`"; + if (language == SCALA_3 && SCALA3_KEYWORDS.contains(literal)) return "`" + literal + "`"; if (language == KOTLIN && KOTLIN_KEYWORDS.contains(literal)) return "`" + literal + "`";