From 696cf779d457c89184ea1d4aa18702f7cca63fd1 Mon Sep 17 00:00:00 2001 From: Yilun Chong <yilunchong@google.com> Date: Wed, 28 Jun 2017 11:32:01 -0700 Subject: [PATCH] add java supported --- conformance/ConformanceJava$1.class | Bin 1535 -> 1535 bytes .../ConformanceJava$BinaryDecoder$1.class | Bin 863 -> 1241 bytes .../ConformanceJava$BinaryDecoder$2.class | Bin 1014 -> 1482 bytes .../ConformanceJava$BinaryDecoder$3.class | Bin 1644 -> 2256 bytes .../ConformanceJava$BinaryDecoder$4.class | Bin 1479 -> 2057 bytes .../ConformanceJava$BinaryDecoder$5.class | Bin 1650 -> 2270 bytes .../ConformanceJava$BinaryDecoder$6.class | Bin 1716 -> 2339 bytes .../ConformanceJava$BinaryDecoder$7.class | Bin 1310 -> 1860 bytes .../ConformanceJava$BinaryDecoder.class | Bin 2220 -> 2553 bytes conformance/ConformanceJava.class | Bin 7832 -> 9250 bytes conformance/ConformanceJava.java | 201 ++++++++++++++++-- 11 files changed, 184 insertions(+), 17 deletions(-) diff --git a/conformance/ConformanceJava$1.class b/conformance/ConformanceJava$1.class index 823d43744ad9afcc8341d50dd53c3e6d35105b8f..ab225e5710171dc5627e09f7b0315190053e4958 100644 GIT binary patch delta 18 acmey*{hxcobXGRTB@AYawUg(vCIJ9LX9iaQ delta 18 acmey*{hxcobXGQo{|sgfk0#G$O#%Q&g9jA= diff --git a/conformance/ConformanceJava$BinaryDecoder$1.class b/conformance/ConformanceJava$BinaryDecoder$1.class index 940e39f0dd7cec4f30816c636807c6afae2a71c5..b54414b4a12add35e2e812d3b94a6c6d8c73bc75 100644 GIT binary patch delta 501 zcma)3yG{a85IwWIaF^vNuJVu-R21ATOpt;ENg%N@(OB>SQmi&4kX;%pqov(uV`5?9 zCupUy@B{n<E5AhJ>>3k93n!VGJ7><BJ2&?&`Wh?0d^|k^Xu{GEL0&@~1r1pg1(pPs zy<#UF9}gVYK6FNt(Y8RvJGwDf2vcZ7V2zON+wP<{9QIGgwi~h=1jjqyt2efS*1qk! zgOl%8^*6iiy|<E4tS7L6R1kE(LrtYdF#IkVvOwLxq6=k{aNu84&HU$F0n^V*m(&hK z`d=ddR?3|z{QkgX_9z4hDxWG)LPRyK5<P(K86(6(4smR8r6C0=WE)&bj7F?SNOv>T z9i$min37?igZ@Kw{H2m-RlO;dj0K(`VG+4-Qm}B6-Q?BdC?kOaf88qPIY(fiw5#!b LY+V)AAZOH1()Cy1 delta 265 zcmZ9FF;2rk5Jlgt?bzNV5FjBCV(hpJX^}ueNGZ4o1r-f~10Ye-McdMG0jNL}93VHK z%1sd8E*WWN|NMC~`;%`vllAY{H*iYriP`gbhAE?zgH?H%CwJHP4>u{3)$NNNg;zW8 zCKNr6=^JIJToE!iv@#T~wkj;$lg+|7dJdat^cd-26Hb}X!APYlxsl%NWHGf5>|NT( zR2u@$RCD^;YUn~;yTACvz5PQk*pd?q+1AN{v}1?e){B`#PqG%^Ii#zM8MA-o+y7Z+ JOf_ea{Q-478ovMl diff --git a/conformance/ConformanceJava$BinaryDecoder$2.class b/conformance/ConformanceJava$BinaryDecoder$2.class index 64553b6f4fcd446ebe6fe241730ac80528d0a651..1d3c0862b52673922e65ff91f699a643b8023f1a 100644 GIT binary patch delta 557 zcma)3OG`pQ6#i!J&9STHBdzRZnWm}b6AGj-Y9W#l<T|*-t&OR8C1~XzXd?q{@<+6a zXc4saZ?q0twT#XcLZKEOICCD~_su!Xe2Kmz-2Z-g1&~KhgAD-<3s}_P#FB;?EDNj% ztaXEXE=N;unZ{|W(Qf1f*1JY88D<#iW(77Fyj8<&AJl5q+ooX-*ja{F>{xy>U$>W! zWm6WRVwk3W^-Bo<)f6OWyMBR~z@`&%B%DZM%R07YndMnZc34PFGnC{5FUb$Kqh=UR zsEEeL93haE5&p)i@}4K7V~XTEKVt=J%>I802G3!me%WYU>-7txtl#M2OfiiKdRfa9 zasfLSCgr&j@M~1tr~;1Ybif5p$ej}C43QGtgsX&m$i47e9O|r6#VOhoPvFl`A1P-T w>MA2T1+#>5%we9QI@o5KvN&z#L<my|&}T>BqiCa>gWe;JAhMzzQ7gLbKU=tT1ONa4 delta 287 zcmYLC%TB^j5Iu8gxtH6jAVn<?TWe9lkYM7%#7Bs*GBMGO`^Ml-Aei_8{6TZKet>c3 z%EW~qzz4Y`OxZBW%$zxAX3pICm%)7T`v>40Ee#u<Mg=<>4t6E>Bx-4VU9cy~^ld27 zNGBh(Z$9awoJS~e;3C4Iix^EpU^=2<D#D{9(-sjOn|m>{P6(~E>zT{km$|YYo=W}k z=w&>8O-9edyW~BI&w5>0Y@CJQ%tL~p7=_H|xU2SQoqj;yj0uI+4spHVNn?|*lnHJB sajo29i*<|jB7Z0`7T894#br(#oDu5|>Tuz+dlmjbGsDqS2(n&OOF2^_{r~^~ diff --git a/conformance/ConformanceJava$BinaryDecoder$3.class b/conformance/ConformanceJava$BinaryDecoder$3.class index 104336d566d90afa0fcafd164e8aa2e004f6c01d..ad8bf31d73ae50864bf3b62ae65791d3a9a01c3d 100644 GIT binary patch delta 776 zcma))K~ED=6otPxo$@B*00oLzpa@#D6f0V)q6oH76c9>_g($iqI6;)qhIWA~_ijux ziCh1HiE&|~#Kf&De~9rXsCOzx6J2zYd*7XV&O7J5JM-1~(y{RQ`}>bTnsu9Y&f3Ho zu}LuMSLggHX>*=2n{F;>E^1Pmaf`H#%_W;5E^Dr6uGMo>?Z+yc`&GBFU#^wMHP`FU zUu6WE(oFx_sj%k`w%kf>r@U8H{6!bhjH0vTR%_Ya-O|&FTW!dsyd^VI|CElW#(Zqq ztyVX;e`B$K>66~9nn;G25nG2@a^meU$4!S@%sVWwsJZR1#Ii%46-CM`nqluyy|6+Q z{9e(^8)<V@5%r2jv_*4AF)ySp@6gyYON#u_OE}r&p)_lXk$NHgb|&yzsRM7tEHr<i zZ|16J1mofVnR(N}o@|?ZIR6Pqgy=x#DAgclqhlpT`_((t8|f*!B)7;41<7GfV9@Ek z3@&c?$SEwzCCO{FvMxGz>E#}MY!Kx>13Vxij0naL0Roy{O`oP8rHRVS2RJFPDbkk2 zAg7PyW2)8r5FCE?$7D+w55>e4lWoy@Bqlpz@>n#UG;b0hCWZ#XoM{;QljxC15R@Nw dlH(#Z#0|MwM5fezm5H29n-IuYWc@W{{RBjpj_Uvb delta 425 zcmXAk&rX^_6vcnTC(P&MLxkcVs8mF2t^ZN9SZj+4Do`yx0yQ+zL@;WMJ2&o)nYi{L z+_`Y)#+9#O;xnlCtCQR_=iYO2X6|G3*(*N0+};5>ej7T-7zP<Kd}i2ZUwk%V_{yju z&X{IgGohJunKBrrHCavWvb@wDJg6TYH8k^=SJz1ye$(XN?Fv&m-Dw;g@3xvp_DSU@ zB77Hv$09$(<*~$1k6#o#mRZrPdK4*ntg)_`v9(~_{taA&B5Wx7ZPrQIgcDa~JLzOp z#cn(2s(LfpcCYMSs5TN^Z8iV34)^QLokpd8QXk3|rU}bx{s~A$=tL2<X`SebNgt99 zN`fEg5l7T+>B^a}WN-z`f)z=q5@VAjTYTgXDQbLTn_h7w2)v5mXcC&F7F}ujWRa9u rpiQD(9QuU^NHg$%=6|SLDkFNFIl3gKgIQ*ZMji``QgB(2i%$0qPPjNP diff --git a/conformance/ConformanceJava$BinaryDecoder$4.class b/conformance/ConformanceJava$BinaryDecoder$4.class index 2bfeda922ce6af8be181642717840a6ca0d23ca7..16a4ce4e6019066f950001203037935185cf7954 100644 GIT binary patch delta 741 zcma)(O;1xn6o#L<y=9u)R!Xgke28L!eu$I;imhl1B{3KcF>Fk9(U7ZAv2A(_7FpEb zS4`YAcWdI#y)jYZ!mWw%Pw+>K=QbKm5W^&A&YU^#ndi*R*Wjy2?%R*gUw~;AEkc~K z80NG^oDqvCqna^ILX!-Tve2Y0`Z=Q+*JRo=bKSvOx$fA@^=hL!rOCFp-sZdlg|*mR zwQG%g)rzC|OO@43E21m5(<rX3t!&n8r&FC()Z1^C64?nab<K91^4;I5_+EA1O{>}7 zFy}PqL(FnPlM9jOVu(2|xm)U8FwA8yC@6;9TgISUGGeOe-ZX~IdBqj?iJ5mZX1GhU zptvsK*!Th2nvx>fF2+9W8n2aVy5D`v2k-lVdBbg)iPpbhik^jP<xaK!uv}TSm&zOE z_+%kNP(H>RKCv)|P;|@cBxYwPkV+4zPpJ2@r-;bhB_3)r_izNGqrU%3-IxA|v4hVY z^(St7;uG?#urA^aS*;7~k>Hww*_6V^9F?qvaaD6{Uen8QiA_=a#rhcB=lC5gH|ZZ~ z{UL0N{;3eQh44%W&xP<p2rvIb@JV+FVMs3PQN3q~iKT=dWs<|vO+Ql%hz~Kr*^(uv N%P0hx@w^cU`~<vPi~axr delta 356 zcmW-b%PvDv6o$WZPTO6lM=z?>UF%l&mZCIG8ka<v7@5@VL@F`Rii+?862oSX#X#Z( z%nVEg1Mw8zLabvYYp?b1@84^$yXaeJ;p6w^706Sx3DIlQN59PggElczinL-#F&t#X zMlq@wQ%p2hN-h3#_o7i%Of_#GVxG&u-nc%lo?o8UYYqKv6p{`zidly&ImMjAJb8x& z7In&evK*H5mzg&T+GnMG%Lbd;HR8HtEg37%@7ANCfBZX{*jl}IQolHJYsb|s_sSj4 zm9u!8dSOaBv|<p}_kpfNM07wD?8+IXT^wQk87SU(q+j-jijY0&Dl%hVULO$VkO)U4 zgxZ+fijGx9CrQyhar?38lHR17p8q@V_qb$Qc#KKfgohX>vu?`-iE@x>uSSD^U3)QV diff --git a/conformance/ConformanceJava$BinaryDecoder$5.class b/conformance/ConformanceJava$BinaryDecoder$5.class index c5dea858554a0becfaf9a729f90925418319a39b..e6d0f7bbbb62d61519e17aa575c3f01a582f1f33 100644 GIT binary patch delta 801 zcma))O;1xn6o#L<y=9u~MOtXpf<@4R1x27#MJvchQK*7Nt4ouHT#X5~q-_i)Chm=i z){7qt6EOI-*OehAZ2b}b2;*8kw@PB7i%v4<%$fJh`_4Ht-|VlUxi3FHeFjoovuNS4 zMS?zyevWvnquy%3;uwP#5r#CwnxtkVK+3}6xJ5T7G$%EuYnic@T`Prh#mSXR)zXOO zOzpvXMxZgx`0tYnYi4!HS*hMC6)TFr(uH(F(VBNE)yd`M{M{9&Qm08O$_cm2jMTPM ziR7S%&pVY$;pPq=|My7RomQg*L8e67W}1xX+stsz<~*}Db7VCaY%Vfyv%n=q((N|G z?v{EK2$J*m7TpCSWnNaq+(jeSq`9J)m83Rz%P5+8#loK;Jka2!G*=aUwOshal<%W5 zR=uKn-Fs$V<5hi^3#E5-$N#6R2u+uYH%jH(h2oNvE!-)@hbM;EEida0pUfa3q|t8C zAC0t0+$0e^6dPtAh9EEf+3Oy1kbv07Vrw+>gjUvQ=P4aLBgS(&c|lY%q8L8~@M+pL z9h&_pO-!2K$pL{)p$^FG;*du#J8SNSze_c{+y0*Wo>0I1Bv_ZM4H0@JIh(ZcT8KA= z_l*d?6~TAH_r7sKA8{cy=%H7<S?|E!x|m;na+*Ct)lKZIlo=K96r&kS8YN>Qz@+Dc FfnPO{oVWl0 delta 453 zcmXAkIZs<r5QV?%2fi;?4~&CDu)$yqVKJ-OcMO=F0$RE!WF$b?W)Y%GLrDR;qRwxK zD3B<SXyHGkPfHyI=E0Tb%+Z`Pb7%fUU%mYE|A$9lm`y`9X+tY*h99&CtRrBZhAuLO z7~Ps4O|PcUrQcu}&}22kH)}IrD$D-KX+bl3bNeeH#WBtJr(I!|E_Ms$v;9)>)c#fD zy%8qG;4#ItxIAW<^_U~)G0%c#(Id~2$1*F5LHiW0wSMS29AQ<_Y_m?%#+{g2vwcol zt=nzqQf=I2DqfT=hqrd3i>2aT>Ey^S?iSYlbH6Q{8=y)~3tmVfLJf+juoM+IlHE*q zqq;}^7Owaz7?unL!CJmcSKz*~|8&Y;==Pt1BaJJ#FL)r+52fpf1VtJsk)%u$$JC1> zPUuYpM-$g1wCGCHC`Ts6f-In9ghR9NkSx^lQ45x>lSqpmV}x%qrkWuJ^F}_a5+&y{ IA&DCI9nrfzeE<Le diff --git a/conformance/ConformanceJava$BinaryDecoder$6.class b/conformance/ConformanceJava$BinaryDecoder$6.class index d617cce5f32eac7e394edda6ba1a5e08945cd4de..2b03a1257826c45a767b98268fec2796d9ed0c68 100644 GIT binary patch delta 859 zcma)4O-~b16g_u3<Ezs_+Jg8+snjB+Efy*&f=HpDP%I+W&s{@CV}fndX-r+Qaci`B z3zsfT+!+f<K^7)z@PnV>!nJ!7^-hfmiJJ5!_r5#to_o%jH}k6LnRj;k$L1RV1GuTf zjgXEWgmpv^wX0scI%cPsjz0A3XhU4!xWItG2`5hKaN(4W00sq43!JG;k2Jdq*`j66 z74xM$1J70-Jxy|JR3PztlAuqP7tBKGPCjQ5cEFi>oZ!uvR%vW;F>}9QT6LN@p;)P= zLh+d0N}HCIz5S;Z{2M(ir)V(d!33)sn8Z1jHgFzO2BwiRFoO#Q(wG&vXkZSP49w%Q zd`Zt;9%Sr?D+IrMtoUSEX{D?3p%S2LvZ_2#uM=ivLhJ5r(22keLXRY^Wp&2!g{WMq zwn@M0mMdzw@wbU+^Kw)RE&WTB;7R6lxAMii+1!Ge%HGQc`xAX==5J{)2Zsk<5L&o8 z47GmZ3`g2&9kk46gjUYGcn4l^-irfJ>gXqoR{1m<sX^I*Lw?nUmTYhsI_G6Lv4SS7 zGW{A4)Oc_WKCGhy8!Yu2o!G=dMl#_~Za4%E3A76?NuXm~z|SzS24OcxCxZV`PDi3O zs2rO7rs=dte%HEoIC;xX-m#PS>|~3bd|<^bR{6+IKC#4SrrvJci345iO2JWd*WKAS kxt}8pjeq|U>|^=>d}BDmg&V^dn$Y>ec_o}k+PmBN3!EjVCjbBd delta 447 zcmXAkxlWrw6otR>Z#-u56B~me5FD`C_sxI_o7wlJp`@^oktnbcAcO$1mQ-ju8VV$M z08&x#0C@%8A$2N}`@@ya-OibrGY^qpMf1PkUtWPEYlaZDhC1pE4K#XPlh-wSsm0Jr zn;}ZOrbE-I=?c<q_(G4SSJQvHGE!Kuo7vmXYErj%_m#37)cpLEE6nuKW_I^rJD=OP ze^jb7%&-VtMi>>9%NS{waVA_QnR1zCMl<U&$Gpn|i+0`j7zneZsJ25+%+@-kYT2fo zgnvabXYW;`eJhCDM`uv2J}3Qum3<1VH5E_hb6fenolI^syO24|)ODx3_$nXu!Y2q* zj3Qz;bVam8=73CaD7lnxqKMcVy?pL5Ef~qi1UaFIQzD#E!Z{UEV_fiqOKP|x&b90i z`2GpuXeu?|HB~50Y(k5$T4=vKQHUc)JR@-uA3M)jxga5YlmW`*nh?=Gl2b-}OQeGg Ic{LpT50f50od5s; diff --git a/conformance/ConformanceJava$BinaryDecoder$7.class b/conformance/ConformanceJava$BinaryDecoder$7.class index 6522a5e65d63d94578c36e043689169acb03aa04..ba0aaebbaf6c6f22e4822cbfdd447ba2ea70e9e4 100644 GIT binary patch delta 665 zcma)&&rcIU6vscayE4mmEiJ56k;)GNYpa5_Xce$xB=KMkA>0iy8)8Ce?N%fIf!Aj4 zdi3PMn5gl<$&(53;;*Bqe~0l+Bhf@-nB=`T^X9$J_su*C-lS*W{&>9&RHy}{7!4R> zJRr+)&4gxBGv#w4poc=h5GOT7&FRj}LSL%6)=J{#R-@fGr<v~De>`s+6v5Ji+i|mf zr?HtR{-`Qz&MNv><D|W~v9Y?<jFWD6S<x!oFn3kdd0Huyr)@z!PLj3ty@H9qd*;lP zs%An&x)L(W`H%}#&8B*i3b|+xmlPvr*~y!#6R9~<cgEGcX*zXpL2*;m20A-Yai40M z%g?u+tWxWy=GOK<<Bq#xcHKhsFBy~fa*OuQ?Q+FJ4x&iQZWOPZ@r$Kl^%C_=a*96j zJrd!a_zV#aX>-r3uGpJF4v2q`&j)(>DBMp%{LCTA1~}I>gI6^<4$Ik-errb<whYPK z`lXmFy})@zuX*TAZvDo75$vvDzY6x7V88zd>yj6s!!bs>QucuZVnrD+%NhDbc8D2{ UN=$Kz(zQSaly$|YY-7g%34S+&cmMzZ delta 340 zcmW+wyGjE=6g@Nhn9XDpcXgx2Bt~P@_}*v&+X(Rm5)k}_B}A|=iHV4<osExWdM*72 z3o9$J^bhQ<MM1plg?netJ&&1}^u6?7f1jQK)KHg@$Vuc;kZ>?5P!yOFn6^-oFfk)g z7MPFfn+c;A_6Kc&h3N9Zja3YC@1oW2ogH^O1NFuNCy6D2Wg9D4wXp_YdHm5#qRLQI zKfItmxX0Gj7ca35mD3LN8l$u=PrYm3DliT!?oPLJ)a{>yomRUUo`>aX!$*RC7#F8b z!UjW1eHz(Jny^U-xS~0P5mKa7-V9D-W)ud^Ygo9Ugj;gnkvD=zTM51|kl7Zb8Y8Te nUx$Wqx^rYP@xO~-9i}c3=b!?Y7>PN|?n+9eYFJo|PsjQL<YzIv diff --git a/conformance/ConformanceJava$BinaryDecoder.class b/conformance/ConformanceJava$BinaryDecoder.class index 3dd7ba076f30d58cb876c7d6da20bde51c0dde6e..ac98465dcaf39020bbb3d18d0d8f97b7b7dc742d 100644 GIT binary patch delta 577 zcma))O;1xn6o#K^dwYffV^vJh*u+J{jeuf`q)LNWKMR#wwSFOLt6mW-q3P|$m45(M z6I~J4E_6ZMX~GXc6aR`XNr-XUs|krN+?<o=J?}ebapwKL?E|m2ety~nPO)t8DD}8< z)i6t0I4M*N8LoFqNw}f$4LUO26snqIhQ5ez3AZ&vhE&9Ngu9wyLx05gggMQKVIboB z!o22q+HfQi9taOLCk#g;ek9a3)_<tIz0G<n3@WXa_R5&>*uIIa4LwoplCwgf*k298 zcA?RzzHA0z*Pd0h?7P^^aCWpan+?LSzVK(3`P-fso>@Qswr7Fo!lEK=3yHMX$2dzL zzsEBw@j_9wUt&dD^Tv}xLs53<`~SJXzV<%H75Pr4|6dtfNtTq@_2j6^*{|KYlN=e# zamL*!#zew}Ig4V-al-X;PAPD4w~~S!m+iC+dO3HkE4D2g`P1xiuESLDX}W8#y3_~C rd}H3Z<G<f8GTq%X!=USP^t#`0&DQkP!8(&1;yh2e;QA#uC8d7>SX_7u delta 358 zcmXAlJuib%6vuy0+o$(FH*Hd3pwYz8v_Yvs+lU}uTS`&XTfG!D3yIZW5ebRhwXxYO zjR}caEaDsZ3PuZVJ!klz^E)rY`F}UxH=VuxJiP$@94c(Gj**;Vni)Z#U{(=jt|3`L zK@wL;cWGX*An8;DTwW9uC0&Y;%S(b~Nw=cK<rP6ml2Ej|yee3e^h6ZxZev}rA?a0g zxV$MS*K1#vV;@zHPpX1#UGrS|b_Bcn)qCqy*c0qqMD(W>u>+(yc)0OJEnn3lr$0P7 zZTVCB(*LZ_Mc(r3cagNx`uAUxGGXen4EsZnVN74kn4LDSjq68QAIuPBm@t#XDH&_3 ojB-kW3(BPNGGGkzFk$A6JVngpA`SoY`py{%ZZSlgxiJxve@JjT$N&HU diff --git a/conformance/ConformanceJava.class b/conformance/ConformanceJava.class index 74fc5e84088b2940707612687a0b4a9d294fc234..9c1f08c6eaf13638568c4e65e46895799c010042 100644 GIT binary patch delta 3518 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 F{~D&J_)P!+ delta 2562 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 diff --git a/conformance/ConformanceJava.java b/conformance/ConformanceJava.java index 7badf2a5f..3a944b51c 100644 --- a/conformance/ConformanceJava.java +++ b/conformance/ConformanceJava.java @@ -3,6 +3,7 @@ import com.google.protobuf.CodedInputStream; import com.google.protobuf.conformance.Conformance; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf_test_messages.proto3.TestMessagesProto3; +import com.google.protobuf_test_messages.proto2.TestMessagesProto2; import com.google.protobuf.util.JsonFormat; import com.google.protobuf.util.JsonFormat.TypeRegistry; import java.io.IOException; @@ -54,21 +55,31 @@ class ConformanceJava { private enum BinaryDecoder { BYTE_STRING_DECODER() { @Override - public TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) throws InvalidProtocolBufferException { return TestMessagesProto3.TestAllTypes.parseFrom(bytes); } + @Override + public TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) + throws InvalidProtocolBufferException { + return TestMessagesProto2.TestAllTypesProto2.parseFrom(bytes); + } }, BYTE_ARRAY_DECODER() { @Override - public TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) throws InvalidProtocolBufferException { return TestMessagesProto3.TestAllTypes.parseFrom(bytes.toByteArray()); } + @Override + public TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) + throws InvalidProtocolBufferException { + return TestMessagesProto2.TestAllTypesProto2.parseFrom(bytes.toByteArray()); + } }, ARRAY_BYTE_BUFFER_DECODER() { @Override - public TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) throws InvalidProtocolBufferException { ByteBuffer buffer = ByteBuffer.allocate(bytes.size()); bytes.copyTo(buffer); @@ -82,10 +93,25 @@ class ConformanceJava { "ByteString based ByteBuffer should not throw IOException.", e); } } + @Override + public TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) + throws InvalidProtocolBufferException { + ByteBuffer buffer = ByteBuffer.allocate(bytes.size()); + bytes.copyTo(buffer); + buffer.flip(); + try { + return TestMessagesProto2.TestAllTypesProto2.parseFrom(CodedInputStream.newInstance(buffer)); + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "ByteString based ByteBuffer should not throw IOException.", e); + } + } }, READONLY_ARRAY_BYTE_BUFFER_DECODER() { @Override - public TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) throws InvalidProtocolBufferException { try { return TestMessagesProto3.TestAllTypes.parseFrom( @@ -97,10 +123,23 @@ class ConformanceJava { "ByteString based ByteBuffer should not throw IOException.", e); } } + @Override + public TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) + throws InvalidProtocolBufferException { + try { + return TestMessagesProto2.TestAllTypesProto2.parseFrom( + CodedInputStream.newInstance(bytes.asReadOnlyByteBuffer())); + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "ByteString based ByteBuffer should not throw IOException.", e); + } + } }, DIRECT_BYTE_BUFFER_DECODER() { @Override - public TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) throws InvalidProtocolBufferException { ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size()); bytes.copyTo(buffer); @@ -114,10 +153,26 @@ class ConformanceJava { "ByteString based ByteBuffer should not throw IOException.", e); } } + @Override + public TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) + throws InvalidProtocolBufferException { + ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size()); + bytes.copyTo(buffer); + buffer.flip(); + try { + return TestMessagesProto2.TestAllTypesProto2 + .parseFrom(CodedInputStream.newInstance(buffer)); + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "ByteString based ByteBuffer should not throw IOException.", e); + } + } }, READONLY_DIRECT_BYTE_BUFFER_DECODER() { @Override - public TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) throws InvalidProtocolBufferException { ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size()); bytes.copyTo(buffer); @@ -132,10 +187,26 @@ class ConformanceJava { "ByteString based ByteBuffer should not throw IOException.", e); } } + @Override + public TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) + throws InvalidProtocolBufferException { + ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.size()); + bytes.copyTo(buffer); + buffer.flip(); + try { + return TestMessagesProto2.TestAllTypesProto2.parseFrom( + CodedInputStream.newInstance(buffer.asReadOnlyBuffer())); + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "ByteString based ByteBuffer should not throw IOException.", e); + } + } }, INPUT_STREAM_DECODER() { @Override - public TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) throws InvalidProtocolBufferException { try { return TestMessagesProto3.TestAllTypes.parseFrom(bytes.newInput()); @@ -146,13 +217,27 @@ class ConformanceJava { "ByteString based InputStream should not throw IOException.", e); } } + @Override + public TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) + throws InvalidProtocolBufferException { + try { + return TestMessagesProto2.TestAllTypesProto2.parseFrom(bytes.newInput()); + } catch (InvalidProtocolBufferException e) { + throw e; + } catch (IOException e) { + throw new RuntimeException( + "ByteString based InputStream should not throw IOException.", e); + } + } }; - public abstract TestMessagesProto3.TestAllTypes parse(ByteString bytes) + public abstract TestMessagesProto3.TestAllTypes parseProto3(ByteString bytes) + throws InvalidProtocolBufferException; + public abstract TestMessagesProto2.TestAllTypesProto2 parseProto2(ByteString bytes) throws InvalidProtocolBufferException; } - private TestMessagesProto3.TestAllTypes parseBinary(ByteString bytes) + private TestMessagesProto3.TestAllTypes parseBinaryToProto3(ByteString bytes) throws InvalidProtocolBufferException { TestMessagesProto3.TestAllTypes[] messages = new TestMessagesProto3.TestAllTypes[BinaryDecoder.values().length]; @@ -163,7 +248,7 @@ class ConformanceJava { boolean hasException = false; for (int i = 0; i < BinaryDecoder.values().length; ++i) { try { - messages[i] = BinaryDecoder.values()[i].parse(bytes); + messages[i] = BinaryDecoder.values()[i].parseProto3(bytes); hasMessage = true; } catch (InvalidProtocolBufferException e) { exceptions[i] = e; @@ -219,16 +304,96 @@ class ConformanceJava { return messages[0]; } + + private TestMessagesProto2.TestAllTypesProto2 parseBinaryToProto2(ByteString bytes) + throws InvalidProtocolBufferException { + TestMessagesProto2.TestAllTypesProto2[] messages = + new TestMessagesProto2.TestAllTypesProto2[BinaryDecoder.values().length]; + InvalidProtocolBufferException[] exceptions = + new InvalidProtocolBufferException[BinaryDecoder.values().length]; + + boolean hasMessage = false; + boolean hasException = false; + for (int i = 0; i < BinaryDecoder.values().length; ++i) { + try { + messages[i] = BinaryDecoder.values()[i].parseProto2(bytes); + hasMessage = true; + } catch (InvalidProtocolBufferException e) { + exceptions[i] = e; + hasException = true; + } + } + + if (hasMessage && hasException) { + StringBuilder sb = + new StringBuilder("Binary decoders disagreed on whether the payload was valid.\n"); + for (int i = 0; i < BinaryDecoder.values().length; ++i) { + sb.append(BinaryDecoder.values()[i].name()); + if (messages[i] != null) { + sb.append(" accepted the payload.\n"); + } else { + sb.append(" rejected the payload.\n"); + } + } + throw new RuntimeException(sb.toString()); + } + + if (hasException) { + // We do not check if exceptions are equal. Different implementations may return different + // exception messages. Throw an arbitrary one out instead. + throw exceptions[0]; + } + + // Fast path comparing all the messages with the first message, assuming equality being + // symmetric and transitive. + boolean allEqual = true; + for (int i = 1; i < messages.length; ++i) { + if (!messages[0].equals(messages[i])) { + allEqual = false; + break; + } + } + + // Slow path: compare and find out all unequal pairs. + if (!allEqual) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < messages.length - 1; ++i) { + for (int j = i + 1; j < messages.length; ++j) { + if (!messages[i].equals(messages[j])) { + sb.append(BinaryDecoder.values()[i].name()) + .append(" and ") + .append(BinaryDecoder.values()[j].name()) + .append(" parsed the payload differently.\n"); + } + } + } + throw new RuntimeException(sb.toString()); + } + + return messages[0]; + } + private Conformance.ConformanceResponse doTest(Conformance.ConformanceRequest request) { - TestMessagesProto3.TestAllTypes testMessage; + com.google.protobuf.AbstractMessage testMessage; + boolean isProto3 = request.getMessageType().equals("proto3"); switch (request.getPayloadCase()) { case PROTOBUF_PAYLOAD: { - try { - testMessage = parseBinary(request.getProtobufPayload()); - } catch (InvalidProtocolBufferException e) { - return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build(); + if (isProto3) { + try { + testMessage = parseBinaryToProto3(request.getProtobufPayload()); + } catch (InvalidProtocolBufferException e) { + return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build(); + } + } else if (request.getMessageType().equals("proto2")) { + try { + testMessage = parseBinaryToProto2(request.getProtobufPayload()); + } catch (InvalidProtocolBufferException e) { + return Conformance.ConformanceResponse.newBuilder().setParseError(e.getMessage()).build(); + } + } else { + throw new RuntimeException("Protobuf request doesn't have specific payload type."); } break; } @@ -256,8 +421,10 @@ class ConformanceJava { case UNSPECIFIED: throw new RuntimeException("Unspecified output format."); - case PROTOBUF: - return Conformance.ConformanceResponse.newBuilder().setProtobufPayload(testMessage.toByteString()).build(); + case PROTOBUF: { + ByteString MessageString = testMessage.toByteString(); + return Conformance.ConformanceResponse.newBuilder().setProtobufPayload(MessageString).build(); + } case JSON: try { -- 2.18.0