This is an automated email from the ASF dual-hosted git repository.
chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-fury.git
The following commit(s) were added to refs/heads/main by this push:
new 98975744 refactor(java): replace Guava's string utility methods with
own implementation (#1624)
98975744 is described below
commit 9897574487d8cf968b84b8b6ede4598125fc99f4
Author: Nikita Ivchenko <[email protected]>
AuthorDate: Mon May 13 13:35:33 2024 +0300
refactor(java): replace Guava's string utility methods with own
implementation (#1624)
## What does this PR do?
<!-- Describe the purpose of this PR. -->
## Related issues
<!--
Is there any related issue? Please attach here.
- #xxxx0
- #xxxx1
- #xxxx2
-->
#1113
## Does this PR introduce any user-facing change?
<!--
If any user-facing interface changes, please [open an
issue](https://github.com/apache/incubator-fury/issues/new/choose)
describing the need to do so and update the document if necessary.
-->
- [ ] Does this PR introduce any public API change?
- [ ] Does this PR introduce any binary protocol compatibility change?
---
.../java/org/apache/fury/util/StringUtils.java | 61 +++++++++++++++++++++-
.../java/org/apache/fury/util/StringUtilsTest.java | 25 +++++++++
.../fury/format/encoder/RowEncoderBuilder.java | 3 +-
.../org/apache/fury/format/type/TypeInference.java | 6 +--
4 files changed, 87 insertions(+), 8 deletions(-)
diff --git a/java/fury-core/src/main/java/org/apache/fury/util/StringUtils.java
b/java/fury-core/src/main/java/org/apache/fury/util/StringUtils.java
index 26031448..338073fc 100644
--- a/java/fury-core/src/main/java/org/apache/fury/util/StringUtils.java
+++ b/java/fury-core/src/main/java/org/apache/fury/util/StringUtils.java
@@ -19,16 +19,22 @@
package org.apache.fury.util;
-import com.google.common.io.BaseEncoding;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class StringUtils {
+ private static final char[] BASE16_CHARS2 = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e',
'f'
+ };
/** Converts a bytes array into a hexadecimal string. */
public static String encodeHexString(final byte[] data) {
- return BaseEncoding.base16().lowerCase().encode(data);
+ StringBuilder result = new StringBuilder(data.length * 2);
+ for (byte b : data) {
+ result.append(BASE16_CHARS2[(b >>> 4) & 0xF]).append(BASE16_CHARS2[b &
0xF]);
+ }
+ return result.toString();
}
/** Format a string template by replacing all `${xxx}` into provided values.
*/
@@ -192,4 +198,55 @@ public class StringUtils {
}
return builder.toString();
}
+
+ // example: "variable_name" -> "variableName"
+ public static String lowerUnderscoreToLowerCamelCase(String lowerUnderscore)
{
+ StringBuilder builder = new StringBuilder();
+ int length = lowerUnderscore.length();
+
+ int index;
+ int fromIndex = 0;
+ while ((index = lowerUnderscore.indexOf('_', fromIndex)) != -1) {
+ builder.append(lowerUnderscore, fromIndex, index);
+
+ if (length >= index + 1) {
+ char symbol = lowerUnderscore.charAt(index + 1);
+ if (symbol >= 'a' && symbol <= 'z') {
+ builder.append(Character.toUpperCase(symbol));
+ fromIndex = index + 2;
+ continue;
+ }
+ }
+
+ fromIndex = index + 1;
+ }
+
+ if (fromIndex < length) {
+ builder.append(lowerUnderscore, fromIndex, length);
+ }
+
+ return builder.toString();
+ }
+
+ // example: "variableName" -> "variable_name"
+ public static String lowerCamelToLowerUnderscore(String lowerCamel) {
+ StringBuilder builder = new StringBuilder();
+ int length = lowerCamel.length();
+
+ int fromIndex = 0;
+
+ for (int i = 0; i < length; i++) {
+ char symbol = lowerCamel.charAt(i);
+ if (symbol >= 'A' && symbol <= 'Z') {
+ builder.append(lowerCamel, fromIndex,
i).append('_').append(Character.toLowerCase(symbol));
+ fromIndex = i + 1;
+ }
+ }
+
+ if (fromIndex < length) {
+ builder.append(lowerCamel, fromIndex, length);
+ }
+
+ return builder.toString();
+ }
}
diff --git
a/java/fury-core/src/test/java/org/apache/fury/util/StringUtilsTest.java
b/java/fury-core/src/test/java/org/apache/fury/util/StringUtilsTest.java
index 440522f1..dea41788 100644
--- a/java/fury-core/src/test/java/org/apache/fury/util/StringUtilsTest.java
+++ b/java/fury-core/src/test/java/org/apache/fury/util/StringUtilsTest.java
@@ -62,4 +62,29 @@ public class StringUtilsTest {
assertTrue(StringUtils.isBlank(" "));
assertTrue(StringUtils.isBlank(null));
}
+
+ @Test
+ public void testLowerUnderscoreToLowerCamelCase() {
+ assertEquals(StringUtils.lowerUnderscoreToLowerCamelCase("some_variable"),
"someVariable");
+ assertEquals(
+ StringUtils.lowerUnderscoreToLowerCamelCase("some_long_variable"),
"someLongVariable");
+ assertEquals(
+ StringUtils.lowerUnderscoreToLowerCamelCase("some_123variable"),
"some123variable");
+ assertEquals(
+ StringUtils.lowerUnderscoreToLowerCamelCase("some_variable123"),
"someVariable123");
+ assertEquals(
+ StringUtils.lowerUnderscoreToLowerCamelCase("some_variable123"),
"someVariable123");
+ assertEquals(
+ StringUtils.lowerUnderscoreToLowerCamelCase("some_123_variable"),
"some123Variable");
+ assertEquals(
+ StringUtils.lowerUnderscoreToLowerCamelCase("some_variable_123"),
"someVariable123");
+ }
+
+ @Test
+ public void testLowerCamelToLowerUnderscore() {
+ assertEquals(StringUtils.lowerCamelToLowerUnderscore("someVariable"),
"some_variable");
+ assertEquals(StringUtils.lowerCamelToLowerUnderscore("someLongVariable"),
"some_long_variable");
+ assertEquals(StringUtils.lowerCamelToLowerUnderscore("some123variable"),
"some123variable");
+ assertEquals(StringUtils.lowerCamelToLowerUnderscore("someVariable123"),
"some_variable123");
+ }
}
diff --git
a/java/fury-format/src/main/java/org/apache/fury/format/encoder/RowEncoderBuilder.java
b/java/fury-format/src/main/java/org/apache/fury/format/encoder/RowEncoderBuilder.java
index 6c71e00f..705a830b 100644
---
a/java/fury-format/src/main/java/org/apache/fury/format/encoder/RowEncoderBuilder.java
+++
b/java/fury-format/src/main/java/org/apache/fury/format/encoder/RowEncoderBuilder.java
@@ -22,7 +22,6 @@ package org.apache.fury.format.encoder;
import static org.apache.fury.type.TypeUtils.CLASS_TYPE;
import static org.apache.fury.type.TypeUtils.getRawType;
-import com.google.common.base.CaseFormat;
import java.lang.reflect.Modifier;
import java.util.SortedMap;
import org.apache.arrow.vector.types.pojo.Field;
@@ -218,7 +217,7 @@ public class RowEncoderBuilder extends
BaseBinaryEncoderBuilder {
}
private Descriptor getDescriptorByFieldName(String fieldName) {
- String name = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,
fieldName);
+ String name = StringUtils.lowerUnderscoreToLowerCamelCase(fieldName);
return descriptorsMap.get(name);
}
diff --git
a/java/fury-format/src/main/java/org/apache/fury/format/type/TypeInference.java
b/java/fury-format/src/main/java/org/apache/fury/format/type/TypeInference.java
index 067d20bb..c4e2e104 100644
---
a/java/fury-format/src/main/java/org/apache/fury/format/type/TypeInference.java
+++
b/java/fury-format/src/main/java/org/apache/fury/format/type/TypeInference.java
@@ -22,7 +22,6 @@ package org.apache.fury.format.type;
import static org.apache.fury.format.type.DataTypes.field;
import static org.apache.fury.type.TypeUtils.getRawType;
-import com.google.common.base.CaseFormat;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
@@ -43,6 +42,7 @@ import org.apache.fury.type.Descriptor;
import org.apache.fury.type.TypeUtils;
import org.apache.fury.util.DecimalUtils;
import org.apache.fury.util.Preconditions;
+import org.apache.fury.util.StringUtils;
/** Arrow related type inference. */
@SuppressWarnings("UnstableApiUsage")
@@ -226,9 +226,7 @@ public class TypeInference {
descriptor -> {
LinkedHashSet<Class<?>> newSeenTypeSet = new
LinkedHashSet<>(seenTypeSet);
newSeenTypeSet.add(rawType);
- String n =
- CaseFormat.LOWER_CAMEL.to(
- CaseFormat.LOWER_UNDERSCORE, descriptor.getName());
+ String n =
StringUtils.lowerCamelToLowerUnderscore(descriptor.getName());
return inferField(n, descriptor.getTypeRef(),
newSeenTypeSet);
})
.collect(Collectors.toList());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]