[
https://issues.apache.org/jira/browse/AVRO-1614?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14233274#comment-14233274
]
Doug Cutting commented on AVRO-1614:
------------------------------------
Yes, please make whitespace & other cosmetic changes in a separate issue.
The best time to make code clean is when its first committed. Subsequent
cleanups can be done as separate patches, but substantial reformatting can make
merges more difficult and may not always be worthwhile. Also, folks have
different things they're particular about, so it's difficult to keep a
collaboratively maintained codebase perfect in everyone's eyes. However we do
use checkstyle in our build. Perhaps we can disallow trailing whitespace there.
About the tests, I was just responding to your statement above, that you had,
"not seen unit tests that validate the generated Java code". The tests you've
provided seem sufficient and appropriate.
> Always getting a value...
> -------------------------
>
> Key: AVRO-1614
> URL: https://issues.apache.org/jira/browse/AVRO-1614
> Project: Avro
> Issue Type: New Feature
> Components: java
> Reporter: Niels Basjes
> Labels: java
> Attachments: AVRO-1614-20141027-v1.patch,
> AVRO-1614-20141201-v2.patch, AVRO-1614-20141202-v3.patch
>
>
> Sometimes the Avro structure becomes deeply nested.
> If in such a scenario you want to be able to set a specific value deep in
> this tree you want to do this:
> {code}
> public void setSomething(String value) {
> myStruct
> .getFoo()
> .getBar()
> .getOne()
> .getOther()
> .setSomething(value);
> }
> {code}
> The 'problem' I ran into is that any of the 4 get methods can return a null
> value so the code I have to write is really huge.
> For every step in this method I have to build null checks and create the
> underlying instance if it is null.
> I already started writing helper methods to do this for parts of my tree.
> To solve this in a way that makes this code readable I came up with the
> following which I want to propose to you guys (before I start working on a
> patch).
> My idea is to generate a new 'get' method in addition to the existing normal
> get method for the regular instance of the class.
> So in addition to the
> {code}
> public Foo getFoo() {
> return foo;
> }
> {code}
> I propose to generate something like this as well in the cases where this is
> a type of structure that you may want to traverse as shown in the example.
> {code}
> public Foo getAlwaysFoo() {
> if (foo == null) {
> setFoo(Foo.newBuilder().build());
> }
> return foo;
> }
> {code}
> This way the automatically created instance immediately has all the defaults
> I have defined.
> Assuming this naming my code will be readable because it will look like this:
> {code}
> public void setSomething(String value) {
> myStruct
> .getAlwaysFoo()
> .getAlwaysBar()
> .getAlwaysOne()
> .getAlwaysOther()
> .setSomething(value);
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)