From 44dc9d7cd7ed0132b40ca540295bd21c3e7210dd Mon Sep 17 00:00:00 2001 From: John Dallaway Date: Sat, 24 Jun 2023 14:59:55 +0100 Subject: [PATCH] Propagate exceptions in default binary file viewer --- NewAndNoteworthy/CDT-11.3.md | 9 ++ NewAndNoteworthy/images/CDT-11.3-hex-dump.png | Bin 0 -> 21037 bytes .../ui/editor/DefaultBinaryFileEditor.java | 96 +++++++++++------- 3 files changed, 68 insertions(+), 37 deletions(-) create mode 100644 NewAndNoteworthy/images/CDT-11.3-hex-dump.png diff --git a/NewAndNoteworthy/CDT-11.3.md b/NewAndNoteworthy/CDT-11.3.md index 5488724697b..cb1edd53692 100644 --- a/NewAndNoteworthy/CDT-11.3.md +++ b/NewAndNoteworthy/CDT-11.3.md @@ -6,6 +6,15 @@ This is the New & Noteworthy page for CDT 11.3 which is part of Eclipse 2023-09 # Release Notes +# Build + +## Default Binary File Viewer + +Enhancements to the _Default Binary File Viewer_ accommodate archive files in the same manner as other binary files. +Users may now invoke GNU `objdump` by double-clicking on a GNU archive file. +In cases where the configured binary parser does not support the launching of GNU tools, the viewer now presents a hex dump of the binary file rather than raw text: + +

# API Changes, current and planned diff --git a/NewAndNoteworthy/images/CDT-11.3-hex-dump.png b/NewAndNoteworthy/images/CDT-11.3-hex-dump.png new file mode 100644 index 0000000000000000000000000000000000000000..8184ad3d6111790ecc19c358e3acfd192c39af5a GIT binary patch literal 21037 zcmdSBcT`i|*Di{$UBrS40s<=x$O^k|;D9$L%pNK~BqJ-1BtLk55_o^sUS7wE zjErUg{CDhnPdlEBOzk^V`k|(~A%1i`PaKu_a}(t^Nt|q|diwEQ#=D%Ii)XNwR&VuX zE@$+ZpE07pU4ngt3^;XGB-Q?EikjQ0*Egr`C4>rVUp_T>|K$mXGto}+oykt77k(`G zrXD^q7$rEn6g)9_vP_-ComN-9=TZHs+N!@qVt;>V+?RLV2pALDS1$_z-VX|~n>^1L zx6cC)3fEoV>t!|fVYB|6< zklCmFy2Gv(MaB#+PN7~b+x}q-%I{a-px=7@;o0ph*34tEY`~u?BPdU{JVaQfzM)5z)kn`ol6wqSW@LoaFwM z?ad0}9Cr;jyXN6Q5ixHm^ih^AX)bmTf_c-WzeybR)cPdjN6*nP2OBn2tBV?la(+|w zhYe|k^@sD+qw$AT`+KJ)2?6_wv|KfBk7YA4GE8P$L z{&W{@9UnV$JNZbNw8Jkq=nsPQ(co><!`Itt1q>!JXWh!^+RNN4+3o3)&kc0%m$3Pc@|7mA(i+}i+8p-`b`|{s zIgMpjnGk_FJZ~Wyl6LHIUL_uA3)m~8T{oi6_NJTfn$z~?IAIes)>g?q?wTT_-MhpX zz=UT}YkT7dJw#l6ImW8nW>nUvjCos-sL@|sgVpv~%vGLJ4MLo~@BuKQG5&o>MbAe!d;hnY()@IA)4 zg+!NZE&n^WG*7uB1ua7lXD2&lk`9wTcVDw({wZu9PA+n|eVb&{x=l9J(_JFK!ON1| zMpYFNu`QBLM(ekw4>^iZM$wXXWrH7+oKeKaOGR&^78=KEBZ(a~cUASH*GAn&iM>4B z_O`=_hF+s0p;?yB|*ro{X}wT)+NP=#;WX;WdnPRc*) z@GF+4F*NjZ8j0?aeVuZ=SpPnu_Zgv`{m33ehS{1^Tr#A0mr#f6ON+!qKfk5=0p_4u z2|t;`+J3_~wlLc1XL1sPx=$eKgj#Km6Nyh1W1ln?d%HM<$g-lo`Hq8MTAUSca0q`Y74f`6~Wn98D zo4a?{umxMR&XG&_I-`rc*1d%42cbcepW`T}i*Dl%Kl~!fL=(mRR;|?L%yy%Kb*Q zzC%4aIDRM!?y{f$Q*fI@FYT^tc~R&lKiE|ZD|yl~wDqqapM}E|W3@B?eti*jpt!WS zO(P4Cx_RaLryVvZ+O#Kl-4kS_avE zWhh|D_Vmo>V3S6OPce!5RL^I@rdV$u^S2)(xozgG%aesd)(-l7 z#U$z^!sNX3;t)2h^kNMXW=ta#t7aqDRU=|9ShUnqds@~@?Zx`!bvQxQjS{iW57aM0 zr=$8}1aUlz`?;l}x`l?@OJSzCh}s*w3b89H{gvr9l?e|IDNP2bjU`h)6n5d6@z%`s zvD<7GM6O&4*=U+Z`jt1zqOLABT+jvN`{IPlP-yi7G?NYt^EhK-&RNbdLZ7+)v#(h5 z#p0HNk%QgL1U@@gnPobSz`MhuLEO}knbc$Y_%v+iD@&^khP}Nt%-OO`Rjggy9>6e4DI)Cs3xu7%XM}p>@mwhD@+AKHZOSi`Z{k$9jFx* zNnUybH&kCN8;XjB@73ML`Ex*#`KvZ~L!UD9C}4-85z=S5Z&sr|FeoH?Ai1K>`+i)> zi&wfeyGBsKbwHgMSSTWwWrD=iEu;o2diOOby#~v2wd(9q%5Yk zWzq(p-$Mo(0Fz?yZN;V+$8Zvt@u@AT4CzD993X*^r$w%9)ZaY5J}44db8HXTzL(2i zDHcNBB97Ms+HSS?4r+z2N-3lL8G@_Jl_B)Nh*@-CsrUReei~bug`fHWZXk_f>}n64 zpZvz^?xyhYKu@O?mGVIKgR8=y1r6JUI|QD1mbKsEMv2W3`??zu^sN11(JAM6H=Ny9 zJCKtbsCMtreW4$apFfWe(>s=pLpEWu2E!~cm}XQTnt^w$h9&Y}o}D(9-zdxRKFm@W>mT+v>!5K;ro#(?2AJM`j9sOM{GqfF^<%JV?e!bGasUOjOUf=2E|eq^#o z$$g)<;g=ja+F%Hu4*@Xk3q=Is`q1QtOM2=aoI~xlzj94oVubgtVi1SJ8fM(GPN_9g zgRLZ_I@LR<{vH{MEAKd1RpRw8@66SUPZ=8z8s3=ubUIQU;(Qc%94ArHsHIheP=!L!5E&(9@;Pu+K6-hyLz zn?!qqQ@7sGwbBU8JEE&ZA*PS14cgWpdiW+^x0@<9B)gQh9 zgE{+y<|sgpFev#mdnM)&37?Wk;bum((XUbSIRVjGcbT|+Zru~igq~TWT_d%B%3%vT z?PnrS7ah8KltpW{_$6v=!(0VlsH4VjwXFNS1MGc$usjG3VaBoRz#;-?y{5&bzA$i0 zmAej@FHB%g@vo0m>39NuP_B@&iIb-K1xLZaMPLTMUIq+P*gIYplM^Xz=N9(q^=cEK zgQl$Ph)@SUwP6`;r4gQ(G&jT`ZAExI09W(rKU~e$+^sivm3HcotGagOdirCzZrDbv zD_~DUcR};nRk(`Sm-k5ibQo_u@6Vjr)QxyXJXZNIc&eIaJ@iqzHRK7ZsA-uknx{V1 zn;Z8+rAXz|0e;Fro`!s6qD8^#8f9Cxuk662U`7LX-!{|I)0{UWeJd@bV*4mmp*)`mLT9 z#~P5n_Ql=T*V|iSlWxMrS*{-56cnDi&P8g4#@ol+iJ_0p9T+gT#p?4+Y^~xLC5yX&I@ zU0|}f0rQmiWI~}1|0&`|zw%#djW6B#+~YLHY!sXknQgYI_GlNGU6+A*8Xg7>M;j)o zVI~C}mmkqSZ~o95teBLAC^r}AWIw_Sh>r!Dx+fI=;9Jssgf}$wA{{Ux$Mv>< zm<);ng;Wig2&7+I-tvJu)&*)L&Alc;{dNKOrvu*iY;=-7?A)rV)+do8yc;~f!rZhV zR{Tk&gQhQ)Eb9bIiY_j5oGp9DT&E{9?!GG@m#UljUJ?Oe&h;&l_k0ECR^Gc!M}4+7 z;_u{DgDHIlUE~BfZ(ZZp>(2By=IJTVsuRqlju?je7lv_jqTBNh%WkxzdtK*Z;gI)s z*PxM68(F~UxYig3Uu*rH{+C#`FPa=wQA;J`Oa6FV^tnXNHmJW0`yEU+X?%(0i09u5 z=R?Og{GykMgC4tw){!L}{C9NiZ>m%}sX|3=T3m;ohSbGw$mBeZ`j7oF4(63ep1v3? zA<-aFgLN(LzB+0RRY~lkm5~{a-NJ;0L3_9O*$&Pombk|+oR_@hq7s)XD-#owUD8zz zw5x#j0T!V0!-hbu)rql3fc@!u{{##YmL;9w<9n}w;fq1CU+LqACCobS{|U;-uu<@` z0X9o*&^1u{Y@iN7Lwi(DD}FbbLp(f0YbF`y?C}l`5r2T5P5%Kkniiyfo&9$W91l6$ z5fz@!d#BxYb>!QSaWn9*U#?!W(ZE>o@vdmv~Oukz@LCpW#(14b!sktcn5&O8Y)(P$n3AcoGT zOBtMDpd0_%HOue%?Pn+3oy1hlfn-=L&>CKT4-MybNcu0$=_p*?WotAN7jb;{Q{zdu z^+WBhuf-qChmTt9ETcJZr!cu*A%dWG;eHf`%VoiF*H$xthrc zJ=G|S@`x8>Zf{<%!l(l+*?m-HCE3AP4d^H@2N|h&lntP3`WQr8W0ien6Y=UJctW_5BZqbOqZ^u zwQ0T@nk6d%+l4fI_}74nq#dgLv@Mc9wQTqYA%2;z*Yse=Q;yC#8-9fWv*=HB?ZYM~ z*5vaL=T_#C;@4Vw+S4>19>uXzXm_q>jCb42X4ErpP%A@Y(4B7oW#nJtKsgB66B#ph zAS|K_gxJiS64o2ZZlnO-ojc@eZTz2;8~{e~6QgYED=L4shMGhp&uXMz~$ zp%{xDY?Rr6hB*tbr+(pd7wuJ9?ED)Y1s`?dKl@qus^KG$2g6bb%?;;57RN$B*9ye0YE=$t{LqLpt%>QtgMx%RPA1f$U&A>{~g zV^_Qg3rhtb6ZBX%yE{L<7f9^cj|r4=nVTG7ZogTMuwd-ugfmW@pi9W4nU%lujj986$!04Wx{co4NwjZTAP8;Zdk(AgY5A{Jb5LaLu`5e&jWnN#tmV(`4osx~K)NRiC`jsIc zg~n{`ctM=k2+qih^UK@YA3T>RY{VF97bF-eyJarBtokW0iW+&b{IY)0lCzdEbr>>C z9%HRu*P$9zK`tpoNvK=K%?794*eh2DdS#JMGev$Cu`Z1305k20OS^SwFTjS&os zQYo3mB0ZT@73EJNUzhghBj20La;x59-J9Hllu$EU+$_IwKcOE4J!Xp%Xi&V0tfaB1 zzrL}XG-gNJ$_YEkZ1E8KhX1En-wyhALG6N3NBaK8Ra0KN(T{Rnp2FFMWADM>F-!XF zNY1FLm~+f z-*sl^)%DY?_ElPL42G}^=j3Twgln->nnw^`(6M)!n`#cEC=QM5!^zb#8fk)5j@(Hc78 z2J*u|Tw=pQ@nLE8s-1E=t7&DWj`kp zqfKLMqm%YV>S}Bfc%6^&7-$~Nsk9zWE;ZkM<&u~n)kUl$E%4z$?Q;|^qm4$=%ODlv zU~XTDtJfD7>7W3DBiY7JRU+M@bjbMvXaz&J1ZHPV%et;F231i^-VAUl8$sNuIuF&k z5q^}g*mu#cEP<^J%&Q%FT_beQVNK^iNjkNLrt0%}@5wt4&bpCS3?V)Ap`+hY>tRW1 zeYK^y@D=3zD0H^=N%$@31%=pYtI=n_9$`{pr9<$Cn1z=fbgg zcwF1CnVn2zXJQfJzDXsItESLJG*)x@cu_i_ocsmA`k|&1+TERHG1}XV@>cwr=b^_@ z*z2~{=b^$rl7L9XBd#o_BM3|&mlaP8;U%x2!(;SrIVqqaP=ouz9^0lVM=*&%u;RXo zNo+Zl^(xVG>St|hE{SxA`tw-)CNn0LdOmqI6&t3Lf|fmfANr;Yp`*iZ1sygDjF}I0 z1YB=DSEYvuCh~g|RYcP@zSBgeofPISPXmuoTnzsW1>|kpiqOTyeJ@Y6*m{?1S&Au> zMT5X;w=;HUt$eH1c*y5cYX5#*!^7{sVPZJ67nGllkn_Q6slDI&c=*ph)a0wcHkbMz zb~5ovl$!ky?}>VKD9OH^_xH~?gR$6Yw50jk?LVLSU)I6?C)|iz?q5pN5Kyx2?(H4m z*Q-2F^QR3&^rx{E*%HjHMZqpL_(1r9{2SIes^>C7DW*; za9DJ^bOoM36?9%4UmCsfBiYr$Lj~0VyXvqcPR`Ew^`GA`hsC-NcIEprnyn(ghu2q~ zenNLX3~D3zg|>)`H&;Nn8a|{DTd`eg94g3JwSZ~&nof;N1tnmoQ^1&!} zr`FGHKPdd3rJU$GQW&+wopI7IBp&2cQhBy(F3m;Gd(GknOcsGn=~7 z<_iSu>bt!~FvHgu;2aVZu8uz1FDq?`%>StKPK-WOgIk(B>O@}eL3}TZfUIH?KjdC5 zbQ+7x6-Zo)nu*lbHZ%rRveFp-nc2`cJhaehSm0YNNNTSMUnU3iGIpROYU3D3&~L?T zyxKEUsX_sOGI)P&+k5k4o*5Faj(fN$zyxu0%}80^9sln|vTf+z59Xfy^}TLO7AK)^ zAV0+@8}%NeZ=NlufjTvrS(>?*0ONjP`j9&}co-lYprq1DUtH-@11qml^z?+kHa)f{ zlrolE+*2+u?UsFzmPjCeWgm}>e2#&0GYT=`cPz`IXL*}$$7Uhaddi!>FLa3)+_d<* zNFC%FD5Qvf)t$`M#=Mfu0Pb*m!pSOig;>4zrx{^FKX#^rBT+?%Ew0q$%00+aUmh}? z_iMN>LW49dzTsS3Y7tX!I-)}EXFtth_KepsMCXVq-LB4A8tFX;yD(OLzm%_52X^7Y zoHLZ`d39h3hGq;{Cq%MN)ZG-WGEgRvi=&hoSUwE=u%xHcWENy;E*Ld9M}@++nG5Fm zea_IMGmPuI&S|4Q-lfjeGuVagK=O^X(j_W)VZ1nWbF)Fa^>hUSbmZ)6&JFXU6)Cf_UtXK))oM{^ zdX%T$N5XQ*8H`Iyp=L7&NRwsD9U4-|^&-Q-&?6jbTxg>w3axPeh6YTS$wD8^>GjQB z1qmAe3sZl}+2*xaHoEQk1(n>7Iv@Cx@Ca_1b(@sAhE#r>Ub9Wo+tI^kEXjf(>y@q% z%c%g3vJryGqY4THjpbf&d9j#*YCpItA@{R7A1Q7Jfaabn-IL^|^(?aCz`HmMfE*!$ z`Px+QyD%z2a=}!(ka&JvXp7C@DlL=F70yRGo}LoAuitNjc9^?NA1Wo)n8ciGXRKo8 zuAWlL?gZKJ~Ayl@I7u9~_B)_vj@;f5o5Q-pO6i&8=0fkHD zfO@S*i8@J_wAD62#K@QH%2(b8yX z+^w+E>3_D0(cZFSvL#naR=TW2_sQzlF^2Nsxz^192pX9?4}f+5E7_6%87lm5O1k8} zHeJ}wwP8&A=8Dar=aKXB^*PeY*fEODczHT#TIgegd{l*VY4jw%Ry@~11+QVZxs~cF zU;Q0J$E1j+tFe*m<<_s12Is1s5mvJq&_7W3+B8#V|3PL+&(=_e@^a(?W_TvF*~aKD zw6VCps)EVpp8fJ!PivO)OyqgHIQZn#JYfMrzK(7U*j~?5FGU4UGYjg2*zZo48tf-Y zBt<)zccdn=ID6?6{xEA7577VUQa|qv8$oJKt5P2lLbUC`B;{skX=2BMow10G?L>nOmHorr78;441k)Fa}^qT}dgqudW3(7v$qn zthG_Rwyfdd;aPgeT(FzDSG`LQ@K2IA#JcMGXI=*%S#=~L~ z2O=Ou3~{&F^q7vPg1RKF)$*4FwK%v?y!|)7x}5-Wb`YUFfK1ds8Fx1~%mF>*CbC95 zE7)zS&HVI>3|vo4f~g^&?P&~@7V_-^lSS7$%`oU)0R(vtF)k@{4czX6Qg6(+De;|O zR*a#N6ZPz{Z7=JWIKG{A>)VxTPm&H8-*;?v~T*xUrxXH(- zlbe+Yx}uFLwaw69dRCz?A`Hrz*4kYcF-hXS!18Kcx@t=^04G zF9wMx%4qUeg@I`a4N>T6$Ays|(dg96G02}MjrlTNVHW_Lm`J8gqQ3_!T<_o= zQVauzc^pu3Ch=M|>dn`twi@CBq$9ao!In0*(1Wuxt9x_TT(C5WlX|V)UjJ$4kTjqP zPEiXQqd7n@eL&>yQk+LVcD!6%MZ&n_98L?@lL7$vb5p5?uoiCt=voRvuMfMf{9U9! z`Id}M(@>4REvpx-xoRYk7=~9$)XL%^qhF}4D*u_=cpL}U3oD*d2dN6cYevmIDN(p| z4rnNkv*@0zXXGdB#MTjU3Gt4dEMlM+z9;q~ODL%*mX1G}Cs$30zit4qm#}})!TO}) zn(O;41kl5a^HlM@;KDG$mSl|a0>C)WK&cM4bKEG;ffhc)t|n-U?pHT(=OdV+?CXKn zq)UHl#*{W%0q}b-c+T&3mT)1f1sJDL#Fz)A@zN$0kmfByon-larJf&$w`ggfPtfP^ z3x$zlBLFOzUvBZVX!tcPtqlM|iQV+E@UZep@6r=_+g2?$Qle0wUeqQRE9ZeF9E?%a z#|M%u|#e3lp(_aBa7e$D7cWsxtKPqsVSxY@>~f^d{4?ckPIcwI4X zGxN2nqNDmpHO*4xZ1YLk+jA7XKLgH-b4ps=@3RaaHfMQ335aznOwh*kd?#As*4AOF z2*f~|T!=Ei&g%;VkCa;K?9odKsL36ut7|N?;ncUQEB}^~RQDR}2NdmKp1(D_*QR`q zZh_kE>pfdHswi|fZ&J-fFJ5tJx()1J^5V69`563``o=LDMq#nCtISSd)?5X z7oJ~7{Su0CIJW=vblQd5;vw8g$?38x_Mb+TW9~LFqC$$Q|3AQoc~cZ>bp<``MBnqF zZ=&il*|V&3v45&k^<<2eeWBq$ArUe!v{{?E#aF| zcMUU;AL@051sWI3IcMrPYx8Zy!hK6~1=R)>t_E%g07&xP%B~_{U^=t4u$;Fx0TyBU zoV!Kg_J}H$A>PgIEaTTlphu}vh@GtR3`^q<7wYh4FUlS|cz@HFKNB(Bu$lgA3*k}Gf~&~-(}MaWyZl0=QLrmKQ3BYxZ5Q;oA=u|0jc`SRkA`$7WB{ptL6Cm zF`?~(mKqT{f&1^5*r{+evD1sj$At>>9(}Oo=>#|Mh10fK`bF@K<|-QF%IMMb%-b z$aTj0iMOUO=Wljx&Eo39Aa4e;GWEjF$38GroJ*wORvtf{kl8d`e*rp1A1!!j@)OP= z6ypjz1^sLS@3txiyq74eL3buAAM#!;w=#e&anXCFz60_{t~nT!!V!J2ePV5G-WYK8JaMbAGub$gDBgddArA6Bnk$hNWl8h+yxZs@T z8jD8@Kx~$iouMirY2yIjd<{P~iRGU?m74+(Hce)LIH?pex4j;R$=st^ucL9gQ8k1EIXF5glJSL^Q79Df^AT9h zwXPFOLYcq83XaP!Iie;JsTyqyj+Kz!2Id*s2;$<8v!waey|jyMYb)#g!M#I4V|uUc z_)|)71r>vNy+#oIQd+CK3XdQ1nU%d}8`RZH4t5Pp7Qq(f`mT`QEh1?_cnE!KuG68l z4$vouI5Tc7N)EBDnIZfiY^B0mr6LvGh1 ^)Pf{$IQSzQ;BQx^>`Hg;xj1d#FPC( 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 SYTW08?Dcf@b6Mw<&;$UhwsS84 literal 0 HcmV?d00001 diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DefaultBinaryFileEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DefaultBinaryFileEditor.java index 7bb2cd57aee..9d123c18e00 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DefaultBinaryFileEditor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/DefaultBinaryFileEditor.java @@ -18,22 +18,22 @@ package org.eclipse.cdt.internal.ui.editor; import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; import java.io.FileInputStream; +import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; +import java.io.UncheckedIOException; import java.text.MessageFormat; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Consumer; import org.apache.commons.io.HexDump; import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.IArchive; -import org.eclipse.cdt.core.model.IBinary; import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.utils.IGnuToolFactory; import org.eclipse.cdt.utils.Objdump; import org.eclipse.core.resources.IFile; @@ -59,41 +59,62 @@ public class DefaultBinaryFileEditor extends TextEditor { private static final String CONTENT_TRUNCATED_MESSAGE_FORMAT = "\n--- {0} ---\n"; //$NON-NLS-1$ - private InputStream getObjdumpInputStream(Objdump objdump) throws IOException { - // limit editor to X MB, if more - users should use objdump in command - // this is UI blocking call, on 56M binary it takes more than 15 min - // and generates at least 2.5G of assembly - int limitBytes = 6 * 1024 * 1024; // this can run reasonably within seconds - byte[] output = objdump.getOutput(limitBytes); - if (output.length >= limitBytes) { - // append a message for user - String message = "\n" + MessageFormat.format(CONTENT_TRUNCATED_MESSAGE_FORMAT, //$NON-NLS-1$ - CEditorMessages.DefaultBinaryFileEditor_TruncateMessage) + objdump.toString(); - System.arraycopy(message.getBytes(), 0, output, limitBytes - message.length(), message.length()); - } - return new ByteArrayInputStream(output); - } - - private InputStream getHexDumpInputStream(IPath filePath) throws IOException { + private InputStream getInputStream(Consumer writer) throws IOException { + final AtomicReference writerException = new AtomicReference<>(); final PipedInputStream pipedInputStream = new PipedInputStream(); - final OutputStream pipedOutputStream = new PipedOutputStream(pipedInputStream); - new Thread(() -> { - try { - writeHexDump(filePath, pipedOutputStream); - } catch (IOException e) { - CUIPlugin.log(e); - } finally { + final FilterInputStream filterInputStream = new FilterInputStream(pipedInputStream) { + @Override + public void close() throws IOException { try { - pipedOutputStream.close(); - } catch (IOException e) { - CUIPlugin.log(e); + final IOException exception = writerException.get(); + if (exception != null) { + // propagate pipe writer exception to pipe reader + throw new IOException(exception.getMessage(), exception); + } + } finally { + super.close(); } } + }; + final OutputStream pipedOutputStream = new PipedOutputStream(pipedInputStream); + new Thread(() -> { + try (pipedOutputStream) { + writer.accept(pipedOutputStream); + } catch (UncheckedIOException e) { + writerException.set(e.getCause()); + } catch (IOException e) { + writerException.set(e); + } }).start(); - return pipedInputStream; + return filterInputStream; } - private void writeHexDump(IPath filePath, OutputStream outputStream) throws IOException { + private void writeObjdump(Objdump objdump, OutputStream outputStream) { + try (InputStream objdumpStream = objdump.getInputStream()) { + int offset = 0; + while (true) { + // read objdump content via 4 KiB buffer + final byte[] buffer = objdumpStream.readNBytes(4096); + if (0 == buffer.length) { // end of file stream + break; + } + // limit to 16 MiB objdump content + if (offset >= 0x1000000) { + // append a message for user + String message = "\n" + MessageFormat.format(CONTENT_TRUNCATED_MESSAGE_FORMAT, //$NON-NLS-1$ + CEditorMessages.DefaultBinaryFileEditor_TruncateMessage) + objdump.toString(); + outputStream.write(message.getBytes()); + break; + } + outputStream.write(buffer); + offset += buffer.length; + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + private void writeHexDump(IPath filePath, OutputStream outputStream) { final int BYTES_PER_LINE = 16; // hard-coded in HexDump class - do not modify try (InputStream fileStream = new BufferedInputStream(new FileInputStream(filePath.toFile()))) { int offset = 0; @@ -103,7 +124,7 @@ public class DefaultBinaryFileEditor extends TextEditor { if (0 == buffer.length) { // end of file stream break; } - // limit content to 16MiB data + // limit to 16 MiB binary file content if (offset >= 0x1000000) { // append a message for user String message = MessageFormat.format(CONTENT_TRUNCATED_MESSAGE_FORMAT, @@ -114,6 +135,8 @@ public class DefaultBinaryFileEditor extends TextEditor { HexDump.dump(buffer, offset, outputStream, 0); offset += buffer.length; } + } catch (IOException e) { + throw new UncheckedIOException(e); } } @@ -125,11 +148,11 @@ public class DefaultBinaryFileEditor extends TextEditor { Objdump objdump = factory.getObjdump(filePath); if (objdump != null) { // use output from objdump tool - return getObjdumpInputStream(objdump); + return getInputStream(stream -> writeObjdump(objdump, stream)); } } // fall back to a hex dump if objdump tool not available - return getHexDumpInputStream(binaryFile.getPath()); + return getInputStream(stream -> writeHexDump(filePath, stream)); } catch (IOException e) { String message = (e.getMessage() != null ? e.getMessage() : ""); //$NON-NLS-1$ throw new CoreException(Status.error(message, e)); @@ -142,13 +165,12 @@ public class DefaultBinaryFileEditor extends TextEditor { if (editorInput instanceof IFileEditorInput fileEditorInput) { IFile file = fileEditorInput.getFile(); ICElement cElement = CoreModel.getDefault().create(file); - if (cElement instanceof IArchive || cElement instanceof IBinary) { + if (cElement != null) { IBinaryFile binaryFile = cElement.getAdapter(IBinaryFile.class); if (binaryFile != null) { setDocumentContent(document, getBinaryFileContent(binaryFile), encoding); return true; } - return false; } } return super.setDocumentContent(document, editorInput, encoding);