@@ -203,9 +203,47 @@ public String nameForConstructorParameter(MapperConfig<?> config, AnnotatedParam
203
203
}
204
204
205
205
public abstract String translate (String propertyName );
206
- }
207
-
206
+
207
+ /**
208
+ * Helper method to share implementation between snake and dotted case.
209
+ */
210
+ protected static String translateLowerCaseWithSeparator (final String input , final char separator )
211
+ {
212
+ if (input == null ) {
213
+ return input ; // garbage in, garbage out
214
+ }
215
+ final int length = input .length ();
216
+ if (length == 0 ) {
217
+ return input ;
218
+ }
208
219
220
+ final StringBuilder result = new StringBuilder (length + (length >> 1 ));
221
+ int upperCount = 0 ;
222
+ for (int i = 0 ; i < length ; ++i ) {
223
+ char ch = input .charAt (i );
224
+ char lc = Character .toLowerCase (ch );
225
+
226
+ if (lc == ch ) { // lower-case letter means we can get new word
227
+ // but need to check for multi-letter upper-case (acronym), where assumption
228
+ // is that the last upper-case char is start of a new word
229
+ if (upperCount > 1 ) {
230
+ // so insert hyphen before the last character now
231
+ result .insert (result .length () - 1 , separator );
232
+ }
233
+ upperCount = 0 ;
234
+ } else {
235
+ // Otherwise starts new word, unless beginning of string
236
+ if ((upperCount == 0 ) && (i > 0 )) {
237
+ result .append (separator );
238
+ }
239
+ ++upperCount ;
240
+ }
241
+ result .append (lc );
242
+ }
243
+ return result .toString ();
244
+ }
245
+ }
246
+
209
247
/*
210
248
/**********************************************************
211
249
/* Standard implementations
@@ -369,40 +407,8 @@ public String translate(String input) {
369
407
public static class KebabCaseStrategy extends PropertyNamingStrategyBase
370
408
{
371
409
@ Override
372
- public String translate (String input )
373
- {
374
- if (input == null ) return input ; // garbage in, garbage out
375
- int length = input .length ();
376
- if (length == 0 ) {
377
- return input ;
378
- }
379
-
380
- StringBuilder result = new StringBuilder (length + (length >> 1 ));
381
-
382
- int upperCount = 0 ;
383
-
384
- for (int i = 0 ; i < length ; ++i ) {
385
- char ch = input .charAt (i );
386
- char lc = Character .toLowerCase (ch );
387
-
388
- if (lc == ch ) { // lower-case letter means we can get new word
389
- // but need to check for multi-letter upper-case (acronym), where assumption
390
- // is that the last upper-case char is start of a new word
391
- if (upperCount > 1 ) {
392
- // so insert hyphen before the last character now
393
- result .insert (result .length () - 1 , '-' );
394
- }
395
- upperCount = 0 ;
396
- } else {
397
- // Otherwise starts new word, unless beginning of string
398
- if ((upperCount == 0 ) && (i > 0 )) {
399
- result .append ('-' );
400
- }
401
- ++upperCount ;
402
- }
403
- result .append (lc );
404
- }
405
- return result .toString ();
410
+ public String translate (String input ) {
411
+ return translateLowerCaseWithSeparator (input , '-' );
406
412
}
407
413
}
408
414
@@ -413,16 +419,10 @@ public String translate(String input)
413
419
* @since 2.10
414
420
*/
415
421
public static class LowerDotCaseStrategy extends PropertyNamingStrategyBase {
416
- /*
417
422
@ Override
418
423
public String translate (String input ){
419
424
return translateLowerCaseWithSeparator (input , '.' );
420
425
}
421
- */
422
- @ Override
423
- public String translate (String input ) {
424
- return input .toLowerCase ();
425
- }
426
426
}
427
427
428
428
/*
0 commit comments