package Ġnet . cord a . dj vm . rules . implementation Ċ Ċ import Ġnet . cord a . dj vm . code . Emitter Ċ import Ġnet . cord a . dj vm . code . Emitter Context Ċ import Ġnet . cord a . dj vm . code . Instruction Ċ import Ġnet . cord a . dj vm . code . instructions . Member Access Instruction Ċ Ċ /** Ċ Ġ* ĠWh itelisted Ġclasses Ġmay Ġstill Ġreturn Ġ[ java . lang . String ] Ġfrom Ġsome Ċ Ġ* Ġfunctions , Ġe . g . Ġ[ java . lang . Object . toString ]. ĠSo Ġalways Ġexplicitly Ċ Ġ* Ġinvoke Ġ[ sandbox . java . lang . String . to DJ VM ] Ġafter Ġthese . Ċ Ġ*/ Ċ class ĠReturn Type Wrapper Ġ: ĠEmit ter Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġemit ( context : ĠEmit ter Context , Ġinstruction : ĠInstruction ) Ġ= Ġcontext . emit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( instruction Ġis ĠMember Access Instruction Ġ&& Ġcontext . whitelist . matches ( instruction . owner )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġinvoke Method () Ġ= Ġinvoke Virtual ( instruction . owner , Ġinstruction . member Name , Ġinstruction . signature ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has String ReturnType ( instruction )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevent Default () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Method () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Static (" sandbox / java / lang / String ", Ġ" to DJ VM ", Ġ"( Ljava / lang / String ;) L sandbox / java / lang / String ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas String ReturnType ( method : ĠMember Access Instruction ) Ġ= Ġmethod . signature . endsWith (" ) Ljava / lang / String ; ") Ċ }