Skip to content

Commit fef4ce2

Browse files
committed
Prefix enum constant names with class name
Some enum constant names defined in .gir files are not legal Java, for example, they can begin with a number. The c:identifier is not always usable either, as in some cases it contains a free-form description. Transforming the enum class name from CamelCase to ALL_UPPERCASE_WITH_UNDERSCORES_, and prefixing it to the enum constant names should produce legal Java enum constant names.
1 parent 2bcf93d commit fef4ce2

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/gir2java/GirParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,9 @@ private void parseEnumeration(Element root, ParsingContext context) {
441441
private void parseEnumMember(Element root, ParsingContext context) {
442442
JDefinedClass enumClass = (JDefinedClass) context.getCmNode();
443443

444-
JEnumConstant enumConstant = enumClass.enumConstant(root.getAttributeValue("name").toUpperCase());
444+
JEnumConstant enumConstant = enumClass.enumConstant(
445+
NameUtils.camelToUpper(enumClass.name()) + '_' + root.getAttributeValue("name").toUpperCase()
446+
);
445447
long value = Long.parseLong(root.getAttributeValue("value"));
446448
enumConstant.arg(JExpr.lit(value));
447449
System.out.println("--> " + enumConstant.getName() + " (" + value + ")");

src/gir2java/NameUtils.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,13 @@ public static String neutralizeKeyword(String input) {
8686
return input;
8787
}
8888
}
89+
90+
/**
91+
* Convert CamelCase strings to ALL_UPPERCASE_WITH_UNDERSCORES.
92+
* @param camel
93+
* @return
94+
*/
95+
public static String camelToUpper(String camel) {
96+
return camel.replaceAll("([A-Z][a-z0-9])", "_$1").substring(1).toUpperCase();
97+
}
8998
}

0 commit comments

Comments
 (0)