Skip to content

Commit a9f02d8

Browse files
committed
put group order information into class annotation
1 parent 3992411 commit a9f02d8

File tree

2 files changed

+54
-5
lines changed

2 files changed

+54
-5
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package uk.co.real_logic.sbe.codec.java;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
/**
9+
* Daneel Yaitskov
10+
*/
11+
@Retention(RetentionPolicy.RUNTIME)
12+
@Target({ElementType.TYPE})
13+
public @interface GroupOrder
14+
{
15+
Class[] value();
16+
}

main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,20 @@ public void generate() throws IOException
9999
try (final Writer out = outputManager.createOutput(className))
100100
{
101101
out.append(generateFileHeader(ir.applicableNamespace()));
102-
out.append(generateClassDeclaration(className));
103-
out.append(generateMessageFlyweightCode(className, msgToken));
104-
105102
final List<Token> messageBody = tokens.subList(1, tokens.size() - 1);
106103
int offset = 0;
107104

108105
final List<Token> rootFields = new ArrayList<>();
109106
offset = collectRootFields(messageBody, offset, rootFields);
110-
out.append(generateFields(className, rootFields, BASE_INDENT));
111-
112107
final List<Token> groups = new ArrayList<>();
113108
offset = collectGroups(messageBody, offset, groups);
109+
110+
generateAnnotations(className, groups, out);
111+
out.append(generateClassDeclaration(className));
112+
out.append(generateMessageFlyweightCode(className, msgToken));
113+
114+
out.append(generateFields(className, rootFields, BASE_INDENT));
115+
114116
final StringBuilder sb = new StringBuilder();
115117
generateGroups(sb, className, groups, 0, BASE_INDENT);
116118
out.append(sb);
@@ -662,6 +664,37 @@ private CharSequence generateEnumFileHeader(final String packageName)
662664
);
663665
}
664666

667+
private void generateAnnotations(String className, final List<Token> tokens, Writer out) throws IOException
668+
{
669+
int index = 0;
670+
final List<String> groupClassNames = new ArrayList<>();
671+
for (int size = tokens.size(); index < size; index++)
672+
{
673+
if (tokens.get(index).signal() == Signal.BEGIN_GROUP)
674+
{
675+
final Token groupToken = tokens.get(index);
676+
final String groupName = groupToken.name();
677+
groupClassNames.add(formatClassName(groupName));
678+
}
679+
}
680+
if (groupClassNames.isEmpty())
681+
{
682+
return;
683+
}
684+
out.append("@GroupOrder({");
685+
index = 0;
686+
for (String name : groupClassNames)
687+
{
688+
out.append(className).append('.').append(name).append(".class");
689+
if (++index < groupClassNames.size())
690+
{
691+
out.append(", ");
692+
}
693+
}
694+
695+
out.append("})\n");
696+
}
697+
665698
private CharSequence generateClassDeclaration(final String className)
666699
{
667700
return String.format(

0 commit comments

Comments
 (0)