Skip to content

Commit

Permalink
Mark classes of deprecated messages with @deprecated. (#876)
Browse files Browse the repository at this point in the history
* Mark classes of deprecated messages with @deprecated

* Revert breaking changes

* Create a dedicated xml for java test
  • Loading branch information
ratcashdev authored Nov 11, 2021
1 parent 9b9786c commit 2697b8e
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1657,6 +1657,10 @@ private static CharSequence generateDeclaration(
final StringBuilder sb = new StringBuilder();

generateTypeJavadoc(sb, BASE_INDENT, typeToken);
if (typeToken.deprecated() > 0)
{
sb.append("@Deprecated\n");
}
sb.append("@SuppressWarnings(\"all\")\n")
.append("public final class ").append(className).append(implementsString).append('\n')
.append("{\n");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,29 @@ public void shouldGenerateRepeatingGroupCountLimits() throws Exception
assertEquals(65534, maxValue.invoke(null));
}

@Test
public void shouldMarkDeprecatedClasses() throws Exception
{
final ParserOptions options = ParserOptions.builder().stopOnError(true).build();
final MessageSchema schema = parse(Tests.getLocalResource("deprecated-msg-test-schema.xml"), options);
final IrGenerator irg = new IrGenerator();
ir = irg.generate(schema);

outputManager.clear();
outputManager.setPackageName(ir.applicableNamespace());

generator().generate();
final String encoderFqcn = ir.applicableNamespace() + ".DeprecatedMessageEncoder";
final Class<?> encoderClazz = compile(encoderFqcn);
assertNotNull(encoderClazz);
assertTrue(encoderClazz.isAnnotationPresent(Deprecated.class));

final String decoderFqcn = ir.applicableNamespace() + ".DeprecatedMessageDecoder";
final Class<?> decoderClazz = compile(decoderFqcn);
assertNotNull(decoderClazz);
assertTrue(decoderClazz.isAnnotationPresent(Deprecated.class));
}

private Class<?> getModelClass(final Object encoder) throws ClassNotFoundException
{
final String className = "Model";
Expand Down
20 changes: 20 additions & 0 deletions sbe-tool/src/test/resources/deprecated-msg-test-schema.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
package="since.deprecated"
id="876"
version="4"
semanticVersion="5.2"
description="Issue 876 - Test case for Deprecated messages for Java"
byteOrder="littleEndian">
<types>
<composite name="messageHeader" description="Message identifiers and length of message root">
<type name="blockLength" primitiveType="uint16"/>
<type name="templateId" primitiveType="uint16"/>
<type name="schemaId" primitiveType="uint16"/>
<type name="version" primitiveType="uint16"/>
</composite>
</types>
<sbe:message name="DeprecatedMessage" id="1" semanticType="n/a" description="Message deprecated since version 3" deprecated="3">
<field name="v1" id="1" type="uint64" />
</sbe:message>
</sbe:messageSchema>

0 comments on commit 2697b8e

Please sign in to comment.