Skip to content

Commit d029547

Browse files
committed
fix uppercasing of names in processor to comply with JPA 3.2 spec
1 parent 8682404 commit d029547

File tree

1 file changed

+16
-2
lines changed
  • tooling/metamodel-generator/src/main/java/org/hibernate/processor/util

1 file changed

+16
-2
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/processor/util/StringUtil.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99
import java.util.Locale;
1010

11+
import static java.lang.Character.charCount;
12+
import static java.lang.Character.isUpperCase;
13+
import static java.lang.Character.toUpperCase;
14+
1115
/**
1216
* @author Hardy Ferentschik
1317
*/
@@ -102,8 +106,18 @@ public static String nameToMethodName(String name) {
102106
return name.replaceAll("[\\s.\\-!@#%=+/*^&|(){}\\[\\],]", "_");
103107
}
104108

105-
public static String getUpperUnderscoreCaseFromLowerCamelCase(String lowerCamelCaseString){
106-
return lowerCamelCaseString.replaceAll("(.)(\\p{Upper})", "$1_$2").toUpperCase(Locale.ROOT);
109+
public static String getUpperUnderscoreCaseFromLowerCamelCase(String lowerCamelCaseString) {
110+
final StringBuilder result = new StringBuilder();
111+
int position = 0;
112+
while ( position < lowerCamelCaseString.length() ) {
113+
final int codePoint = lowerCamelCaseString.codePointAt( position );
114+
if ( position>0 && isUpperCase( codePoint ) ) {
115+
result.append('_');
116+
}
117+
result.appendCodePoint( toUpperCase( codePoint ) );
118+
position += charCount( codePoint );
119+
}
120+
return result.toString();
107121
}
108122

109123
private static boolean startsWithSeveralUpperCaseLetters(String string) {

0 commit comments

Comments
 (0)