summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-02 16:01:24 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-02 16:01:24 +0100
commit8944eb302495f1bef3149180fb098b2d00699fca (patch)
tree2d673efceedf853b8208a0579306f00597811983 /src/main/java/org/zwobble
parent6e3d033fe801c5c1943e8365205e35b5b5e4756b (diff)
Avoid keyword collisions when generating Java names
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java70
1 files changed, 66 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
index b3ee2a6..46646d5 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
@@ -10,6 +10,7 @@ import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
public class JavaGenerator {
@@ -57,19 +58,80 @@ public class JavaGenerator {
}
public JavaIdentifier generateEnumConstantName(String name) {
- return JavaIdentifier.of(Casing.lowerCamelCaseToUpperCase(name));
+ return avoidKeywords(Casing.lowerCamelCaseToUpperCase(name));
}
public JavaIdentifier generateFieldName(String name) {
- return JavaIdentifier.of(name);
+ return avoidKeywords(name);
}
public JavaIdentifier generatePackageNamePart(String part) {
- return JavaIdentifier.of(part);
+ return avoidKeywords(part);
}
public JavaIdentifier generateTypeName(String name) {
- return JavaIdentifier.of(name);
+ return avoidKeywords(name);
+ }
+
+ private static final Set<String> JAVA_KEYWORDS = Set.of(
+ "abstract",
+ "assert",
+ "boolean",
+ "break",
+ "byte",
+ "case",
+ "catch",
+ "char",
+ "class",
+ "const",
+ "continue",
+ "default",
+ "do",
+ "double",
+ "else",
+ "enum",
+ "extends",
+ "final",
+ "finally",
+ "float",
+ "for",
+ "goto",
+ "if",
+ "implements",
+ "import",
+ "instanceof",
+ "int",
+ "interface",
+ "long",
+ "native",
+ "new",
+ "package",
+ "private",
+ "protected",
+ "public",
+ "return",
+ "short",
+ "static",
+ "strictfp",
+ "super",
+ "switch",
+ "synchronized",
+ "this",
+ "throw",
+ "throws",
+ "transient",
+ "try",
+ "void",
+ "volatile",
+ "while"
+ );
+
+ private JavaIdentifier avoidKeywords(String name) {
+ if (JAVA_KEYWORDS.contains(name)) {
+ return JavaIdentifier.of(name + "_");
+ } else {
+ return JavaIdentifier.of(name);
+ }
}
public JavaTypeRef generateTypeRef(Type type) {