Skip to content

Commit 88451e7

Browse files
committed
Merge pull request aeron-io#350 from benalexau/interface-hierarchy
Optionally generate Java interface hierarchy.
2 parents 603276c + a5ecb2a commit 88451e7

23 files changed

+295
-107
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ project(':sbe-samples') {
326326
systemProperties(
327327
'sbe.output.dir': 'build/generated',
328328
'sbe.target.language': 'Java',
329+
'sbe.java.generate.interfaces': 'false',
329330
'sbe.validation.stop.on.error': 'true',
330331
'sbe.validation.xsd': validationXsdPath)
331332
args = ['src/main/resources/example-schema.xml', 'src/main/resources/example-extension-schema.xml']

sbe-tool/src/main/java/uk/co/real_logic/sbe/SbeTool.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
* <li><code>sbe.validation.suppress.output</code>: Should the parser suppress output during validation? Defaults to false.</li>
5050
* <li><code>sbe.generate.stubs</code>: Generate stubs or not. Defaults to true.</li>
5151
* <li><code>sbe.generate.ir</code>: Generate IR or not. Defaults to false.</li>
52+
* <li><code>sbe.java.generate.interfaces</code>: Generate interface hierarchy or not. Defaults to false.</li>
5253
* <li><code>sbe.target.language</code>: Target language for code generation, defaults to Java.</li>
5354
* <li><code>sbe.output.dir</code>: Target directory for code generation, defaults to current directory.</li>
5455
* </ul>
@@ -115,6 +116,15 @@ public class SbeTool
115116
*/
116117
public static final String JAVA_GROUP_ORDER_ANNOTATION = "sbe.java.generate.group-order.annotation";
117118

119+
/**
120+
* Boolean system property to turn on or off generation of the interface hierarchy. Defaults to false.
121+
*/
122+
public static final String JAVA_GENERATE_INTERFACES = "sbe.java.generate.interfaces";
123+
124+
/**
125+
* Package in which the generated Java interfaces will be placed.
126+
*/
127+
public static final String JAVA_INTERFACE_PACKAGE = "org.agrona.sbe";
118128
/**
119129
* Default class to use as the buffer mutable implementation in generated code.
120130
*/

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import uk.co.real_logic.sbe.ir.Ir;
2323

2424
import java.io.IOException;
25+
import org.agrona.generation.OutputManager;
2526

2627
import static uk.co.real_logic.sbe.SbeTool.*;
2728

@@ -34,12 +35,21 @@ public enum TargetCodeGenerator
3435
{
3536
public CodeGenerator newInstance(final Ir ir, final String outputDir) throws IOException
3637
{
38+
final OutputManager interfaceOutputManager;
39+
if (Boolean.getBoolean(JAVA_GENERATE_INTERFACES))
40+
{
41+
interfaceOutputManager = new PackageOutputManager(outputDir, JAVA_INTERFACE_PACKAGE);
42+
}
43+
else
44+
{
45+
interfaceOutputManager = null;
46+
}
3747
return new JavaGenerator(
3848
ir,
3949
System.getProperty(JAVA_ENCODING_BUFFER_TYPE, JAVA_DEFAULT_ENCODING_BUFFER_TYPE),
4050
System.getProperty(JAVA_DECODING_BUFFER_TYPE, JAVA_DEFAULT_DECODING_BUFFER_TYPE),
4151
Boolean.getBoolean(JAVA_GROUP_ORDER_ANNOTATION),
42-
new PackageOutputManager(outputDir, ir.applicableNamespace()));
52+
new PackageOutputManager(outputDir, ir.applicableNamespace()), interfaceOutputManager);
4353
}
4454
},
4555

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

Lines changed: 142 additions & 44 deletions
Large diffs are not rendered by default.

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/FrameCodecDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
@javax.annotation.Generated(value = {"uk.co.real_logic.sbe.ir.generated.FrameCodecDecoder"})
88
@SuppressWarnings("all")
9-
public class FrameCodecDecoder implements MessageDecoder
9+
public class FrameCodecDecoder
1010
{
1111
public static final int BLOCK_LENGTH = 12;
1212
public static final int TEMPLATE_ID = 1;

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/FrameCodecEncoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
@javax.annotation.Generated(value = {"uk.co.real_logic.sbe.ir.generated.FrameCodecEncoder"})
88
@SuppressWarnings("all")
9-
public class FrameCodecEncoder implements MessageEncoder
9+
public class FrameCodecEncoder
1010
{
1111
public static final int BLOCK_LENGTH = 12;
1212
public static final int TEMPLATE_ID = 1;

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/MessageDecoder.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/MessageEncoder.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/TokenCodecDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
@javax.annotation.Generated(value = {"uk.co.real_logic.sbe.ir.generated.TokenCodecDecoder"})
88
@SuppressWarnings("all")
9-
public class TokenCodecDecoder implements MessageDecoder
9+
public class TokenCodecDecoder
1010
{
1111
public static final int BLOCK_LENGTH = 24;
1212
public static final int TEMPLATE_ID = 2;

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/generated/TokenCodecEncoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
@javax.annotation.Generated(value = {"uk.co.real_logic.sbe.ir.generated.TokenCodecEncoder"})
88
@SuppressWarnings("all")
9-
public class TokenCodecEncoder implements MessageEncoder
9+
public class TokenCodecEncoder
1010
{
1111
public static final int BLOCK_LENGTH = 24;
1212
public static final int TEMPLATE_ID = 2;

0 commit comments

Comments
 (0)