Skip to content

Commit 4667259

Browse files
gavinkingbeikov
authored andcommitted
HHH-18949 fix underscores within uppercase names
1 parent d95f160 commit 4667259

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,19 @@ public static String nameToMethodName(String name) {
109109
public static String getUpperUnderscoreCaseFromLowerCamelCase(String lowerCamelCaseString) {
110110
final StringBuilder result = new StringBuilder();
111111
int position = 0;
112+
boolean wasLowerCase = false;
112113
while ( position < lowerCamelCaseString.length() ) {
113114
final int codePoint = lowerCamelCaseString.codePointAt( position );
114-
if ( position>0 && isUpperCase( codePoint ) ) {
115+
final boolean isUpperCase = isUpperCase( codePoint );
116+
if ( wasLowerCase && isUpperCase ) {
115117
result.append('_');
116118
}
117119
result.appendCodePoint( toUpperCase( codePoint ) );
118120
position += charCount( codePoint );
121+
wasLowerCase = !isUpperCase;
122+
}
123+
if ( result.toString().equals( lowerCamelCaseString ) ) {
124+
result.insert(0, '_');
119125
}
120126
return result.toString();
121127
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.uppercase;
6+
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.Id;
9+
10+
@Entity
11+
public class Person {
12+
@Id String SSN;
13+
String UserID;
14+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.processor.test.uppercase;
6+
7+
import org.hibernate.processor.test.util.CompilationTest;
8+
import org.hibernate.processor.test.util.WithClasses;
9+
import org.junit.Test;
10+
11+
import static org.hibernate.processor.test.util.TestUtil.assertMetamodelClassGeneratedFor;
12+
import static org.hibernate.processor.test.util.TestUtil.assertPresenceOfFieldInMetamodelFor;
13+
import static org.hibernate.processor.test.util.TestUtil.getMetaModelSourceAsString;
14+
15+
public class UppercaseTest extends CompilationTest {
16+
17+
@Test
18+
@WithClasses(value = Person.class)
19+
public void test() {
20+
System.out.println( getMetaModelSourceAsString( Person.class ) );
21+
22+
assertMetamodelClassGeneratedFor( Person.class );
23+
24+
assertPresenceOfFieldInMetamodelFor( Person.class, "SSN" );
25+
assertPresenceOfFieldInMetamodelFor( Person.class, "_SSN" );
26+
assertPresenceOfFieldInMetamodelFor( Person.class, "UserID" );
27+
assertPresenceOfFieldInMetamodelFor( Person.class, "USER_ID" );
28+
}
29+
}

0 commit comments

Comments
 (0)