package Ġcom . p anda 9 1 2 . def ensor . plugin . internal . interceptor Ċ Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . internal . Byte code Interceptor Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . internal . Output Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . internal . visitor . Base Class Reader Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . internal . visitor . Base Class Visitor Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . internal . visitor . Base Method Visitor Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . utils . FILE _ DEF ENSOR Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . utils . SAFE _ FILE Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . utils . convertTo Static Descriptor Ċ import Ġcom . p anda 9 1 2 . def ensor . plugin . utils . to Internal Name Ċ import Ġorg . object web . asm .* Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġp anda Ġon Ġ 2 0 2 1 / 9 / 1 4 Ġ 1 6 : 2 9 Ċ Ġ*/ Ċ class ĠFile Interceptor Ġ: ĠByte code Interceptor Ġ{ ĊĊĠ Ġoverride Ġfun Ġintercept ( chain : ĠByte code Interceptor . Chain ): ĠOutput Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġchain . request () ĊĊĠĠĠ Ġval Ġcr Ġ= ĠBaseClass Reader ( input . bytes ) ĊĠĠĠ Ġval Ġcw Ġ= ĠClass Writer ( cr , ĠClass Writer . COMPUTE _ MAX S ) ĊĠĠĠ Ġcr . accept ( object Ġ: ĠBaseClass Visitor ( cw ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Method ( ĊĠĠĠĠĠĠĠ Ġaccess : ĠInt , ĊĠĠĠĠĠĠĠ Ġname : ĠString ?, ĊĠĠĠĠĠĠĠ Ġdescriptor : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsignature : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexceptions : ĠArray < out ĠString >? ĊĠĠĠĠĠ Ġ): ĠMethod Visitor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmv Ġ= Ġsuper . visit Method ( access , Ġname , Ġdescriptor , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Method Visitor ( mv ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġinput . bytes Ġ= Ġcw . toByteArray () ĊĠĠĠ Ġreturn Ġchain . proceed ( input ) ĊĠ Ġ} Ċ } Ċ Ċ class ĠFile Method Visitor ( mv : ĠMethod Visitor ) Ġ: ĠBase Method Visitor ( mv ) Ġ{ ĊĊĠ Ġoverride Ġfun Ġvisit Type Insn ( opcode : ĠInt , Ġtype : ĠString ?) Ġ{ ĊĠĠĠ Ġif Ġ( opcode Ġ== ĠOp codes . NEW Ġ&& Ġtype Ġ== ĠType . get Internal Name ( File :: class . java )) Ġ{ ĊĠĠĠĠĠ Ġsuper . visit Type Insn ( opcode , ĠSA FE _ FILE . to Internal Name ()) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsuper . visit Type Insn ( opcode , Ġtype ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvisit Method Insn ( ĊĠĠĠ Ġopcode : ĠInt , ĊĠĠĠ Ġowner : ĠString , ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġdescriptor : ĠString , ĊĠĠĠ Ġis Interface : ĠBoolean ĊĠ Ġ) Ġ{ ĊĊĠĠĠ Ġ// ĠFile ĊĠĠĠ Ġif Ġ( owner Ġ== ĠType . get Internal Name ( File :: class . java )) Ġ{ ĊĠĠĠĠĠ Ġval ĠfileDescriptor Ġ= ĠType . get Descriptor ( File :: class . java ) ĊĠĠĠĠĠ Ġif Ġ( opcode Ġ== ĠOp codes . INV OK ES PE CIAL Ġ&& Ġname Ġ== Ġ"< init >") Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . visit Method Insn ( opcode , ĠSA FE _ FILE . to Internal Name (), Ġname , Ġdescriptor , Ġis Interface ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( opcode Ġ== ĠOp codes . IN VOKE VIRTUAL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getName " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getParent " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getParent File " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / io / File ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getPath " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" is Absolute " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getAbsolutePath " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" get Absolute File " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / io / File ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getCanonical Path " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getCanonical File " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / io / File ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" to URL " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / net / URL ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" to URI " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / net / URI ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" can Read " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" can Write " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" exists " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" isDirectory " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" isFile " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" is Hidden " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" lastModified " Ġ&& Ġdescriptor Ġ== Ġ" () J ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" length " Ġ&& Ġdescriptor Ġ== Ġ" () J ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" createNew File " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" delete " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" delete On Exit " Ġ&& Ġdescriptor Ġ== Ġ" () V ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" list " Ġ&& Ġdescriptor Ġ== Ġ" ()[ Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" list " Ġ&& Ġdescriptor Ġ== Ġ"( Ljava / io / Filename Filter ; )[ Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" list Files " Ġ&& Ġdescriptor Ġ== Ġ" ()[ Ljava / io / File ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" list Files " Ġ&& Ġdescriptor Ġ== Ġ"( Ljava / io / Filename Filter ; )[ Ljava / io / File ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" list Files " Ġ&& Ġdescriptor Ġ== Ġ"( Ljava / io / File Filter ; )[ Ljava / io / File ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" mkdir " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" mkdir s " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" rename To " Ġ&& Ġdescriptor Ġ== Ġ"( Ljava / io / File ;) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set LastModified " Ġ&& Ġdescriptor Ġ== Ġ"( J ) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set ReadOnly " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set Writable " Ġ&& Ġdescriptor Ġ== Ġ"( ZZ ) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set Writable " Ġ&& Ġdescriptor Ġ== Ġ"( Z ) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set Readable " Ġ&& Ġdescriptor Ġ== Ġ"( ZZ ) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set Readable " Ġ&& Ġdescriptor Ġ== Ġ"( Z ) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set Executable " Ġ&& Ġdescriptor Ġ== Ġ"( ZZ ) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" set Executable " Ġ&& Ġdescriptor Ġ== Ġ"( Z ) Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" can Execute " Ġ&& Ġdescriptor Ġ== Ġ" () Z ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" getTotal Space " Ġ&& Ġdescriptor Ġ== Ġ" () J ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" get Free Space " Ġ&& Ġdescriptor Ġ== Ġ" () J ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" get Us able Space " Ġ&& Ġdescriptor Ġ== Ġ" () J ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" toString " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / lang / String ; ") Ġ|| ĊĠĠĠĠĠĠĠĠĠ Ġ( name Ġ== Ġ" to Path " Ġ&& Ġdescriptor Ġ== Ġ" () Ljava / nio / file / Path ; ") ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . visit Method Insn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOp codes . IN VOKE STATIC , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFILE _ DEF ENSOR . to Internal Name (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . convertTo Static Descriptor ( file Descriptor ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Interface ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuper . visit Method Insn ( opcode , Ġowner , Ġname , Ġdescriptor , Ġis Interface ) ĊĠ Ġ} Ċ }