protected Expression deserializeForNotNull()

in java/fury-core/src/main/java/org/apache/fury/builder/BaseObjectCodecBuilder.java [1450:1498]


  protected Expression deserializeForNotNull(
      Expression buffer, TypeRef<?> typeRef, Expression serializer, InvokeHint invokeHint) {
    Class<?> cls = getRawType(typeRef);
    if (isPrimitive(cls) || isBoxed(cls)) {
      // for primitive, inline call here to avoid java boxing, rather call corresponding serializer.
      if (cls == byte.class || cls == Byte.class) {
        return new Invoke(buffer, "readByte", PRIMITIVE_BYTE_TYPE);
      } else if (cls == boolean.class || cls == Boolean.class) {
        return new Invoke(buffer, "readBoolean", PRIMITIVE_BOOLEAN_TYPE);
      } else if (cls == char.class || cls == Character.class) {
        return readChar(buffer);
      } else if (cls == short.class || cls == Short.class) {
        return readInt16(buffer);
      } else if (cls == int.class || cls == Integer.class) {
        return fury.compressInt() ? readVarInt32(buffer) : readInt32(buffer);
      } else if (cls == long.class || cls == Long.class) {
        return LongSerializer.readInt64(buffer, fury.longEncoding());
      } else if (cls == float.class || cls == Float.class) {
        return readFloat32(buffer);
      } else if (cls == double.class || cls == Double.class) {
        return readFloat64(buffer);
      } else {
        throw new IllegalStateException("impossible");
      }
    } else {
      if (cls == String.class) {
        return fury.getStringSerializer().readStringExpr(stringSerializerRef, buffer);
      }
      Expression obj;
      if (useCollectionSerialization(typeRef)) {
        obj = deserializeForCollection(buffer, typeRef, serializer, invokeHint);
      } else if (useMapSerialization(typeRef)) {
        obj = deserializeForMap(buffer, typeRef, serializer, invokeHint);
      } else {
        if (serializer != null) {
          return new Invoke(serializer, "read", OBJECT_TYPE, buffer);
        }
        if (isMonomorphic(cls)) {
          serializer = getOrCreateSerializer(cls);
          Class<?> returnType =
              ReflectionUtils.getReturnType(getRawType(serializer.type()), "read");
          obj = new Invoke(serializer, "read", TypeRef.of(returnType), buffer);
        } else {
          obj = readForNotNullNonFinal(buffer, typeRef, serializer);
        }
      }
      return obj;
    }
  }