From 09d16ba463ab71be9855b29a952e03be988f9934 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Mon, 2 Dec 2024 04:01:58 +0000 Subject: [PATCH] adds Mosaic_Util.make_all_public_methods_proxy --- developer/javac/Mosaic_Util.java | 40 +++++++++++++++++++++++++++++++ release/Mosaic.jar | Bin 8278 -> 9222 bytes 2 files changed, 40 insertions(+) diff --git a/developer/javac/Mosaic_Util.java b/developer/javac/Mosaic_Util.java index 3a2cdbf..bb6474f 100644 --- a/developer/javac/Mosaic_Util.java +++ b/developer/javac/Mosaic_Util.java @@ -5,12 +5,16 @@ import java.io.ByteArrayOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; +import java.lang.reflect.Constructor; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Proxy; import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.function.Predicate; + public class Mosaic_Util{ // Linear search with a predicate @@ -83,4 +87,40 @@ public class Mosaic_Util{ } } + public static Object make_all_public_methods_proxy( Class class_metadata ) { + try { + // Check if the class is public + int modifiers = class_metadata.getModifiers(); + if (!java.lang.reflect.Modifier.isPublic( modifiers )) { + throw new IllegalAccessException( + "The class " + class_metadata.getName() + " is not public and cannot be proxied." + ); + } + + // Create the proxy + Object proxy = java.lang.reflect.Proxy.newProxyInstance( + class_metadata.getClassLoader() + ,class_metadata.getInterfaces() + ,(proxy_object ,method ,args) -> { + Method original_method = class_metadata.getDeclaredMethod( + method.getName() + ,method.getParameterTypes() + ); + original_method.setAccessible( true ); + Object real_instance = class_metadata.getDeclaredConstructor().newInstance(); + return original_method.invoke( real_instance ,args ); + } + ); + + return proxy; + + } catch (Exception e) { + throw new RuntimeException( + "Failed to create proxy for class: " + class_metadata.getName() + ,e + ); + } + } + + } diff --git a/release/Mosaic.jar b/release/Mosaic.jar index 576d66e549b3f79e16666e6cab8593130c4a86e2..e264a8a446390e228f003f7dfdc57b5d1f4f91b5 100644 GIT binary patch delta 3300 zcmV)*-K!!*SP)h>@6aWYa2ml2jf{_h60|g+0u}WY80|g+0v#kM!1_K2kg0nUV zlL7+;AcC{Z3abeN1t5ZxdK5x`m5 z_qa_>zkAiJTCzN`uO$`p_C zRVg0ftD6wD{93-Qj<4q%)a)DU_$IzN#kcUS2H%$C+f$f)hdT0}CL+97Ex)sgDDQ0| zriOS(`yPYuP0`BB2H#i5_wxfyB)FR5hxp+X>-do-48@&PwB7tziVyJP2G`W$dJ}a@ z$Yy>*Eq_uCKh;EvTPZ$&$eh6|20z_Iz2eDoJH=~USHp)CGkXAFK;Eq>16=Tm%y zk1FCX82qC0@?!?SBqRo$f)nf)qM43ULTu2Rw1tLYr(hqOou06ZW7dRg3r)jb&T>y# zMMtg6#8`07@rAD8oHyO`lx_K5!71d&?A*D6=X&`oJtLlPIl1zGpYfA{Rnk-p&R6A!Rmj+@7h~LN0K;LeGh!J?Z4E!0zu@dO$F2*PgZu zfwHm2cCx(f3u|jA6zXQ?`uFz>t40GW zcVWbu(IO0v2z8@>PQG9Tvqf7tG%(h;)ZYCWrQ$y1cW6rz_GQOczGrHoU5)1<&vR|7 z&@V(S*A-S-t~>7A!T6Nr`nJ%vNWeU|ika0puQ2H-8^&G74}|7goPs!l3<>7EAkv zkjL?QjykUWw5BRcZK0*IHFW&Q<(xgE98}>F*nTixu%_+B0avj!;Ri+AnilFqbH^vG zz%ux_P_I-^+rDq*ZDGfKIiXB8DrYuMTNmtch2PBVgzMzSr|saJH|dYh6urw=gzeQb z2VKkeYrmO)x@m9HnR4u+FT~4dTdEkV9bTPNa+D@Zc_OS?qN4)j0&O6xLOip?9!0Nd z(u1xwJuzu*ThYU9y~5;DAD7D`no_isdrYlx+|z3z5!xZFUtY8j zvx<3NXz+?o-YHn_`249=McZ=6oq``&g`6#lRxJ#gr=nrNHFyq zalQP1&fs#O%=m=KY0fkx_{$`JW%5b>+T?F|J;~oD`Baj>Gx>Y^gtZHPkDV)emsDOf z`3L@Serxe-H2Ad1Kk?5={zb|BSA%~u`FCD7`42vmU?F8orz3`%Z z;lUc3Ynm9>CHk&pSXC2~W40gkr6r}Zpf0%O#c^G9`%-EV&$*uJT~=9>lcTdUGez6? z?MY!>wa`kY(Q>O_!WBQTr-i6pELQgeCyGuX2zB-gokxmAub5WmI)!{X@Y1e-mrqZ5 z#dHu_*p>F@?OV9Cdldazh^(!lUod9W$}I>DGa=o|T^K7`s>sZ{d6&(~&H9nBr3i8A zUhG4;-AHedEqD8q-XS{#Gj9hY3mrr>(=oIt?^WtznMX)E{s~>rg;-`tRWl=R2gh_5 zwQKC0oz_i8TGEc6E_gvYEdFVKt1y|)Sp`Lzu+yp{JND#GVRhaPbe0_UtVt!meNop~ zwWa#(yd4Y`0=qb6=J5WR4Qm<>F zUg_di`F0TY1y1;xn>nqFYpv3zQ(AF07kEWsPv-s&x=OiwR@V-xeNR`Fn5C zK@}{Y+h(Y8<+B}2cLy!k9d&fevu(*{Xlz&k)W-=zKhT39Ks6GB--QGo{!1ZJD-qiKul{;|EhylnrUMT ztz>A|+R{X6W;KU@7$mM_bC@IA@GM7p9N~#YTtgMEw^g{_jxY?YCi*5xgAtMT&k*OB z_U|}#oZ!ha0LO`F|JG-3zmK)qIihfj*hes8SBXV$5mz=xt5Dfgh06M}b;BB=NXr4C zj;EFvp3uTSy1ekM_YywJSXp?UC=rEWbYMgF_RBP8Hz_NQ_EN_?IUAmm1H^Q6o__`NnWj~-o2)+8eT#-U z8ll9R?(7_YP2sF_j-u8h#O#Z=$J*m1+S+5UU1i;|8?&a+om= za*{(#Fo?qu4cSA)splx~Vw@-^Y35lh6{?(Pf}BQw=RA|-G!Eyn$q~_j_K~>505OB9 z`Ck(;XuU&{cs13aRc|EUAaclHT{Cs$Iafw=D=~egXBW^M>8e7rtAb`%=NucunTD?A zSopWTFV@{2E78`i035kNduMizO&Y+iY5+UwrIkJGrB4HRn8)t|aEN-|MjLNuGsAQ; zLN7yq9Oh{rXM`s>##0>E@%2vLp#jViqn>>lzz9#20aRgiwgTW;91Y;G20U?xUZQtn zW-K6C0nB&6*fPUEwN>et#FfVuVqVY&z5*F zJI4-{8!{tZ*M?sqTjuJ7&YN_-rmuAuyXh!@r_T_Fv&4B9CgZH(SvF#`i7B>_rxTkV ze0DQSFBjR%r3wylx^VT2Q}1({K_c|h#IqE%p2K*|fKIe#h4OjjOtenH~K1jN<0+4uI>_l z4_~X)piLNnLxl4rxIi5atC^;m0^9MlJNrWoWrNjhmO*XuPA+muU+_*YbA%|XNppou z#Mn+9pReo77wCE^5DvLZlKz z*F+CUV@kDeWzoZnMXxD~esLMmo0bt|T`mVv-mT&KV#xq0L>`nb*+Dzc1E(+yy@S>h%oy?*t708mQ@2q;oT&n^rA z0L2>s08mQ-0u%rg00;;O00kg|lUN-%0|g+0vy&Y>0Rsgff|Jr7Spx+if|D*ET>}Lm if|HIPU=9T!f>|h1Mb9n_006}sll&i42KgWW0000gD`{u| delta 2349 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 T2mk;M6O*hXR0c^M000005DINd -- 2.20.1