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]

Reply via email to