[infinispan-issues] [JBoss JIRA] (IPROTO-100) Annotated Collection Class Method cannot be converted to Collection

Ryan Emerson (Jira) issues at jboss.org
Thu Jun 27 11:05:00 EDT 2019


Ryan Emerson created IPROTO-100:
-----------------------------------

             Summary: Annotated Collection Class Method cannot be converted to Collection
                 Key: IPROTO-100
                 URL: https://issues.jboss.org/browse/IPROTO-100
             Project: Infinispan ProtoStream
          Issue Type: Bug
            Reporter: Ryan Emerson


Reproducing code
{code:java}
public class MagicKeyStringFilter implements KeyValueFilter<MagicKey, String> {

   Map<MagicKey, String> allowedEntries;

   MagicKeyStringFilter() {}

   MagicKeyStringFilter(Map<MagicKey, String> allowedEntries) {
      this.allowedEntries = allowedEntries;
   }

   @ProtoField(number = 1, collectionImplementation = ArrayList.class)
   public List<MapPair> getMapEntries() {
      return new ArrayList<>();
   }

   public void setMapEntries(List<MapPair> entries) {
// No-op but has influence on error
   }
}

public class MapPair {

   @ProtoField(number = 1)
   MagicKey key;

   @ProtoField(number = 2)
   String value;

   MapPair() {}

   MapPair(Map.Entry<MagicKey, String> entry) {
      this.key = entry.getKey();
      this.value = entry.getValue();
   }
}
{code}

{code:java}
core/target/generated-test-sources/test-annotations/org/infinispan/stream/MagicKeyStringFilter$___Marshaller89f891e2edf7d63eb676a6effb5379a47edc312b.java:[56,41] incompatible types: org.infinispan.stream.MapPair cannot be converted to java.util.Collection
{code}

Generated marshaller code:
{code:java}

/**
 * WARNING: Generated code!
 */
@javax.annotation.Generated(value = "org.infinispan.protostream.annotations.impl.processor.AutoProtoSchemaBuilderAnnotationProcessor",
    comments = "Please do not edit this file!")
@SuppressWarnings("unchecked")
public final class MagicKeyStringFilter$___Marshaller89f891e2edf7d63eb676a6effb5379a47edc312b extends org.infinispan.protostream.annotations.impl.GeneratedMarshallerBase implements org.infinispan.protostream.RawProtobufMarshaller<org.infinispan.stream.MagicKeyStringFilter> {

   private org.infinispan.protostream.impl.BaseMarshallerDelegate __md$org$infinispan$stream$MapPair;
   
   @Override
   public Class<org.infinispan.stream.MagicKeyStringFilter> getJavaClass() { return org.infinispan.stream.MagicKeyStringFilter.class; }
   
   @Override
   public String getTypeName() { return "org.infinispan.test.MagicKeyStringFilter"; }
   
   @Override
   public org.infinispan.stream.MagicKeyStringFilter readFrom(org.infinispan.protostream.ImmutableSerializationContext $1, org.infinispan.protostream.RawProtoStreamReader $2) throws java.io.IOException {
      final org.infinispan.stream.MagicKeyStringFilter o = new org.infinispan.stream.MagicKeyStringFilter();
      java.util.ArrayList __c$mapEntries = new java.util.ArrayList();
      boolean done = false;
      while (!done) {
         final int tag = $2.readTag();
         switch (tag) {
            case 0:
               done = true;
               break;
            case 10:
               {
                  if (__md$org$infinispan$stream$MapPair == null) __md$org$infinispan$stream$MapPair = ((org.infinispan.protostream.impl.SerializationContextImpl) $1).getMarshallerDelegate(org.infinispan.stream.MapPair.class);
                  int length = $2.readRawVarint32();
                  int oldLimit = $2.pushLimit(length);
                  org.infinispan.stream.MapPair v = (org.infinispan.stream.MapPair) readMessage(__md$org$infinispan$stream$MapPair, $2);
                  $2.checkLastTagWas(0);
                  $2.popLimit(oldLimit);
                  if (__c$mapEntries == null) __c$mapEntries = new java.util.ArrayList();
                  __c$mapEntries.add(v);
               }
               break;
            default:
               {
                  if (!$2.skipField(tag)) done = true;
               }
         }
      }
      o.setMapEntries(__c$mapEntries);
      return o;
   }
   
   @Override
   public void writeTo(org.infinispan.protostream.ImmutableSerializationContext $1, org.infinispan.protostream.RawProtoStreamWriter $2, org.infinispan.stream.MagicKeyStringFilter $3) throws java.io.IOException {
      final org.infinispan.stream.MagicKeyStringFilter o = (org.infinispan.stream.MagicKeyStringFilter) $3;
      {
         final java.util.Collection c = (org.infinispan.stream.MapPair) o.getMapEntries();
         if (c != null) 
            for (java.util.Iterator it = c.iterator(); it.hasNext(); ) {
               final org.infinispan.stream.MapPair v = (org.infinispan.stream.MapPair) it.next();
               {
                  if (__md$org$infinispan$stream$MapPair == null) __md$org$infinispan$stream$MapPair = ((org.infinispan.protostream.impl.SerializationContextImpl) $1).getMarshallerDelegate(org.infinispan.stream.MapPair.class);
                  writeNestedMessage(__md$org$infinispan$stream$MapPair, $2, 1, v);
               }
            }
      }
   }
}
{code}



--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the infinispan-issues mailing list