package Ġorg . jetbrains . k annot ator . annotations Inference . propagation Ċ Ċ import Ġorg . jetbrains . k annot ator . declarations . Variance Ċ import Ġorg . jetbrains . k annot ator . declarations . Variance .* Ċ import Ġorg . jetbrains . k annot ator . declarations . Position Within Declaration Ċ Ċ interface ĠAnnotation L attice < A > Ġ{ ĊĠĠĠ Ġfun Ġleast Common Upper Bound ( a : ĠA , Ġb : ĠA ): ĠA ĊĠĠĠ Ġfun Ġgreatest Common Lower Bound ( a : ĠA , Ġb : ĠA ): ĠA Ċ } Ċ Ċ fun Ġ< A > ĠAnnotation L attice < A >. un ify ( position : ĠPosition Within Declaration , Ġparent : ĠA , Ġchild : ĠA , Ġfail OnError : ĠBoolean Ġ= Ġtrue ): ĠA Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( position . variance ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCO VARIANT Ġ-> Ġleast Common Upper Bound ( parent , Ġchild ) ĊĠĠĠĠĠĠĠ ĠCON TR AV ARI ANT Ġ-> Ġgreatest Common Lower Bound ( parent , Ġchild ) ĊĠĠĠĠĠĠĠ ĠIN VARIANT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fail OnError ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( parent Ġ== Ġchild ) Ġ{" Conflict ing Ġannotations : Ġ$ parent Ġand Ġ$ child "} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ< A > ĠAnnotation L attice < A >. subs umes ( position : ĠPosition Within Declaration , Ġparent : ĠA , Ġchild : ĠA ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġparent Ġ== Ġun ify ( position , Ġparent , Ġchild , Ġfalse ) Ċ Ċ fun Ġ< A > ĠAnnotation L attice < A >. un ify ( position : ĠPosition Within Declaration , Ġannotations : ĠCollection < A >): ĠA Ġ= ĊĠĠĠĠĠĠĠ Ġannotations . reduce Ġ{ Ġleft , Ġright Ġ-> Ġun ify ( position , Ġleft , Ġright )} Ċ Ċ abstract Ġclass ĠTwo Element L attice < A >( val Ġsmall : ĠA , Ġval Ġbig : ĠA ) Ġ: ĠAnnotation L attice < A > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġgreatest Common Lower Bound ( a : ĠA , Ġb : ĠA ): ĠA Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( a Ġ== Ġbig Ġ&& Ġb Ġ== Ġbig ) Ġbig Ġelse Ġsmall ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġleast Common Upper Bound ( a : ĠA , Ġb : ĠA ): ĠA Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( a Ġ== Ġsmall Ġ&& Ġb Ġ== Ġsmall ) Ġsmall Ġelse Ġbig ĊĠĠĠ Ġ} Ċ Ċ } Ċ