From 16b6e2a759fed852cfcc51e99a07d24615cb1c53 Mon Sep 17 00:00:00 2001 From: altro3 Date: Tue, 20 Dec 2022 19:23:25 +0700 Subject: [PATCH] Fix isReaderName for fields started with `_` or `$` (#8435) --- .../java/io/micronaut/core/naming/NameUtils.java | 13 +++++++------ .../io/micronaut/core/naming/NameUtilsSpec.groovy | 2 ++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/io/micronaut/core/naming/NameUtils.java b/core/src/main/java/io/micronaut/core/naming/NameUtils.java index ee42c730580..0b918523fbc 100644 --- a/core/src/main/java/io/micronaut/core/naming/NameUtils.java +++ b/core/src/main/java/io/micronaut/core/naming/NameUtils.java @@ -93,7 +93,7 @@ public static String capitalize(String name) { final String rest = name.substring(1); // Funky rule so that names like 'pNAME' will still work. - if (Character.isLowerCase(name.charAt(0)) && (rest.length() > 0) && Character.isUpperCase(rest.charAt(0))) { + if (Character.isLowerCase(name.charAt(0)) && (!rest.isEmpty()) && Character.isUpperCase(rest.charAt(0))) { return name; } @@ -135,7 +135,7 @@ public static String hyphenate(String name, boolean lowerCase) { public static String dehyphenate(String name) { StringBuilder sb = new StringBuilder(name.length()); for (String token : StringUtils.splitOmitEmptyStrings(name, '-')) { - if (token.length() > 0 && Character.isLetter(token.charAt(0))) { + if (!token.isEmpty() && Character.isLetter(token.charAt(0))) { sb.append(Character.toUpperCase(token.charAt(0))); sb.append(token.substring(1)); } else { @@ -229,7 +229,7 @@ public static boolean isWriterName(@NonNull String methodName, @NonNull String w public static boolean isWriterName(@NonNull String methodName, @NonNull String[] writePrefixes) { boolean isValid = false; for (String writePrefix : writePrefixes) { - if (writePrefix.length() == 0) { + if (writePrefix.isEmpty()) { return true; } int len = methodName.length(); @@ -360,7 +360,7 @@ public static boolean isReaderName(@NonNull String methodName, @NonNull String[] boolean isValid = false; for (String readPrefix : readPrefixes) { int prefixLength = 0; - if (readPrefix.length() == 0) { + if (readPrefix.isEmpty()) { return true; } else if (methodName.startsWith(readPrefix)) { prefixLength = readPrefix.length(); @@ -369,7 +369,8 @@ public static boolean isReaderName(@NonNull String methodName, @NonNull String[] } int len = methodName.length(); if (len > prefixLength) { - isValid = Character.isUpperCase(methodName.charAt(prefixLength)); + char firstVarNameChar = methodName.charAt(prefixLength); + isValid = firstVarNameChar == '_' || firstVarNameChar == '$' || Character.isUpperCase(firstVarNameChar); } if (isValid) { @@ -491,7 +492,7 @@ public static String getterNameFor(@NonNull String propertyName, boolean isBoole } private static String nameFor(String prefix, @NonNull String propertyName) { - if (prefix.length() == 0) { + if (prefix.isEmpty()) { return propertyName; } diff --git a/core/src/test/groovy/io/micronaut/core/naming/NameUtilsSpec.groovy b/core/src/test/groovy/io/micronaut/core/naming/NameUtilsSpec.groovy index 5941c2228c9..26e03fa0a0e 100644 --- a/core/src/test/groovy/io/micronaut/core/naming/NameUtilsSpec.groovy +++ b/core/src/test/groovy/io/micronaut/core/naming/NameUtilsSpec.groovy @@ -244,6 +244,8 @@ class NameUtilsSpec extends Specification { "getFoo" | true "getfoo" | false "a" | false + "get_foo" | true + 'get$foo' | true } @Unroll