@@ -808,9 +808,12 @@ func writeJavaWireMarshalParcel(
808808 for _ , wf := range wireFields {
809809 info , ok := javaWireMethodMap [wf .WriteMethod ]
810810 if ! ok {
811- // Opaque field (Bundle, Parcelable, etc.) — write null marker.
812- // Android's writeBundle(null) writes int32(-1).
813- f .P ("\t p.WriteInt32(-1) // null %s" , wf .Name )
811+ switch wf .WriteMethod {
812+ case "bundle" :
813+ f .P ("\t p.WriteInt32(-1) // null %s (Bundle)" , wf .Name )
814+ default :
815+ f .P ("\t p.WriteInt32(0) // null %s" , wf .Name )
816+ }
814817 continue
815818 }
816819
@@ -860,18 +863,38 @@ func writeJavaWireUnmarshalParcel(
860863 info , ok := javaWireMethodMap [wf .WriteMethod ]
861864
862865 if ! ok {
863- // Opaque field: skip by reading length-prefixed data.
864- // Android's writeBundle/writeParcelable writes int32(length)
865- // followed by <length> bytes.
866- f .P ("\t {" )
867- f .P ("\t \t _opaqueLen, _opaqueErr := p.ReadInt32()" )
868- f .P ("\t \t if _opaqueErr != nil {" )
869- f .P ("\t \t \t return _opaqueErr" )
870- f .P ("\t \t }" )
871- f .P ("\t \t if _opaqueLen > 0 {" )
872- f .P ("\t \t \t p.SetPosition(p.Position() + int(_opaqueLen))" )
873- f .P ("\t \t }" )
874- f .P ("\t }" )
866+ switch wf .WriteMethod {
867+ case "bundle" :
868+ f .P ("\t {" )
869+ f .P ("\t \t _opaqueLen, _opaqueErr := p.ReadInt32()" )
870+ f .P ("\t \t if _opaqueErr != nil {" )
871+ f .P ("\t \t \t return _opaqueErr" )
872+ f .P ("\t \t }" )
873+ f .P ("\t \t if _opaqueLen > 0 {" )
874+ f .P ("\t \t \t p.SetPosition(p.Position() + int(_opaqueLen))" )
875+ f .P ("\t \t }" )
876+ f .P ("\t }" )
877+ case "typed_object" :
878+ f .P ("\t {" )
879+ f .P ("\t \t _opaqueFlag, _opaqueErr := p.ReadInt32()" )
880+ f .P ("\t \t if _opaqueErr != nil {" )
881+ f .P ("\t \t \t return _opaqueErr" )
882+ f .P ("\t \t }" )
883+ f .P ("\t \t if _opaqueFlag != 0 {" )
884+ f .P ("\t \t \t return nil // non-null %s: cannot skip unknown-size typed object" , wf .Name )
885+ f .P ("\t \t }" )
886+ f .P ("\t }" )
887+ default :
888+ f .P ("\t {" )
889+ f .P ("\t \t _opaqueLen, _opaqueErr := p.ReadInt32()" )
890+ f .P ("\t \t if _opaqueErr != nil {" )
891+ f .P ("\t \t \t return _opaqueErr" )
892+ f .P ("\t \t }" )
893+ f .P ("\t \t if _opaqueLen > 0 {" )
894+ f .P ("\t \t \t p.SetPosition(p.Position() + int(_opaqueLen))" )
895+ f .P ("\t \t }" )
896+ f .P ("\t }" )
897+ }
875898 continue
876899 }
877900
0 commit comments