Skip to content

Commit 2697b8e

Browse files
authored
Mark classes of deprecated messages with @deprecated. (#876)
* Mark classes of deprecated messages with @deprecated * Revert breaking changes * Create a dedicated xml for java test
1 parent 9b9786c commit 2697b8e

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,6 +1657,10 @@ private static CharSequence generateDeclaration(
16571657
final StringBuilder sb = new StringBuilder();
16581658

16591659
generateTypeJavadoc(sb, BASE_INDENT, typeToken);
1660+
if (typeToken.deprecated() > 0)
1661+
{
1662+
sb.append("@Deprecated\n");
1663+
}
16601664
sb.append("@SuppressWarnings(\"all\")\n")
16611665
.append("public final class ").append(className).append(implementsString).append('\n')
16621666
.append("{\n");

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,29 @@ public void shouldGenerateRepeatingGroupCountLimits() throws Exception
458458
assertEquals(65534, maxValue.invoke(null));
459459
}
460460

461+
@Test
462+
public void shouldMarkDeprecatedClasses() throws Exception
463+
{
464+
final ParserOptions options = ParserOptions.builder().stopOnError(true).build();
465+
final MessageSchema schema = parse(Tests.getLocalResource("deprecated-msg-test-schema.xml"), options);
466+
final IrGenerator irg = new IrGenerator();
467+
ir = irg.generate(schema);
468+
469+
outputManager.clear();
470+
outputManager.setPackageName(ir.applicableNamespace());
471+
472+
generator().generate();
473+
final String encoderFqcn = ir.applicableNamespace() + ".DeprecatedMessageEncoder";
474+
final Class<?> encoderClazz = compile(encoderFqcn);
475+
assertNotNull(encoderClazz);
476+
assertTrue(encoderClazz.isAnnotationPresent(Deprecated.class));
477+
478+
final String decoderFqcn = ir.applicableNamespace() + ".DeprecatedMessageDecoder";
479+
final Class<?> decoderClazz = compile(decoderFqcn);
480+
assertNotNull(decoderClazz);
481+
assertTrue(decoderClazz.isAnnotationPresent(Deprecated.class));
482+
}
483+
461484
private Class<?> getModelClass(final Object encoder) throws ClassNotFoundException
462485
{
463486
final String className = "Model";
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
3+
package="since.deprecated"
4+
id="876"
5+
version="4"
6+
semanticVersion="5.2"
7+
description="Issue 876 - Test case for Deprecated messages for Java"
8+
byteOrder="littleEndian">
9+
<types>
10+
<composite name="messageHeader" description="Message identifiers and length of message root">
11+
<type name="blockLength" primitiveType="uint16"/>
12+
<type name="templateId" primitiveType="uint16"/>
13+
<type name="schemaId" primitiveType="uint16"/>
14+
<type name="version" primitiveType="uint16"/>
15+
</composite>
16+
</types>
17+
<sbe:message name="DeprecatedMessage" id="1" semanticType="n/a" description="Message deprecated since version 3" deprecated="3">
18+
<field name="v1" id="1" type="uint64" />
19+
</sbe:message>
20+
</sbe:messageSchema>

0 commit comments

Comments
 (0)