diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-02 16:01:24 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-02 16:01:24 +0100 |
| commit | 8944eb302495f1bef3149180fb098b2d00699fca (patch) | |
| tree | 2d673efceedf853b8208a0579306f00597811983 /src/main/java/org | |
| parent | 6e3d033fe801c5c1943e8365205e35b5b5e4756b (diff) | |
Avoid keyword collisions when generating Java names
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java | 70 |
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) { |
