[
https://issues.apache.org/jira/browse/AVRO-3535?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17886654#comment-17886654
]
Michael Kreis commented on AVRO-3535:
-------------------------------------
That would really be helpful.
> Ability to add a deprecation notice in javaAnnotations
> ------------------------------------------------------
>
> Key: AVRO-3535
> URL: https://issues.apache.org/jira/browse/AVRO-3535
> Project: Apache Avro
> Issue Type: Wish
> Components: java
> Affects Versions: 1.11.0
> Reporter: Jeroen Bastijns
> Priority: Major
> Attachments: record.vm
>
>
> Hi,
> I would like to be able to generate a deprecation notice via the
> javaAnnotations field in the AVRO record definition.
> An example of this is following record definition:
> {code:java}
> {
> "namespace" : "com.something",
> "type" : "record",
> "name" : "VehicleRefueled",
> "fields" : [
> {"name":"licensePlate","type":"string", "doc": "The license plate of the
> vehicle"},
> {"name":"fuelType",
> "type": {
> "type":"enum",
> "name": "FuelType",
> "symbols": ["GASOLINE","DIESEL","LPG", "CNG", "ELECTRICITY"]
> }
> },
> {"name":"fuelAmount", "type":"double", "default":0.0},
> {"name":"fuelUnit",
> "javaAnnotation": [ "java.lang.Deprecated(since = \"2\", forRemoval =
> true)" ],
> "type": {
> "name": "FuelUnit",
> "type":"enum",
> "symbols": ["LITER", "KWH"]
> }
> }
> ]
> } {code}
> Here I used the 'Deprecated' standard Java annotation to declare the fuelUnit
> field as deprecated since version 2 and it will be removed on the next
> version of the schema.
> Currently the velocity template used by the compiler will only add
> annotations on top of the field declaration, not the accessors or builder
> methods. As these are the main accesspoints for a developer to set or get
> fields, we're missing the point of deprecating the field, because IDE's will
> only display the deprecation notice when it is annotated on these main
> accesspoints (accessors and builder methods).
> On my local project I've used the option to provide the velocity templates
> myself and have adapted the template in a non-breaking way to set the
> javaAnnotations on field accessors and builder methods when the given
> annotation is the Java deprecated annotation.
> The template can be found in the attachments, it is based on the 1.11 branch
> [^record.vm].
> Now why am I asking this to be altered in the Avro code base?
> When using a schema registry with compatibility rules (such as APIcurio or
> Confluent Schema registry) and you use the forward compatibility validation,
> it is nice to give the consumers of your schema/data a head up on the
> deprecation of a field and an aditional warning when the field might
> disappear in a next version.
> You can use your own templates to achieve this, like I did, but if the
> original velocity template changes in a next version of Avro, this will
> always be a hurdle to take and adapt as a developer.
> When providing your own template to achieve this, you still have to
> distribute the template to the consumers of your schema/data which may be
> cumbersome when they are on different versions of Apache Avro.
> I think this is a feature other development teams also might benefit from.
> I'm willing to put together a pull request to change the template and provide
> unit tests when this feature would be accepted.
> Overall a deprecation notice field on schema field level would be an even
> nicer implementation, but also requires steps to implement for the other
> supported languages.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)