package Ġnet . cord a . dj vm . rules Ċ Ċ import Ġnet . cord a . dj vm . code . Instruction Ċ import Ġnet . cord a . dj vm . references . Class Representation Ċ import Ġnet . cord a . dj vm . references . Member Ċ import Ġnet . cord a . dj vm . validation . RuleContext Ċ Ċ /** Ċ Ġ* ĠRepresentation Ġof Ġa Ġrule Ġthat Ġapplies Ġto Ġclass Ġdefinitions . Ċ Ġ*/ Ċ abstract Ġclass ĠClass Rule Ġ: ĠRule Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġa Ġclass Ġdefinition Ġis Ġvisited . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠThe Ġcontext Ġin Ġwhich Ġthe Ġrule Ġis Ġto Ġbe Ġvalidated . ĊĠĠĠĠ Ġ* Ġ@ param Ġclazz ĠThe Ġclass Ġto Ġapply Ġand Ġvalidate Ġthis Ġrule Ġagainst . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġvalidate ( context : ĠRule Context , Ġclazz : ĠClass Representation ) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġvalidate ( context : ĠRule Context , Ġclazz : ĠClass Representation ?, Ġmember : ĠMember ?, Ġinstruction : ĠInstruction ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġrun Ġvalidation Ġstep Ġif Ġapplied Ġto Ġthe Ġclass Ġitself . ĊĠĠĠĠĠĠĠ Ġif Ġ( clazz Ġ!= Ġnull Ġ&& Ġmember Ġ== Ġnull Ġ&& Ġinstruction Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ( context , Ġclazz ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ