package Ġorg . jetbrains . du kat . compiler . tests . descriptors Ċ Ċ import Ġorg . jetbrains . kotlin . builtins . Kotlin Built Ins Ċ import Ġorg . jetbrains . kotlin . com . google . common . collect . Lists Ċ import Ġorg . jetbrains . kotlin . descriptors .* Ċ import Ġorg . jetbrains . kotlin . incremental . components . No Lookup Location Ċ import Ġorg . jetbrains . kotlin . resolve . Descriptor Utils Ċ import Ġorg . jetbrains . kotlin . resolve . scopes . Member Scope Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . kotlin . types . isError Ċ Ċ import Ġjava . io . Print Stream Ċ Ċ object ĠDescriptor Validator Ġ{ ĊĊĠĠĠ Ġfun Ġvalidate ( validation Strategy : ĠValidation Visitor , Ġdescriptor : ĠDeclaration Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcollector Ġ= ĠDiagnostic Collector For Tests () ĊĠĠĠĠĠĠĠ Ġvalidate ( validation Strategy , Ġdescriptor , Ġcollector ) ĊĠĠĠĠĠĠĠ Ġcollector . done () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvalidate ( ĊĠĠĠĠĠĠĠ Ġvalidator : ĠValidation Visitor , ĊĠĠĠĠĠĠĠ Ġdescriptor : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRecursive Descriptor Processor . process ( descriptor , Ġcollector , Ġvalidator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreport ( collector : ĠDiagnostic Collector , Ġdescriptor : ĠDeclaration Descriptor , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcollector . report ( Validation Diagnostic ( descriptor , Ġmessage )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠDiagnostic Collector Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġreport ( diagnostic : ĠValidation Diagnostic ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠValidation Visitor Ġprivate Ġconstructor () Ġ: ĠDeclaration Descriptor Visitor < Boolean , ĠDiagnostic Collector > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġallow Error Types Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġrecursive Filter Ġ= Ġ{ Ġ_: ĠDeclaration Descriptor Ġ-> Ġtrue Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġallow Error Types (): ĠValidation Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . allow Error Types Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Scope ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : ĠMember Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( descriptor Ġin ĠDescriptor Utils . getAll Descriptors ( scope )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recursive Filter ( descriptor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . accept ( Scope Validator Visitor ( collector ), Ġscope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠKotlin Type ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġdescriptor , Ġ" No Ġtype ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! allow Error Types Ġ&& Ġtype . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġdescriptor , Ġ" Error Ġtype : Ġ$ type ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Scope ( type . member Scope , Ġcollector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate ReturnType ( descriptor : ĠCallable Descriptor , Ġcollector : ĠDiagnostic Collector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Type ( descriptor , Ġdescriptor . returnType , Ġcollector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Types ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtypes : ĠCollection < Kotlin Type > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( type Ġin Ġtypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Type ( descriptor , Ġtype , Ġcollector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Callable ( descriptor : ĠCallable Descriptor , Ġcollector : ĠDiagnostic Collector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ReturnType ( descriptor , Ġcollector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Type Parameters ( collector , Ġdescriptor . type Parameters ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Value Parameters ( collector , Ġdescriptor . value Parameters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Package Fragment Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠPackage Fragment Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Scope ( descriptor . get Member Scope (), Ġcollector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Package View Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠPackage View Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! recursive Filter ( descriptor )) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Scope ( descriptor . member Scope , Ġcollector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Variable Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠVariable Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate ReturnType ( descriptor , Ġcollector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Function Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠFunction Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Callable ( descriptor , Ġcollector ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Type Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠType Parameter Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Types ( descriptor , Ġcollector , Ġdescriptor . upper Bounds ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Type ( descriptor , Ġdescriptor . default Type , Ġcollector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Class Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠClass Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Type Parameters ( collector , Ġdescriptor . declared Type Parameters ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsup ert ypes Ġ= Ġdescriptor . type Constructor . sup ert ypes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sup ert ypes . isEmpty () Ġ&& Ġdescriptor . kind Ġ!= ĠClass Kind . INTERFACE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! Kotlin Built Ins . is Special Class With No Sup ert ypes ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġdescriptor , Ġ" No Ġsup ert ypes Ġfor Ġnon - trait ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Types ( descriptor , Ġcollector , Ġsup ert ypes ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Type ( descriptor , Ġdescriptor . default Type , Ġcollector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Scope ( descriptor . un subst it uted Inner Classes Scope , Ġcollector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprimary Ġ= ĠLists . newArrayList < Constructor Descriptor >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( constructor Descriptor Ġin Ġdescriptor . construct ors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constructor Descriptor . is Primary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimary . add ( constructor Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( primary . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġdescriptor , Ġ" Many Ġprimary Ġconstructors : Ġ$ primary ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprimary Constructor Ġ= Ġdescriptor . un subst it uted Primary Constructor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( primary Constructor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! descriptor . construct ors . contains ( primary Constructor )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector , Ġprimary Constructor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Primary Ġconstructor Ġnot Ġin Ġget Construct ors () Ġresult : Ġ" Ġ+ Ġdescriptor . construct ors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompanion Object Descriptor Ġ= Ġdescriptor . comp anion Object Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp anion Object Descriptor Ġ!= Ġnull Ġ&& Ġ! comp anion Object Descriptor . is Companion Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġcompanion Object Descriptor , Ġ" Companion Ġobject Ġshould Ġbe Ġmarked Ġas Ġsuch ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Type Alias Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠType Alias Descriptor , Ġdata : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġtype alias ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Module Declaration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠModule Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Constructor Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Descriptor : ĠConstructor Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Function Descriptor ( constructor Descriptor , Ġcollector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Equal Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Descriptor , Ġcollector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" return Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Descriptor . containing Declaration . default Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstructor Descriptor . returnType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Script Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript Descriptor : ĠScript Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠProperty Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Callable ( descriptor , Ġcollector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgetter Ġ= Ġdescriptor . getter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Equal Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgetter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" getter Ġreturn Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgetter . returnType !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Accessor ( descriptor , Ġcollector , Ġgetter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetter Ġ= Ġdescriptor . setter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( setter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( setter , Ġcollector , Ġ" setter Ġparameter Ġcount ", Ġ 1 , Ġsetter . value Parameters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Equal Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" setter Ġparameter Ġtype ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . value Parameters [ 0 ]. type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" corre sponding Ġproperty ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetter . corre sponding Property ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Value Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠValue Parameter Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvisit Variable Descriptor ( descriptor , Ġcollector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property Getter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠProperty Getter Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvisit Function Descriptor ( descriptor , Ġcollector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property Setter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠProperty Setter Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvisit Function Descriptor ( descriptor , Ġcollector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Receiver Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠReceiver Parameter Descriptor , Ġcollector : ĠDiagnostic Collector ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidate Type ( descriptor , Ġdescriptor . type , Ġcollector ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġerror Types Forbidden (): ĠValidation Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠValidation Visitor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġerror Types Allowed (): ĠValidation Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠValidation Visitor (). allow Error Types () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Type Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters : ĠList < Type Parameter Descriptor > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġparameters . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Parameter Descriptor Ġ= Ġparameters [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Parameter Descriptor . index Ġ!= Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Parameter Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Incorrect Ġindex : Ġ" Ġ+ Ġtype Parameter Descriptor . index Ġ+ Ġ" Ġbut Ġmust Ġbe Ġ" Ġ+ Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Value Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters : ĠList < Value Parameter Descriptor > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġparameters . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Parameter Descriptor Ġ= Ġparameters [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Parameter Descriptor . index Ġ!= Ġi ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Parameter Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Incorrect Ġindex : Ġ" Ġ+ Ġvalue Parameter Descriptor . index Ġ+ Ġ" Ġbut Ġmust Ġbe Ġ" Ġ+ Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< T > ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual : ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ!= Ġactual ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġdescriptor , Ġ" Wrong Ġ$ name : Ġ$ actual Ġmust Ġbe Ġ$ expected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġassert Equal Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected : ĠKotlin Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual : ĠKotlin Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected . isError Ġ&& Ġactual . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( descriptor , Ġcollector , Ġname , Ġexpected . toString (), Ġactual . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( expected Ġ!= Ġactual ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġdescriptor , Ġ" Wrong Ġ$ name : Ġ$ actual Ġmust Ġbe Ġ$ expected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġvalidate Accessor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠProperty Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollector : ĠDiagnostic Collector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccessor : ĠProperty Accessor Descriptor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġfix Ġthe Ġdis cre p ancies Ġin Ġdescriptor Ġconstruction Ġand Ġenable Ġthese Ġchecks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// assertEquals ( accessor , Ġcollector , Ġname Ġ+ Ġ" Ġvisibility ", Ġdescriptor . get Visibility (), Ġaccessor . get Visibility ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// assertEquals ( accessor , Ġcollector , Ġname Ġ+ Ġ" Ġmod ality ", Ġdescriptor . get Modal ity (), Ġaccessor . get Modal ity ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( accessor , Ġcollector , Ġ" corre sponding Ġproperty ", Ġdescriptor , Ġaccessor . corre sponding Property ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠScope Validator Visitor ( private Ġval Ġcollector : ĠDiagnostic Collector ) Ġ: ĊĠĠĠĠĠĠĠ ĠDeclaration Descriptor Visitor < Void , ĠMember Scope > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġreport ( expected : ĠDeclaration Descriptor , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( collector , Ġexpected , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġassert Found ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : ĠMember Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfound : ĠDeclaration Descriptor ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( found Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( expected , Ġ" Not Ġfound Ġin Ġ$ scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ!== Ġfound ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( expected , Ġ" Lookup Ġerror Ġin Ġ$ scope : Ġ$ found ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġassert Found ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : ĠMember Scope , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected : ĠDeclaration Descriptor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfound : ĠCollection < Declaration Descriptor > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! found . contains ( expected )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( expected , Ġ" Not Ġfound Ġin Ġ$ scope : Ġ$ found ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Package Fragment Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠPackage Fragment Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Package View Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠPackage View Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Variable Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠVariable Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Found ( scope , Ġdescriptor , Ġscope . get Cont ributed Variables ( descriptor . name , ĠNo Lookup Location . FROM _ TEST )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Function Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠFunction Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Found ( scope , Ġdescriptor , Ġscope . get Cont ributed Functions ( descriptor . name , ĠNo Lookup Location . FROM _ TEST )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Type Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠType Parameter Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Found ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . get Cont ributed Classifier ( descriptor . name , ĠNo Lookup Location . FROM _ TEST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Class Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠClass Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Found ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope . get Cont ributed Classifier ( descriptor . name , ĠNo Lookup Location . FROM _ TEST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Type Alias Descriptor ( descriptor : ĠType Alias Descriptor , Ġdata : ĠMember Scope ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġtype alias ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Module Declaration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠModule Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( descriptor , Ġ" Module Ġfound Ġin Ġscope : Ġ$ scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Constructor Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠConstructor Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( descriptor , Ġ" Constructor Ġfound Ġin Ġscope : Ġ$ scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Script Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠScript Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( descriptor , Ġ" Script Ġfound Ġin Ġscope : Ġ$ scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠProperty Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvisit Variable Descriptor ( descriptor , Ġscope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Value Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠValue Parameter Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvisit Variable Descriptor ( descriptor , Ġscope ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property Getter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠProperty Getter Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( descriptor , Ġ" Getter Ġfound Ġin Ġscope : Ġ$ scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Property Setter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠProperty Setter Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( descriptor , Ġ" Setter Ġfound Ġin Ġscope : Ġ$ scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Receiver Parameter Descriptor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor : ĠReceiver Parameter Descriptor , Ġscope : ĠMember Scope ĊĠĠĠĠĠĠĠ Ġ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport ( descriptor , Ġ" Receiver Ġparameter Ġfound Ġin Ġscope : Ġ$ scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠValidation Diagnostic ( val Ġdescriptor : ĠDeclaration Descriptor , Ġval Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstack Trace : ĠThrowable Ġ= ĠThrowable () ĊĊĠĠĠĠĠĠĠ Ġfun Ġprint StackTrace ( out : ĠPrint Stream ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Trace . printStackTrace ( out ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ descriptor Ġ> Ġ$ message " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDiagnostic Collector For Tests Ġ: ĠDiagnostic Collector Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġerrors Found Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreport ( diagnostic : ĠValidation Diagnostic ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiagnostic . printStackTrace ( System . err ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerrors Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdone () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( errors Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Descriptor Ġvalidation Ġfailed Ġ( see Ġmessages Ġabove )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ