You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fury.apache.org by ch...@apache.org on 2024/05/13 10:35:37 UTC
(incubator-fury) branch main updated: refactor(java): replace Guava's string utility methods with own implementation (#1624)
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 <mu...@gmail.com>
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: commits-unsubscribe@fury.apache.org
For additional commands, e-mail: commits-help@fury.apache.org