Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions code-generator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,6 @@
<artifactId>slf4j-api</artifactId>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>

<dependency>
<groupId>org.jboss.forge.roaster</groupId>
<artifactId>roaster-api</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
*/
package io.streamnative.lightproto.generator;

import com.google.common.base.Joiner;
import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.slf4j.Logger;
Expand Down Expand Up @@ -79,7 +78,7 @@ public static List<File> generate(List<ProtoFileDescriptor> descriptors, File ou
String outerClassName = Util.camelCaseFirstUpper(classPrefix, fileWithoutExtension);

String javaPackageName = proto.getJavaPackageName();
String javaDir = Joiner.on('/').join(javaPackageName.split("\\."));
String javaDir = String.join("/", javaPackageName.split("\\."));
Path targetDir = Paths.get(String.format("%s/%s", outputDirectory, javaDir));

LightProto lightProto = new LightProto(proto, fileName, outerClassName, useOuterClass, generateTextFormat, generateJson);
Expand All @@ -94,7 +93,7 @@ public static List<File> generate(List<ProtoFileDescriptor> descriptors, File ou
JavaClassSource codecClass = (JavaClassSource) Roaster.parse(is);
codecClass.setPackage(javaPackage);

String javaDir = Joiner.on('/').join(javaPackage.split("\\."));
String javaDir = String.join("/", javaPackage.split("\\."));
Path codecFile = Paths.get(String.format("%s/%s/LightProtoCodec.java", outputDirectory, javaDir));
try (Writer w = Files.newBufferedWriter(codecFile)) {
w.write(String.format(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,16 @@
*/
package io.streamnative.lightproto.generator;

import com.google.common.collect.Maps;

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import static io.streamnative.lightproto.generator.Util.camelCase;

public class LightProtoNumberField extends LightProtoField {


private static final Map<String, String> typeToTag = Maps.newHashMap();
private static final Map<String, String> typeToTag = new HashMap<>();

static {
typeToTag.put("double", "LightProtoCodec.WIRETYPE_FIXED64");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@

import java.io.PrintWriter;

import static com.google.common.base.CaseFormat.LOWER_CAMEL;
import static com.google.common.base.CaseFormat.LOWER_UNDERSCORE;

public class Util {

public static String camelCase(String... parts) {
Expand All @@ -30,7 +27,7 @@ public static String camelCase(String... parts) {
continue;
}
if (s.contains("_")) {
s = LOWER_UNDERSCORE.to(LOWER_CAMEL, s);
s = lowerUnderscoreToLowerCamel(s);
}

if (i != 0) {
Expand All @@ -52,7 +49,7 @@ public static String camelCaseFirstUpper(String... parts) {
public static String upperCase(String... parts) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < parts.length; i++) {
String s = LOWER_CAMEL.to(LOWER_UNDERSCORE, parts[i]);
String s = lowerCamelToLowerUnderscore(parts[i]);
if (i != 0) {
sb.append('_');
}
Expand All @@ -63,6 +60,48 @@ public static String upperCase(String... parts) {
return sb.toString().toUpperCase();
}

// Mirrors Guava's CaseFormat.LOWER_UNDERSCORE.to(LOWER_CAMEL, s):
// splits on '_', lowercases everything, capitalizes the first char of
// each non-leading segment.
static String lowerUnderscoreToLowerCamel(String s) {
if (s.indexOf('_') < 0) {
return s;
}
StringBuilder sb = new StringBuilder(s.length());
boolean upperNext = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '_') {
upperNext = true;
} else if (upperNext) {
sb.append(Character.toUpperCase(c));
upperNext = false;
} else {
sb.append(Character.toLowerCase(c));
}
}
return sb.toString();
}

// Mirrors Guava's CaseFormat.LOWER_CAMEL.to(LOWER_UNDERSCORE, s):
// inserts '_' before every uppercase letter (except a leading one) and
// lowercases all letters.
static String lowerCamelToLowerUnderscore(String s) {
StringBuilder sb = new StringBuilder(s.length() + 4);
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isUpperCase(c)) {
if (i > 0) {
sb.append('_');
}
sb.append(Character.toLowerCase(c));
} else {
sb.append(c);
}
}
return sb.toString();
}

// pluralize/singular rules vendored from JiBX NameUtilities
// (Copyright (c) 2008-2010, Dennis M. Sosnoski, BSD 3-clause license).
public static String plural(String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,55 @@ void pluralizes(String input, String expected) {
assertEquals(expected, Util.plural(input));
}

@ParameterizedTest
@CsvSource({
// typical snake_case
"first_name, firstName",
"user_id, userId",
"foo_bar_baz, fooBarBaz",
"snake_case_name, snakeCaseName",
// no underscore: returned as-is (does NOT lowercase)
"foo, foo",
"MyService, MyService",
// numerics
"abc_123, abc123",
// double underscore
"foo__bar, fooBar",
// leading underscore capitalizes the next char
"_leading, Leading",
"_msgSize, Msgsize",
// trailing underscore is dropped
"trailing_, trailing",
// embedded uppercase is normalized to lowercase (matches Guava)
"ALL_CAPS, allCaps",
"Foo_Bar, fooBar",
"FOO_BAR_BAZ, fooBarBaz",
})
void snakeToCamel(String input, String expected) {
assertEquals(expected, Util.lowerUnderscoreToLowerCamel(input));
}

@ParameterizedTest
@CsvSource({
// typical camelCase
"fooBar, foo_bar",
"fooBarBaz, foo_bar_baz",
"myService, my_service",
// leading uppercase: lowercased without leading underscore
"MyService, my_service",
"X, x",
// no uppercase: unchanged
"foo, foo",
"first_name, first_name",
// numerics
"abc123, abc123",
// already snake-ish stays put
"foo_bar_baz, foo_bar_baz",
})
void camelToSnake(String input, String expected) {
assertEquals(expected, Util.lowerCamelToLowerUnderscore(input));
}

@ParameterizedTest
@CsvSource({
// ends with 'ies': replace with 'y'
Expand Down
6 changes: 0 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@

<slf4j.version>1.7.25</slf4j.version>
<junit.version>5.7.0</junit.version>
<guava.version>32.0.0-jre</guava.version>
<netty.version>4.1.131.Final</netty.version>
<roaster.version>2.22.2.Final</roaster.version>
<grpc.version>1.68.0</grpc.version>
Expand Down Expand Up @@ -158,11 +157,6 @@
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-bom</artifactId>
Expand Down
Loading