package Ġorg . jetbrains . dok ka Ċ Ċ import Ġcom . google . inject . Singleton Ċ Ċ enum Ġclass ĠRef Kind Ġ{ ĊĠĠĠ ĠOwner , ĊĠĠĠ ĠMember , ĊĠĠĠ ĠInherit ed Member , ĊĠĠĠ ĠInherit ed Companion Object Member , ĊĠĠĠ ĠDetail , ĊĠĠĠ ĠLink , ĊĠĠĠ ĠHidden Link , ĊĠĠĠ ĠExtension , ĊĠĠĠ ĠIn her itor , ĊĠĠĠ ĠSuper class , ĊĠĠĠ ĠOverride , ĊĠĠĠ ĠAnnotation , ĊĠĠĠ ĠHidden Annotation , ĊĠĠĠ ĠDeprec ation , ĊĠĠĠ ĠTop Level Page , ĊĠĠĠ ĠPlatform , ĊĠĠĠ ĠExternal Type , ĊĠĠĠ ĠAttribute Ref , ĊĠĠĠ ĠAttribute Source Ċ } Ċ Ċ data Ġclass ĠDocumentation Reference ( val Ġfrom : ĠDocumentation Node , Ġval Ġto : ĠDocumentation Node , Ġval Ġkind : ĠRef Kind ) Ġ{ Ċ } Ċ Ċ class ĠPending Documentation Reference ( val Ġlazy Node From : Ġ() Ġ-> ĠDocumentation Node ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlazy Node To : Ġ() Ġ-> ĠDocumentation Node ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkind : ĠRef Kind ) Ġ{ ĊĠĠĠ Ġfun Ġresolve () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfrom Node Ġ= Ġlazy Node From () ĊĠĠĠĠĠĠĠ Ġval Ġto Node Ġ= Ġlazy Node To () ĊĠĠĠĠĠĠĠ Ġif Ġ( from Node Ġ!= Ġnull Ġ&& Ġto Node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Node . add Reference To ( to Node , Ġkind ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠNode Reference Graph () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġnode Map Ġ= Ġhash Map Of < String , ĠDocumentation Node >() ĊĠĠĠ Ġval Ġreferences Ġ= Ġarray ListOf < Pending Documentation Reference >() ĊĊĠĠĠ Ġfun Ġregister ( signature : ĠString , Ġnode : ĠDocumentation Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnode Map . put ( signature , Ġnode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlink ( from Node : ĠDocumentation Node , Ġto Signature : ĠString , Ġkind : ĠRef Kind ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreferences . add ( Pending Documentation Reference ({ Ġ-> Ġfrom Node }, Ġ{ Ġ-> Ġnode Map [ to Signature ]}, Ġkind )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlink ( from Signature : ĠString , Ġto Node : ĠDocumentation Node , Ġkind : ĠRef Kind ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreferences . add ( Pending Documentation Reference ({ Ġ-> Ġnode Map [ from Signature ]}, Ġ{ Ġ-> Ġto Node }, Ġkind )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlink ( from Signature : ĠString , Ġto Signature : ĠString , Ġkind : ĠRef Kind ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreferences . add ( Pending Documentation Reference ({ Ġ-> Ġnode Map [ from Signature ]}, Ġ{ Ġ-> Ġnode Map [ to Signature ]}, Ġkind )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlookup ( signature : ĠString ) Ġ= Ġnode Map [ signature ] ĊĊĠĠĠ Ġfun Ġlookup Or Warn ( signature : ĠString , Ġlogger : ĠD ok ka Logger ): ĠDocumentation Node ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnode Map [ signature ] ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" Can 't Ġfind Ġnode Ġby Ġsignature Ġ`$ signature ` ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresolve References () Ġ{ ĊĠĠĠĠĠĠĠ Ġreferences . forEach Ġ{ Ġit . resolve () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Singleton Ċ class ĠPlatform Node Registry Ġ{ ĊĠĠĠ Ġprivate Ġval Ġplatform Nodes Ġ= Ġhash Map Of < String , ĠDocumentation Node >() ĊĊĠĠĠ Ġoperator Ġfun Ġget ( platform : ĠString ): ĠDocumentation Node Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplatform Nodes . get Or Put ( platform ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDocumentation Node ( platform , ĠContent . Empty , ĠNode Kind . Platform ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ