/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea Ċ Ċ import Ġcom . intellij . lang . documentation . Abstract Documentation Provider Ċ import Ġcom . intellij . lang . java . Java Documentation Provider Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġorg . jetbrains . kotlin . as Java . Kt Light Declaration Ċ import Ġorg . jetbrains . kotlin . descriptors . Declaration Descriptor Ċ import Ġorg . jetbrains . kotlin . descriptors . Declaration Descriptor With Source Ċ import Ġorg . jetbrains . kotlin . descriptors . Value Parameter Descriptor Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . analyze Ċ import Ġorg . jetbrains . kotlin . idea . cache s . resolve . get Resolution Facade Ċ import Ġorg . jetbrains . kotlin . idea . core . completion . Declaration Lookup Object Ċ import Ġorg . jetbrains . kotlin . idea . k doc . K Doc Finder Ċ import Ġorg . jetbrains . kotlin . idea . k doc . K Doc Renderer Ċ import Ġorg . jetbrains . kotlin . idea . k doc . resolve K Doc Link Ċ import Ġorg . jetbrains . kotlin . psi . Kt Declaration Ċ import Ġorg . jetbrains . kotlin . psi . Kt Element Ċ import Ġorg . jetbrains . kotlin . psi . Kt Reference Expression Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . getElement Text WithContext Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Non Strict Parent OfType Ċ import Ġorg . jetbrains . kotlin . renderer . Descriptor Renderer Ċ import Ġorg . jetbrains . kotlin . renderer . Classifier Name Policy Ċ import Ġorg . jetbrains . kotlin . resolve . Binding Context Ċ import Ġorg . jetbrains . kotlin . resolve . lazy . Body Resolve Mode Ċ import Ġorg . jetbrains . kotlin . resolve . source . Psi Source Element Ċ import Ġorg . jetbrains . kotlin . utils . addTo Std lib . constant Ċ Ċ class ĠKotlin Quick Documentation Provider Ġ: ĠAbstract Documentation Provider () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Quick Navigate Info ( element : ĠPsi Element ?, Ġoriginal Element : ĠPsi Element ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( element Ġ== Ġnull ) Ġnull Ġelse ĠgetText ( element , Ġoriginal Element , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Doc ( element : ĠPsi Element , Ġoriginal Element : ĠPsi Element ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetText ( element , Ġoriginal Element , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Documentation Element For Link ( psi Manager : ĠPsi Manager , Ġlink : ĠString , Ġcontext : ĠPsi Element ?): ĠPsi Element ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ! is ĠK t Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Context Ġ= Ġcontext . analyze ( Body Resolve Mode . PAR TIAL ) ĊĠĠĠĠĠĠĠ Ġval Ġcontext Descriptor Ġ= Ġbinding Context [ Binding Context . DECL AR ATION _ TO _ DESCRIPTOR , Ġcontext ] ĊĠĠĠĠĠĠĠ Ġif Ġ( context Descriptor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdescriptors Ġ= Ġresolve K Doc Link ( context . get Resolution Facade (), Ġcontext Descriptor , Ġnull , ĠString Util . split ( link , Ġ", ")) ĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġdescriptors . first OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( target Ġis ĠDeclaration Descriptor With Source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġtarget . source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( source Ġas ? ĠPsi Source Element )?. psi ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Documentation Element For Lookup Item ( psi Manager : ĠPsi Manager , Ġ` object `: ĠAny ?, Ġelement : ĠPsi Element ?): ĠPsi Element ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(` object ` Ġis ĠDeclaration Lookup Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ` object `. psi Element ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLogger . getInstance ( Kotlin Quick Documentation Provider :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDESCRIP TOR _ RENDER ER Ġ= ĠDescriptor Renderer . HTML . with Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Name Policy Ġ= ĠClass ifier Name Policy . SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Companion ObjectName Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetText ( element : ĠPsi Element , Ġoriginal Element : ĠPsi Element ?, Ġquick Navigation : ĠBoolean ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠK t Declaration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrender Kotlin Declaration ( element , Ġquick Navigation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( element Ġis ĠK t Light Declaration < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorigin Ġ= Ġelement . kotlin Origin Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrender Kotlin Declaration ( origin , Ġquick Navigation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( quick Navigation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Expression Ġ= Ġoriginal Element ?. get Non Strict Parent OfType < Kt Reference Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reference Expression Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġreference Expression . analyze ( Body Resolve Mode . PAR TIAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclaration Descriptor Ġ= Ġcontext [ Binding Context . REFERENCE _ TARGET , Ġreference Expression ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Descriptor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmix Kotlin To Java ( declaration Descriptor , Ġelement , Ġoriginal Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġelement Ġwas Ġresolved Ġto Ġnon - kotlin Ġelement , Ġit Ġwill Ġbe Ġrendered Ġwith Ġown Ġprovider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrender Kotlin Declaration ( declaration : ĠK t Declaration , Ġquick Navigation : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġdeclaration . analyze ( Body Resolve Mode . PAR TIAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdeclaration Descriptor Ġ= Ġcontext [ Binding Context . DECL AR ATION _ TO _ DESCRIPTOR , Ġdeclaration ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Descriptor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info (" Failed Ġto Ġfind Ġdescriptor Ġfor Ġdeclaration Ġ" Ġ+ Ġdeclaration . getElement Text WithContext ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" No Ġdocumentation Ġavailable " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( declaration Descriptor Ġis ĠValue Parameter Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġcontext [ Binding Context . VALUE _ PARAMETER _ AS _ PROPERTY , Ġdeclaration Descriptor ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( property Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclaration Descriptor Ġ= Ġproperty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrendered Decl Ġ= ĠDESCRIP TOR _ RENDER ER . render ( declaration Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! quick Navigation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrendered Decl Ġ= Ġ"< pre >" Ġ+ Ġrendered Decl Ġ+ Ġ"</ pre >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment Ġ= ĠK Doc Finder . find K Doc ( declaration Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comment Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrendered Comment Ġ= ĠK Doc Renderer . render K Doc ( comment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rendered Comment . startsWith ("< p > ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrendered Decl Ġ+= Ġrendered Comment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrendered Decl Ġ= Ġ"$ rendered Decl < br /> $ rendered Comment " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrendered Decl ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmix Kotlin To Java ( declaration Descriptor : ĠDeclaration Descriptor , Ġelement : ĠPsi Element , Ġoriginal Element : ĠPsi Element ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Info Ġ= ĠJava Documentation Provider (). get Quick Navigate Info ( element , Ġoriginal Element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrendered Decl Ġ= Ġconstant Ġ{ ĠDESCRIP TOR _ RENDER ER . with Options Ġ{ Ġwith Defined In Ġ= Ġfalse Ġ} Ġ}. render ( declaration Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrendered Decl Ġ+ Ġ"< br /> Java Ġdeclaration :< br /> " Ġ+ Ġoriginal Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ