@@ -784,6 +784,135 @@ static boolean readBasicObjectFieldValueFailed(
784784 }
785785 }
786786
787+ static Object readFieldValue (
788+ Fury fury ,
789+ RefResolver refResolver ,
790+ ClassResolver classResolver ,
791+ FinalTypeField fieldInfo ,
792+ boolean isFinal ,
793+ MemoryBuffer buffer ,
794+ short classId ) {
795+ switch (classId ) {
796+ case ClassResolver .PRIMITIVE_BOOLEAN_CLASS_ID :
797+ return buffer .readBoolean ();
798+ case ClassResolver .PRIMITIVE_BYTE_CLASS_ID :
799+ return buffer .readByte ();
800+ case ClassResolver .PRIMITIVE_CHAR_CLASS_ID :
801+ return buffer .readChar ();
802+ case ClassResolver .PRIMITIVE_SHORT_CLASS_ID :
803+ return buffer .readInt16 ();
804+ case ClassResolver .PRIMITIVE_INT_CLASS_ID :
805+ if (fury .compressInt ()) {
806+ return buffer .readVarInt32 ();
807+ } else {
808+ return buffer .readInt32 ();
809+ }
810+ case ClassResolver .PRIMITIVE_FLOAT_CLASS_ID :
811+ return buffer .readFloat32 ();
812+ case ClassResolver .PRIMITIVE_LONG_CLASS_ID :
813+ return fury .readInt64 (buffer );
814+ case ClassResolver .PRIMITIVE_DOUBLE_CLASS_ID :
815+ return buffer .readFloat64 ();
816+ case ClassResolver .STRING_CLASS_ID :
817+ return fury .readJavaStringRef (buffer );
818+ case ClassResolver .BOOLEAN_CLASS_ID :
819+ {
820+ if (buffer .readByte () == Fury .NULL_FLAG ) {
821+ return null ;
822+ } else if (fury .isBasicTypesRefIgnored ()) {
823+ return readFinalObjectFieldValue (
824+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
825+ } else {
826+ return buffer .readBoolean ();
827+ }
828+ }
829+ case ClassResolver .BYTE_CLASS_ID :
830+ {
831+ if (buffer .readByte () == Fury .NULL_FLAG ) {
832+ return null ;
833+ } else if (fury .isBasicTypesRefIgnored ()) {
834+ return readFinalObjectFieldValue (
835+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
836+ } else {
837+ return buffer .readByte ();
838+ }
839+ }
840+ case ClassResolver .CHAR_CLASS_ID :
841+ {
842+ if (buffer .readByte () == Fury .NULL_FLAG ) {
843+ return null ;
844+ } else if (fury .isBasicTypesRefIgnored ()) {
845+ return readFinalObjectFieldValue (
846+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
847+ } else {
848+ return buffer .readChar ();
849+ }
850+ }
851+ case ClassResolver .SHORT_CLASS_ID :
852+ {
853+ if (buffer .readByte () == Fury .NULL_FLAG ) {
854+ return null ;
855+ } else if (fury .isBasicTypesRefIgnored ()) {
856+ return readFinalObjectFieldValue (
857+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
858+ } else {
859+ return buffer .readInt16 ();
860+ }
861+ }
862+ case ClassResolver .INTEGER_CLASS_ID :
863+ {
864+ if (buffer .readByte () == Fury .NULL_FLAG ) {
865+ return null ;
866+ } else if (fury .isBasicTypesRefIgnored ()) {
867+ return readFinalObjectFieldValue (
868+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
869+ } else {
870+ if (fury .compressInt ()) {
871+ return buffer .readVarInt32 ();
872+ } else {
873+ return buffer .readInt32 ();
874+ }
875+ }
876+ }
877+ case ClassResolver .FLOAT_CLASS_ID :
878+ {
879+ if (buffer .readByte () == Fury .NULL_FLAG ) {
880+ return null ;
881+ } else if (fury .isBasicTypesRefIgnored ()) {
882+ return readFinalObjectFieldValue (
883+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
884+ } else {
885+ return buffer .readFloat32 ();
886+ }
887+ }
888+ case ClassResolver .LONG_CLASS_ID :
889+ {
890+ if (buffer .readByte () == Fury .NULL_FLAG ) {
891+ return null ;
892+ } else if (fury .isBasicTypesRefIgnored ()) {
893+ return readFinalObjectFieldValue (
894+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
895+ } else {
896+ return fury .readInt64 (buffer );
897+ }
898+ }
899+ case ClassResolver .DOUBLE_CLASS_ID :
900+ {
901+ if (buffer .readByte () == Fury .NULL_FLAG ) {
902+ return null ;
903+ } else if (fury .isBasicTypesRefIgnored ()) {
904+ return readFinalObjectFieldValue (
905+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
906+ } else {
907+ return buffer .readFloat64 ();
908+ }
909+ }
910+ default :
911+ return readFinalObjectFieldValue (
912+ fury , refResolver , classResolver , fieldInfo , isFinal , buffer );
913+ }
914+ }
915+
787916 public static int computeVersionHash (Collection <Descriptor > descriptors ) {
788917 // TODO(chaokunyang) use murmurhash
789918 List <Integer > list = new ArrayList <>();
0 commit comments