Skip to content

Commit 206fde8

Browse files
committed
Remove Guava dependency by replicating minimal case format transformation
1 parent 6959f21 commit 206fde8

File tree

3 files changed

+65
-4
lines changed

3 files changed

+65
-4
lines changed

build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ def validationXsdPath = project(':sbe-tool').projectDir.toString() + '/src/main/
165165
project(':sbe-tool') {
166166
dependencies {
167167
compile 'org.agrona:agrona:0.9.6'
168-
compile 'com.google.guava:guava:21.0'
169168

170169
testCompile files('build/classes/java/generated')
171170
}

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustUtil.java

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package uk.co.real_logic.sbe.generation.rust;
22

3-
import com.google.common.base.CaseFormat;
43
import org.agrona.Verify;
54
import uk.co.real_logic.sbe.PrimitiveType;
65

@@ -96,8 +95,54 @@ static String formatMethodName(final String value)
9695
{
9796
return value;
9897
}
99-
final String fromUpper = toLowerFirstChar(value);
100-
return sanitizeMethodOrProperty(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, fromUpper));
98+
return sanitizeMethodOrProperty(toLowerUnderscoreFromCamel(value));
99+
}
100+
101+
// Adapted from Guava, Apache License Version 2.0
102+
private static String toLowerUnderscoreFromCamel(final String value)
103+
{
104+
if (value.isEmpty())
105+
{
106+
return value;
107+
}
108+
final String s = toLowerFirstChar(value);
109+
110+
// include some extra space for separators
111+
final StringBuilder out = new StringBuilder(s.length() + 4);
112+
int i = 0;
113+
int j = -1;
114+
while ((j = indexInUpperAlphaRange(s, ++j)) != -1)
115+
{
116+
final String word = s.substring(i, j).toLowerCase();
117+
out.append(word);
118+
if (!word.endsWith("_"))
119+
{
120+
out.append("_");
121+
}
122+
i = j;
123+
}
124+
return (i == 0)
125+
? s.toLowerCase()
126+
: out.append(s.substring(i).toLowerCase()).toString();
127+
}
128+
129+
// Adapted from Guava, Apache License Version 2.0
130+
private static int indexInUpperAlphaRange(final CharSequence sequence, final int start)
131+
{
132+
final int length = sequence.length();
133+
if (start < 0 || start > length)
134+
{
135+
throw new IndexOutOfBoundsException();
136+
}
137+
for (int i = start; i < length; i++)
138+
{
139+
final char c = sequence.charAt(i);
140+
if ('A' <= c && c <= 'Z')
141+
{
142+
return i;
143+
}
144+
}
145+
return -1;
101146
}
102147

103148
private static String sanitizeMethodOrProperty(final String name)

sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/rust/RustUtilTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import uk.co.real_logic.sbe.PrimitiveType;
55

66
import static org.junit.Assert.assertEquals;
7+
import static uk.co.real_logic.sbe.generation.rust.RustUtil.formatMethodName;
78
import static uk.co.real_logic.sbe.generation.rust.RustUtil.generateRustLiteral;
89

910
public class RustUtilTest
@@ -63,4 +64,20 @@ public void generateRustLiteralNullValueParam()
6364
{
6465
generateRustLiteral(PrimitiveType.INT8, null);
6566
}
67+
68+
@Test
69+
public void methodNameCasing()
70+
{
71+
assertEquals("", formatMethodName(""));
72+
assertEquals("a", formatMethodName("a"));
73+
assertEquals("a", formatMethodName("A"));
74+
assertEquals("car", formatMethodName("Car"));
75+
assertEquals("car", formatMethodName("car"));
76+
assertEquals("decode_car", formatMethodName("DecodeCar"));
77+
assertEquals("decode_car", formatMethodName("decodeCar"));
78+
assertEquals("decode_car", formatMethodName("decode_car"));
79+
assertEquals("decode_car", formatMethodName("Decode_car"));
80+
assertEquals("decode_car", formatMethodName("decode_Car"));
81+
assertEquals("decode_car", formatMethodName("Decode_Car"));
82+
}
6683
}

0 commit comments

Comments
 (0)