package Ġs ny k . ad visor . build systems Ċ Ċ import Ġcom . intellij . json . Json Element Types Ċ import Ġcom . intellij . json . psi . JsonObject Ċ import Ġcom . intellij . json . psi . JsonProperty Ċ import Ġcom . intellij . json . psi . Json StringLiteral Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . psi . Psi Document Manager Ċ import Ġcom . intellij . psi . Psi WhiteSpace Ċ import Ġcom . intellij . psi . impl . source . tree . Leaf Psi Element Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġkotlin . math . min Ċ Ċ class ĠN pm Support ( private Ġval Ġeditor : ĠEditor ) Ġ{ ĊĊĠĠĠ Ġfun Ġget PackageName ( line Number : ĠInt ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġeditor . document ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġeditor . project Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġpsi File Ġ= ĠPsi Document Manager . getInstance ( project ). get Psi File ( document ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġline Start Element Ġ= Ġpsi File . findElement At ( document . getLine Start Offset ( line Number )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġline Ġshould Ġstart Ġwith ĠPsi WhiteSpace Ġfollowing Ġby ĠJson Property ĊĠĠĠĠĠĠĠ Ġ// Ġor Ġwith ĠJson Property Ġitself Ġ( represent ed Ġby Ġleaf Ġwith Ġtype ĠJson Element Types . DOUBLE _ QUOT ED _ STRING ) ĊĠĠĠĠĠĠĠ Ġval Ġname 2 version Property Element : ĠJson Property Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Start Element Ġis ĠPsi WhiteSpace Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġfor Ġmulti - line ĠPsi WhiteSpace Ġelement Ġ( i . e . Ġfew Ġempty Ġlines ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . get LineNumber Checked ( line Start Element . text Range . end Offset ) Ġ== ĠlineNumber ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ( line Start Element . next Sibling Ġas ? ĠJson Property ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Start Element Ġis ĠLeaf Psi Element Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Start Element . elementType Ġ== ĠJson Element Types . DOUBLE _ QUOT ED _ STRING Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsee ( Psi Viewer ) ĠPsi Ġrepresentation Ġof Ġpackage Ġdependencies Ġin Ġpackage . json , Ġi . e . Ġ" adm - zip ": Ġ" 0 . 4 . 7 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Start Element . parent Ġis ĠJson StringLiteral Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Start Element . parent . parent Ġis ĠJson Property ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġline Start Element . parent . parent Ġas ĠJson Property ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Inside NPM Dependencies ( name 2 version Property Element )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġshow ĠS cores Ġif Ġfew Ġpackages Ġare Ġon Ġthe Ġsame Ġline ĊĠĠĠĠĠĠĠ Ġval Ġprev Name 2 Version Element Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Tree Util . get Prev Sibling OfType ( name 2 version Property Element , ĠJson Property :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( prev Name 2 Version Element Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . get LineNumber Checked ( prev Name 2 Version Element . text Range . end Offset ) Ġ== ĠlineNumber ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġnext Name 2 Version Element Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPsi Tree Util . getNext Sibling OfType ( name 2 version Property Element , ĠJson Property :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( next Name 2 Version Element Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument . get LineNumber Checked ( next Name 2 Version Element . text Range . end Offset ) Ġ== ĠlineNumber ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġsee ( Psi Viewer ) ĠPsi Ġrepresentation Ġof Ġpackage Ġdependencies Ġin Ġpackage . json , Ġi . e . Ġ" adm - zip ": Ġ" 0 . 4 . 7 " ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( name 2 version Property Element . firstChild Ġis ĠJson StringLiteral Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname 2 version Property Element . firstChild . firstChild Ġis ĠLeaf Psi Element Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( name 2 version Property Element . firstChild . firstChild Ġas ĠLeaf Psi Element ). elementType Ġ== ĠJson Element Types . DOUBLE _ QUOT ED _ STRING ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname 2 version Property Element . firstChild . text . remove Sur rounding ("\" ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsee ( Psi Viewer ) ĠPsi Ġrepresentation Ġof Ġ" dependencies " Ġin Ġpackage . json ĊĠĠĠ Ġprivate Ġfun Ġis Inside NPM Dependencies ( element : ĠJson Property ) Ġ= ĊĠĠĠĠĠĠĠ Ġelement . parent Ġis ĠJsonObject Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . parent . parent Ġis ĠJson Property Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . parent . parent . firstChild Ġis ĠJson StringLiteral Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement . parent . parent . firstChild . text Matches ("\" dependencies \" ") ĊĊĠĠĠ Ġprivate Ġfun ĠDocument . get LineNumber Checked ( offset : ĠInt ): ĠInt Ġ= Ġget LineNumber ( min ( offset , Ġtext Length )) Ċ } Ċ