code: protected void buildCollection( JsonReader reader, JsonDeserializationContext ctx, JsonDeserializerParameters params ) {
          if ( JsonToken.BEGIN_ARRAY == reader.peek() ) {
  
              reader.beginArray();
              while ( JsonToken.END_ARRAY != reader.peek() ) {
                  T element = deserializer.deserialize( reader, ctx, params );
                  if ( isNullValueAllowed() || null != element ) {
                      addToCollection( element );
                  }
              }
              reader.endArray();
  
          } else if ( ctx.isAcceptSingleValueAsArray() ) {
  
              addToCollection( deserializer.deserialize( reader, ctx, params ) );
  
          } else {
              throw ctx.traceError( "Cannot deserialize a com.google.common.collect.ImmutableCollection out of " + reader
                      .peek() + " token", reader );
          }
      }
docs: Build the {@link ImmutableCollection}. It delegates the element addition to an abstract method because the
  {@link ImmutableCollection.Builder} is not visible in the emulated class.
  
  @param reader {@link JsonReader} used to read the JSON input
  @param ctx Context for the full deserialization process
  @param params Parameters for this deserialization