diff --git a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamer.java b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamer.java index 060ddea7165..b97f4296944 100644 --- a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamer.java +++ b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamer.java @@ -94,6 +94,15 @@ public static String getEnumMemberName(String name) { return name; } + // Special handling for inputs that start with special characters followed by numbers + if (name.length() > 1 && !Character.isLetterOrDigit(name.charAt(0)) && Character.isDigit(name.charAt(1))) { + // Convert the first character to its word form + String firstCharReplacement = getBasicLatinCharacter(name.charAt(0)); + if (firstCharReplacement != null) { + name = firstCharReplacement + "_" + name.substring(1); + } + } + // trim leading and trailing '_' if ((name.startsWith("_") || name.endsWith("_")) && !name.chars().allMatch(c -> c == '_')) { StringBuilder sb = new StringBuilder(name); diff --git a/packages/http-client-java/generator/http-client-generator-core/src/test/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamerTests.java b/packages/http-client-java/generator/http-client-generator-core/src/test/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamerTests.java index 705b42c36e0..4d51c183364 100644 --- a/packages/http-client-java/generator/http-client-generator-core/src/test/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamerTests.java +++ b/packages/http-client-java/generator/http-client-generator-core/src/test/java/com/microsoft/typespec/http/client/generator/core/util/CodeNamerTests.java @@ -32,6 +32,12 @@ public void testEnumMemberName() { Assertions.assertEquals("ONE_ZEROMINUTELY", CodeNamer.getEnumMemberName("_10minutely")); + Assertions.assertEquals("DOLLAR_SIGN_100_GIFT_CARD", CodeNamer.getEnumMemberName("$100 Gift Card")); + + Assertions.assertEquals("PERCENT_SIGN_50_OFF", CodeNamer.getEnumMemberName("%50 Off")); + + Assertions.assertEquals("NUMBER_SIGN_10_TRENDING", CodeNamer.getEnumMemberName("#10 Trending")); + Assertions.assertEquals("_", CodeNamer.getEnumMemberName("_")); } }