Skip to content

Commit 405fa87

Browse files
committed
[Java] Extract Generators class.
1 parent bc57b61 commit 405fa87

File tree

5 files changed

+89
-66
lines changed

5 files changed

+89
-66
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* Copyright 2016 Real Logic Ltd.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package uk.co.real_logic.sbe.generation;
17+
18+
import uk.co.real_logic.sbe.ir.Signal;
19+
import uk.co.real_logic.sbe.ir.Token;
20+
21+
import java.util.List;
22+
import java.util.function.BiConsumer;
23+
24+
public class Generators
25+
{
26+
/**
27+
* For each field found in a list of field {@link Token}s take the field token and following type token to
28+
* a {@link BiConsumer}.
29+
*
30+
* @param tokens to be iterated over.
31+
* @param consumer to for the field and encoding token pair.
32+
*/
33+
public static void forEachField(final List<Token> tokens, final BiConsumer<Token, Token> consumer)
34+
{
35+
for (int i = 0, size = tokens.size(); i < size;)
36+
{
37+
final Token fieldToken = tokens.get(i);
38+
if (fieldToken.signal() == Signal.BEGIN_FIELD)
39+
{
40+
final Token typeToken = tokens.get(i + 1);
41+
consumer.accept(fieldToken, typeToken);
42+
i += fieldToken.componentTokenCount();
43+
}
44+
else
45+
{
46+
++i;
47+
}
48+
}
49+
}
50+
51+
/**
52+
* Uppercase the first character of a given String.
53+
*
54+
* @param s to have the first character upper cased.
55+
* @return a new String with the first character in uppercase.
56+
*/
57+
public static String toUpperFirstChar(final String s)
58+
{
59+
return Character.toUpperCase(s.charAt(0)) + s.substring(1);
60+
}
61+
62+
/**
63+
* Lowercase the first character of a given String.
64+
*
65+
* @param s to have the first character upper cased.
66+
* @return a new String with the first character in uppercase.
67+
*/
68+
public static String toLowerFirstChar(final String s)
69+
{
70+
return Character.toLowerCase(s.charAt(0)) + s.substring(1);
71+
}
72+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import java.util.ArrayList;
2121
import java.util.List;
2222

23-
import static uk.co.real_logic.sbe.generation.java.JavaUtil.forEachField;
23+
import static uk.co.real_logic.sbe.generation.Generators.forEachField;
2424

2525
public class NamedToken
2626
{

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.agrona.generation.OutputManager;
2222
import uk.co.real_logic.sbe.PrimitiveType;
2323
import uk.co.real_logic.sbe.generation.CodeGenerator;
24+
import uk.co.real_logic.sbe.generation.Generators;
2425
import uk.co.real_logic.sbe.ir.*;
2526

2627
import java.io.IOException;
@@ -652,7 +653,7 @@ private CharSequence generateDecoderVarData(final List<Token> tokens, final Stri
652653
generateCharacterEncodingMethod(sb, token.name(), characterEncoding, indent);
653654
generateFieldMetaAttributeMethod(sb, token, indent);
654655

655-
final String propertyName = toUpperFirstChar(token.name());
656+
final String propertyName = Generators.toUpperFirstChar(token.name());
656657
final Token lengthToken = tokens.get(i + 2);
657658
final int sizeOfLengthField = lengthToken.encodedLength();
658659
final Encoding lengthEncoding = lengthToken.encoding();
@@ -665,7 +666,7 @@ private CharSequence generateDecoderVarData(final List<Token> tokens, final Stri
665666
indent + " {\n" +
666667
indent + " return %d;\n" +
667668
indent + " }\n",
668-
toLowerFirstChar(propertyName),
669+
Generators.toLowerFirstChar(propertyName),
669670
sizeOfLengthField));
670671

671672
sb.append(String.format(
@@ -676,7 +677,7 @@ private CharSequence generateDecoderVarData(final List<Token> tokens, final Stri
676677
indent + " final int limit = parentMessage.limit();\n" +
677678
indent + " return (int)%s;\n" +
678679
indent + " }\n",
679-
toLowerFirstChar(propertyName),
680+
Generators.toLowerFirstChar(propertyName),
680681
generateArrayFieldNotPresentCondition(token.version(), indent),
681682
generateGet(lengthType, "limit", byteOrderStr)));
682683

@@ -706,7 +707,7 @@ private CharSequence generateEncoderVarData(final String className, final List<T
706707
generateCharacterEncodingMethod(sb, token.name(), characterEncoding, indent);
707708
generateFieldMetaAttributeMethod(sb, token, indent);
708709

709-
final String propertyName = toUpperFirstChar(token.name());
710+
final String propertyName = Generators.toUpperFirstChar(token.name());
710711
final Token lengthToken = tokens.get(i + 2);
711712
final int sizeOfLengthField = lengthToken.encodedLength();
712713
final Encoding lengthEncoding = lengthToken.encoding();
@@ -719,7 +720,7 @@ private CharSequence generateEncoderVarData(final String className, final List<T
719720
indent + " {\n" +
720721
indent + " return %d;\n" +
721722
indent + " }\n",
722-
toLowerFirstChar(propertyName),
723+
Generators.toLowerFirstChar(propertyName),
723724
sizeOfLengthField));
724725

725726
generateDataEncodeMethods(
@@ -1706,7 +1707,7 @@ private CharSequence generatePrimitiveArrayPropertyDecode(
17061707
indent + " buffer.getBytes(this.offset + %d, dst, dstOffset, length);\n\n" +
17071708
indent + " return length;\n" +
17081709
indent + " }\n",
1709-
toUpperFirstChar(propertyName),
1710+
Generators.toUpperFirstChar(propertyName),
17101711
fieldLength,
17111712
generateArrayFieldNotPresentCondition(token.version(), indent),
17121713
offset));
@@ -1815,7 +1816,7 @@ private void generateCharArrayEncodeMethods(
18151816
indent + " return this;\n" +
18161817
indent + " }\n",
18171818
formatClassName(containingClassName),
1818-
toUpperFirstChar(propertyName),
1819+
Generators.toUpperFirstChar(propertyName),
18191820
fieldLength,
18201821
offset));
18211822

@@ -1942,7 +1943,7 @@ private CharSequence generateConstPropertyMethods(
19421943
indent + " System.arraycopy(%s_VALUE, 0, dst, offset, bytesCopied);\n\n" +
19431944
indent + " return bytesCopied;\n" +
19441945
indent + " }\n",
1945-
toUpperFirstChar(propertyName),
1946+
Generators.toUpperFirstChar(propertyName),
19461947
constBytes.length,
19471948
propertyName.toUpperCase()));
19481949

@@ -2190,7 +2191,7 @@ private CharSequence generateEncoderFields(
21902191
{
21912192
final StringBuilder sb = new StringBuilder();
21922193

2193-
forEachField(
2194+
Generators.forEachField(
21942195
tokens,
21952196
(fieldToken, typeToken) ->
21962197
{
@@ -2227,7 +2228,7 @@ private CharSequence generateDecoderFields(final List<Token> tokens, final Strin
22272228
{
22282229
final StringBuilder sb = new StringBuilder();
22292230

2230-
forEachField(
2231+
Generators.forEachField(
22312232
tokens,
22322233
(fieldToken, typeToken) ->
22332234
{

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

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,15 @@
1717

1818
import uk.co.real_logic.sbe.PrimitiveType;
1919
import uk.co.real_logic.sbe.SbeTool;
20-
import uk.co.real_logic.sbe.ir.Signal;
21-
import uk.co.real_logic.sbe.ir.Token;
20+
import uk.co.real_logic.sbe.generation.Generators;
2221
import uk.co.real_logic.sbe.util.ValidationUtil;
2322

2423
import java.lang.reflect.Field;
2524
import java.nio.charset.Charset;
2625
import java.nio.charset.StandardCharsets;
2726
import java.util.EnumMap;
2827
import java.util.HashMap;
29-
import java.util.List;
3028
import java.util.Map;
31-
import java.util.function.BiConsumer;
3229

3330
import static java.lang.reflect.Modifier.STATIC;
3431

@@ -131,28 +128,6 @@ public static String javaTypeName(final PrimitiveType primitiveType)
131128
return TYPE_NAME_BY_PRIMITIVE_TYPE_MAP.get(primitiveType);
132129
}
133130

134-
/**
135-
* Uppercase the first character of a given String.
136-
*
137-
* @param s to have the first character upper cased.
138-
* @return a new String with the first character in uppercase.
139-
*/
140-
public static String toUpperFirstChar(final String s)
141-
{
142-
return Character.toUpperCase(s.charAt(0)) + s.substring(1);
143-
}
144-
145-
/**
146-
* Lowercase the first character of a given String.
147-
*
148-
* @param s to have the first character upper cased.
149-
* @return a new String with the first character in uppercase.
150-
*/
151-
public static String toLowerFirstChar(final String s)
152-
{
153-
return Character.toLowerCase(s.charAt(0)) + s.substring(1);
154-
}
155-
156131
/**
157132
* Format a property name for generated code.
158133
* <p>
@@ -164,7 +139,7 @@ public static String toLowerFirstChar(final String s)
164139
*/
165140
public static String formatPropertyName(final String value)
166141
{
167-
String formattedValue = toLowerFirstChar(value);
142+
String formattedValue = Generators.toLowerFirstChar(value);
168143

169144
if (ValidationUtil.isJavaKeyword(formattedValue))
170145
{
@@ -190,7 +165,7 @@ public static String formatPropertyName(final String value)
190165
*/
191166
public static String formatClassName(final String value)
192167
{
193-
return toUpperFirstChar(value);
168+
return Generators.toUpperFirstChar(value);
194169
}
195170

196171

@@ -274,29 +249,4 @@ public static String generateLiteral(final PrimitiveType type, final String valu
274249

275250
return literal;
276251
}
277-
278-
/**
279-
* For each field found in a list of field {@link Token}s take the field token and following type token to
280-
* a {@link BiConsumer}.
281-
*
282-
* @param tokens to be iterated over.
283-
* @param consumer to for the field and encoding token pair.
284-
*/
285-
public static void forEachField(final List<Token> tokens, final BiConsumer<Token, Token> consumer)
286-
{
287-
for (int i = 0, size = tokens.size(); i < size;)
288-
{
289-
final Token fieldToken = tokens.get(i);
290-
if (fieldToken.signal() == Signal.BEGIN_FIELD)
291-
{
292-
final Token typeToken = tokens.get(i + 1);
293-
consumer.accept(fieldToken, typeToken);
294-
i += fieldToken.componentTokenCount();
295-
}
296-
else
297-
{
298-
++i;
299-
}
300-
}
301-
}
302252
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import java.util.*;
99

1010
import static java.lang.String.format;
11-
import static uk.co.real_logic.sbe.generation.java.JavaUtil.toLowerFirstChar;
12-
import static uk.co.real_logic.sbe.generation.java.JavaUtil.toUpperFirstChar;
11+
import static uk.co.real_logic.sbe.generation.Generators.toLowerFirstChar;
12+
import static uk.co.real_logic.sbe.generation.Generators.toUpperFirstChar;
1313

1414
public class RustUtil
1515
{

0 commit comments

Comments
 (0)