@@ -784,6 +784,135 @@ static boolean readBasicObjectFieldValueFailed(
784
784
}
785
785
}
786
786
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
+
787
916
public static int computeVersionHash (Collection <Descriptor > descriptors ) {
788
917
// TODO(chaokunyang) use murmurhash
789
918
List <Integer > list = new ArrayList <>();
0 commit comments