[
https://issues.jboss.org/browse/IPROTO-120?page=com.atlassian.jira.plugin...
]
Ryan Emerson commented on IPROTO-120:
-------------------------------------
I agree that returning an empty String instead of null is horrible!
My preference would be for us to be consistent. If we return null for String, Instant and
Date, we should also do the same for a collection.
I do like the idea of making the null/empty collection behaviour configurable though.
Could we make use of the {{ProtoField.defaultValue}} field for collections?
"null" returns a null collection and "empty" returns an empty one? I
don't mind what the actual strings are, but we could make it a bit more user friendly
by utilising String constants. Maybe something like {{ProtobufUtil.NULL_COLLECTION}} and
{{ProtobufUtil.EMPTY_COLLECTION}}.
Null collection fields always unmarshalled as empty collection
implementation
-----------------------------------------------------------------------------
Key: IPROTO-120
URL:
https://issues.jboss.org/browse/IPROTO-120
Project: Infinispan ProtoStream
Issue Type: Bug
Reporter: Ryan Emerson
Assignee: Nistor Adrian
Priority: Major
The following Pojo always returns an empty collection after being unmarshalled,
regardless of whether {{stringList}} was null or empty when marshalled.
{code:java}
public class SomePojo {
@ProtoField(number = 1, collectionImplementation = ArrayList.class)
final List<String> stringList;
@ProtoFactory
public SomePojo(List<String> stringList) {
this.stringList = stringList;
}
}
{code}
This is because the generated marshaller always creates the collection instance before
attempting to read the collection content:
{code:java}
java.util.ArrayList __c$1 = new java.util.ArrayList();
boolean done = false;
while (!done) {
final int tag = $2.readTag();
switch (tag) {
case 0:
done = true;
break;
case 10: {
java.lang.String __v$1 = $2.readString();
__c$1.add(__v$1);
break;
}
default: {
if (!$2.skipField(tag)) done = true;
}
}
}
return new org.infinispan.query.dsl.embedded.testdomain.hsearch.SomePojo(__c$1);
{code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)