package Ġcom . github . tag wan . j apm . core Ċ Ċ import Ġcom . github . tag wan . j apm . mgr . Config Mgr Ċ import Ġorg . object web . asm .* Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashSet Ċ Ċ class ĠMonitor Class Visitor ( cw : ĠClass Writer ) Ġ: ĠClass Visitor ( Op codes . ASM 9 , Ġcw ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠclassName : ĠString ĊĠĠĠ Ġprivate Ġvar Ġis Interface : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval ĠfieldName List : ĠArrayList < String > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġsuper Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġinterfaces : ĠHashSet < String > Ġ= ĠHashSet () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¿éĹ® ç±» æĹ¶ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġversion ĊĠĠĠĠ Ġ* Ġ@ param Ġaccess ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġsignature ĊĠĠĠĠ Ġ* Ġ@ param Ġsuper Name ĊĠĠĠĠ Ġ* Ġ@ param Ġinterfaces ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit ( version : ĠInt , Ġaccess : ĠInt , Ġname : ĠString , Ġsignature : ĠString ?, Ġsuper Name : ĠString ?, Ġinterfaces : ĠArray < out ĠString > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . visit ( version , Ġaccess , Ġname , Ġsignature , Ġsuper Name , Ġinterfaces ) ĊĠĠĠĠĠĠĠ ĠclassName Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġis Interface Ġ= Ġaccess Ġand ĠOp codes . ACC _ INTERFACE Ġ!= Ġ 0 ĊĠĠĠĠĠĠĠ Ġthis . super Name Ġ= Ġsuper Name ĊĠĠĠĠĠĠĠ Ġthis . interfaces . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( interfaces Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( interface Name Ġin Ġinterfaces ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . interfaces . add ( interface Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¿éĹ® æĪĲåĳĺ åıĺéĩı æĹ¶ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġå°Ĩ field æŀĦå»º ä¸ĭ setter åĴĮ getter éģ¿åħį æ³¨ åħ¥ æĸ¹æ³ķ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaccess ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġdescriptor ĊĠĠĠĠ Ġ* Ġ@ param Ġsignature ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Field ( access : ĠInt , Ġname : ĠString , Ġdescriptor : ĠString ?, Ġsignature : ĠString ?, Ġvalue : ĠAny ?): ĠField Visitor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġup FieldName Ġ= Ġname . substring ( 0 , Ġ 1 ). toUpperCase () Ġ+ Ġname . substring ( 1 ) ĊĠĠĠĠĠĠĠ ĠfieldName List . add (" get $ up FieldName ") ĊĠĠĠĠĠĠĠ ĠfieldName List . add (" set $ up FieldName ") ĊĠĠĠĠĠĠĠ ĠfieldName List . add (" is $ up FieldName ") ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Field ( access , Ġname , Ġdescriptor , Ġsignature , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¿éĹ® åĪ° æĸ¹æ³ķ æĹ¶ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< p > ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġ æİ¥åı£ ä¸ŃçļĦ æĸ¹æ³ķ å¿½ çķ¥ ĊĠĠĠĠ Ġ* ĠĠĠĠ Ġ ç§ģ æľī æĸ¹æ³ķ ãĢģ æĬ½ è±¡ æĸ¹æ³ķ ãĢģ Object çļĦæĸ¹æ³ķ ãĢģ æŀĦéĢł æĸ¹æ³ķ .. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaccess ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġdescriptor ĊĠĠĠĠ Ġ* Ġ@ param Ġsignature ĊĠĠĠĠ Ġ* Ġ@ param Ġexceptions ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Method ( ĊĠĠĠĠĠĠĠ Ġaccess : ĠInt , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġdescriptor : ĠString , ĊĠĠĠĠĠĠĠ Ġsignature : ĠString ?, ĊĠĠĠĠĠĠĠ Ġexceptions : ĠArray < out ĠString >? ĊĠĠĠ Ġ): ĠMethod Visitor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Interface Ġ|| Ġ! can Inject ( access , Ġname )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Method ( access , Ġname , Ġdescriptor , Ġsignature , Ġexceptions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Config Mgr . validate Base ( this . super Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Method ( access , Ġname , Ġdescriptor , Ġsignature , Ġexceptions ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Config Mgr . validate Interface ( this . interfaces )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . visit Method ( access , Ġname , Ġdescriptor , Ġsignature , Ġexceptions ) ĊĊĠĠĠĠĠĠĠ Ġtotals ++ ĊĠĠĠĠĠĠĠ Ġreturn ĠMonitor Method Visitor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcv . visit Method ( access , Ġname , Ġdescriptor , Ġsignature , Ġexceptions ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ className } :: ${ name }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ åı¯ä»¥ æ³¨ åħ¥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaccess ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcan Inject ( access : ĠInt , Ġname : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name . is Special MethodName ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġä¸į å¯¹ ç§ģ æľī æĸ¹æ³ķ è¿Ľè¡Į æ³¨ åħ¥ ĊĠĠĠĠĠĠĠ Ġif Ġ( access Ġand ĠOp codes . ACC _ PRIVATE Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġä¸į å¯¹ æĬ½ è±¡ æĸ¹æ³ķ ãĢģ native æĸ¹æ³ķ ãĢģ æ¡ ¥ æİ¥ æĸ¹æ³ķ ãĢģ åĲĪ æĪĲ æĸ¹æ³ķ è¿Ľè¡Į æ³¨ åħ¥ ĊĠĠĠĠĠĠĠ Ġif Ġ( access Ġand ĠOp codes . ACC _ AB STR ACT Ġ!= Ġ 0 Ġ|| Ġaccess Ġand ĠOp codes . ACC _ NATIVE Ġ!= Ġ 0 Ġ|| Ġaccess Ġand ĠOp codes . ACC _ BR ID GE Ġ!= Ġ 0 Ġ|| Ġaccess Ġand ĠOp codes . ACC _ SYN TH ET IC Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(" < init >" Ġ== Ġname Ġ|| Ġ"< cl init >" Ġ== Ġname ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġ" main " Ġ|| Ġname Ġ== Ġ" pre main " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġname Ġ== Ġ" getClass " Ġ|| Ġname Ġ== Ġ" hashCode " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġname Ġ== Ġ" equals " || Ġname Ġ== Ġ" clone " || Ġname Ġ== Ġ" toString ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ! fieldName List . contains ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIs Ġspecial Ġmethod Ġname ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠString . is Special MethodName (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsymbol Index Ġ= Ġthis . indexOf ('$ ') ĊĠĠĠĠĠĠĠ Ġif Ġ( symbol Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġleft Paren Index Ġ= Ġthis . indexOf (' (' ) ĊĠĠĠĠĠĠĠ Ġreturn Ġleft Paren Index Ġ< Ġ 0 Ġ|| Ġsymbol Index Ġ< Ġleft Paren Index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Monitor Class Visitor :: class . java ) ĊĠĠĠĠĠĠĠ Ġvar Ġtotals Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ