fix uppercasing of names in processor to comply with JPA 3.2 spec

This commit is contained in:
Gavin King 2024-09-21 10:53:50 +02:00
parent 86824040ec
commit d0295473b2
1 changed files with 16 additions and 2 deletions

View File

@ -8,6 +8,10 @@ package org.hibernate.processor.util;
import java.util.Locale; import java.util.Locale;
import static java.lang.Character.charCount;
import static java.lang.Character.isUpperCase;
import static java.lang.Character.toUpperCase;
/** /**
* @author Hardy Ferentschik * @author Hardy Ferentschik
*/ */
@ -102,8 +106,18 @@ public final class StringUtil {
return name.replaceAll("[\\s.\\-!@#%=+/*^&|(){}\\[\\],]", "_"); return name.replaceAll("[\\s.\\-!@#%=+/*^&|(){}\\[\\],]", "_");
} }
public static String getUpperUnderscoreCaseFromLowerCamelCase(String lowerCamelCaseString){ public static String getUpperUnderscoreCaseFromLowerCamelCase(String lowerCamelCaseString) {
return lowerCamelCaseString.replaceAll("(.)(\\p{Upper})", "$1_$2").toUpperCase(Locale.ROOT); final StringBuilder result = new StringBuilder();
int position = 0;
while ( position < lowerCamelCaseString.length() ) {
final int codePoint = lowerCamelCaseString.codePointAt( position );
if ( position>0 && isUpperCase( codePoint ) ) {
result.append('_');
}
result.appendCodePoint( toUpperCase( codePoint ) );
position += charCount( codePoint );
}
return result.toString();
} }
private static boolean startsWithSeveralUpperCaseLetters(String string) { private static boolean startsWithSeveralUpperCaseLetters(String string) {