Skip to content
This repository has been archived by the owner on Jun 28, 2022. It is now read-only.

Commit

Permalink
fix: Make java lowerCamel methos naming match protobuf java stubs out…
Browse files Browse the repository at this point in the history
…put methods naming. (#3265)

Specifically, before this fix, for a field named `one_two3four` protobuf was generating java method named `setOneTwo3Four()`, while gapic generator was assuming it to be `setOneTwo3four()`.

This change is applied in the most limited scope (only for java methods naming, because this logic is applied only for methods  naming in protobuf). This should be a relatively safe change because protobuf in general does not let fields to differ only by the underscore characters `_`. I.e. one message cannot have two fields one named `one_two` and the other one `onetwo` or `oneTwo`. This restriction greatly reduces number of possible `snake_case` `camelCase` conversion combinations.
  • Loading branch information
vam-google committed Aug 7, 2020
1 parent 1485371 commit 4d1eef9
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
10 changes: 9 additions & 1 deletion src/main/java/com/google/api/codegen/util/Name.java
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,15 @@ public String toUpperCamel() {
}

public String toUpperCamelAndDigits() {
char[] upper = toUpperCamel().toCharArray();
return capitalizeDigitsAfterNumbers(toUpperCamel());
}

public String toLowerCamelAndDigits() {
return capitalizeDigitsAfterNumbers(toLowerCamel());
}

private String capitalizeDigitsAfterNumbers(String camelCaseIdentifier) {
char[] upper = camelCaseIdentifier.toCharArray();
boolean digit = false;
for (int i = 0; i < upper.length; i++) {
if (Character.isDigit(upper[i])) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public String localVarReference(Name name) {

@Override
public String publicMethodName(Name name) {
return wrapIfKeywordOrBuiltIn(name.toLowerCamel());
return wrapIfKeywordOrBuiltIn(name.toLowerCamelAndDigits());
}

@Override
Expand Down
21 changes: 21 additions & 0 deletions src/test/java/com/google/api/codegen/util/NameTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public void testEmpty() {
assertThat(name.toUpperUnderscore()).isEqualTo("");
assertThat(name.toLowerCamel()).isEqualTo("");
assertThat(name.toUpperCamel()).isEqualTo("");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("");
}

@Test
Expand All @@ -36,6 +37,7 @@ public void testSingleWord() {
assertThat(name.toUpperUnderscore()).isEqualTo("DOG");
assertThat(name.toLowerCamel()).isEqualTo("dog");
assertThat(name.toUpperCamel()).isEqualTo("Dog");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("dog");
}

@Test
Expand All @@ -45,6 +47,7 @@ public void testMultipleWords() {
assertThat(name.toUpperUnderscore()).isEqualTo("FACTORY_DECORATOR_DELEGATE_IMPL");
assertThat(name.toLowerCamel()).isEqualTo("factoryDecoratorDelegateImpl");
assertThat(name.toUpperCamel()).isEqualTo("FactoryDecoratorDelegateImpl");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("factoryDecoratorDelegateImpl");
}

@Test
Expand All @@ -54,6 +57,7 @@ public void testFromLowerCamel() {
assertThat(name.toUpperUnderscore()).isEqualTo("FACTORY_DECORATOR_DELEGATE_IMPL");
assertThat(name.toLowerCamel()).isEqualTo("factoryDecoratorDelegateImpl");
assertThat(name.toUpperCamel()).isEqualTo("FactoryDecoratorDelegateImpl");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("factoryDecoratorDelegateImpl");
}

@Test
Expand All @@ -63,6 +67,7 @@ public void testFromUpperCamel() {
assertThat(name.toUpperUnderscore()).isEqualTo("FACTORY_DECORATOR_DELEGATE_IMPL");
assertThat(name.toLowerCamel()).isEqualTo("factoryDecoratorDelegateImpl");
assertThat(name.toUpperCamel()).isEqualTo("FactoryDecoratorDelegateImpl");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("factoryDecoratorDelegateImpl");
}

@Test
Expand All @@ -72,6 +77,7 @@ public void testWordAndNumber() {
assertThat(name.toUpperUnderscore()).isEqualTo("DOG_2");
assertThat(name.toLowerCamel()).isEqualTo("dog2");
assertThat(name.toUpperCamel()).isEqualTo("Dog2");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("dog2");
}

@Test
Expand All @@ -83,13 +89,24 @@ public void testUpperWordAndNumber() {
assertThat(name.toUpperCamel()).isEqualTo("DogV2");
}

@Test
public void testUpperWordAndNumberWithCharacter() {
Name name = Name.upperCamel("Dog", "V2cc");
assertThat(name.toLowerUnderscore()).isEqualTo("dog_v2cc");
assertThat(name.toUpperUnderscore()).isEqualTo("DOG_V2CC");
assertThat(name.toLowerCamel()).isEqualTo("dogV2cc");
assertThat(name.toUpperCamel()).isEqualTo("DogV2cc");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("dogV2Cc");
}

@Test
public void testLowerWordAndNumber() {
Name name = Name.lowerCamel("dog", "v2");
assertThat(name.toLowerUnderscore()).isEqualTo("dog_v2");
assertThat(name.toUpperUnderscore()).isEqualTo("DOG_V2");
assertThat(name.toLowerCamel()).isEqualTo("dogV2");
assertThat(name.toUpperCamel()).isEqualTo("DogV2");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("dogV2");
}

@Test(expected = IllegalArgumentException.class)
Expand Down Expand Up @@ -119,6 +136,7 @@ public void separateAcronyms() {
assertThat(name.toUpperUnderscore()).isEqualTo("IAM_HTTP_XML_DOG");
assertThat(name.toLowerCamel()).isEqualTo("iamHttpXmlDog");
assertThat(name.toUpperCamel()).isEqualTo("IamHttpXmlDog");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("iamHttpXmlDog");
}

@Test
Expand All @@ -128,6 +146,7 @@ public void combinedAcronyms() {
assertThat(name.toUpperUnderscore()).isEqualTo("IAM_HTTP_XML");
assertThat(name.toLowerCamel()).isEqualTo("iamHttpXml");
assertThat(name.toUpperCamel()).isEqualTo("IamHttpXml");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("iamHttpXml");
}

@Test(expected = IllegalArgumentException.class)
Expand All @@ -147,6 +166,7 @@ public void upperCamelUpperAcronymsSeparate() {
assertThat(name.toUpperUnderscore()).isEqualTo("IAM_HTTP_XML_DOG");
assertThat(name.toLowerCamel()).isEqualTo("iamHTTPXMLDog");
assertThat(name.toUpperCamel()).isEqualTo("IAMHTTPXMLDog");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("iamHTTPXMLDog");
}

@Test
Expand All @@ -156,5 +176,6 @@ public void upperCamelUpperAcronymsCombined() {
assertThat(name.toUpperUnderscore()).isEqualTo("IAM_HTTP_XML");
assertThat(name.toLowerCamel()).isEqualTo("iamHTTPXML");
assertThat(name.toUpperCamel()).isEqualTo("IAMHTTPXML");
assertThat(name.toLowerCamelAndDigits()).isEqualTo("iamHTTPXML");
}
}

0 comments on commit 4d1eef9

Please sign in to comment.