/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . android . tools . idea . nav . safe args . psi . xml Ċ Ċ import Ġcom . android . Sdk Constants Ċ import Ġcom . android . resources . Resource Url Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Xml Recursive Element Walk ing Visitor Ċ import Ġcom . intellij . psi . xml . Xml File Ċ import Ġcom . intellij . psi . xml . Xml Tag Ċ import Ġcom . intellij . util . Platform Icons Ċ import Ġorg . jetbrains . kotlin . descriptors . Source Element Ċ import Ġorg . jetbrains . kotlin . resolve . source . Psi Source Element Ċ import Ġorg . jetbrains . kotlin . resolve . source . get Psi Ċ Ċ internal Ġfun ĠXml File . find Xml Tag ById ( attr Id : ĠString ): ĠXml Tag ? Ġ{ ĊĠ Ġvar Ġresult Tag : ĠXml Tag ? Ġ= Ġnull ĊĠ Ġval Ġvisitor Ġ= Ġobject Ġ: ĠXml Recursive Element Walk ing Visitor () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġvisit Xml Tag ( tag : ĠXml Tag ) Ġ{ ĊĠĠĠĠĠ Ġsuper . visit Xml Tag ( tag ) ĊĠĠĠĠĠ Ġ// Ġunique Ġresource Ġid Ġin Ġthe Ġsame Ġxml Ġfile ĊĠĠĠĠĠ Ġif Ġ( tag . is Tag Id EqualTo ( attr Id )) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Tag Ġ= Ġtag ĊĠĠĠĠĠĠĠ Ġstop Walk ing () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġthis . accept ( visitor ) ĊĠ Ġreturn Ġresult Tag Ċ } Ċ Ċ internal Ġfun ĠXml Tag . is Tag Id EqualTo ( id : ĠString ): ĠBoolean Ġ{ ĊĠ Ġval Ġtag Id Ġ= Ġthis . getAttribute Value ( Sdk Constants . ATTR _ ID , ĠS dk Constants . ANDROID _ URI ) Ġ?: Ġreturn Ġfalse ĊĠ Ġreturn ĠResource Url . parse ( tag Id )?. name Ġ== Ġid Ċ } Ċ Ċ internal Ġfun ĠXml Tag . find Child Tag Element ByName Attr ( tagName : ĠString , Ġname Attr : ĠString ): ĠXml Tag ? Ġ{ ĊĠ Ġreturn Ġthis . sub Tags . first OrNull Ġ{ ĊĠĠĠ Ġit Ġ!= Ġnull Ġ&& Ġit . local Name Ġ== ĠtagName Ġ&& Ġit . has Matched Name Attr ( name Attr ) ĊĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠXml Tag . find Child Tag Element ById ( tagName : ĠString , Ġid Attr : ĠString ): ĠXml Tag ? Ġ{ ĊĠ Ġreturn Ġthis . sub Tags . first OrNull Ġ{ ĊĠĠĠ Ġit Ġ!= Ġnull Ġ&& Ġit . local Name Ġ== ĠtagName Ġ&& Ġit . has Matched Id Attr ( id Attr ) ĊĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠXml Tag . findFirst Matching Element By Tra ver sing Up ( tagName : ĠString , Ġid Attr : ĠString ): ĠXml Tag ? Ġ{ ĊĠ Ġvar Ġcurrent Tag : ĠXml Tag ? Ġ= Ġthis ĊĠ Ġwhile Ġ( current Tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġfound Ġ= Ġcurrent Tag . find Child Tag Element ById ( tagName , Ġid Attr ) ĊĊĠĠĠ Ġif Ġ( found Ġ!= Ġnull ) Ġreturn Ġfound ĊĠĠĠ Ġcurrent Tag Ġ= Ġcurrent Tag . parent Tag ĊĠ Ġ} ĊĠ Ġreturn Ġnull Ċ } Ċ Ċ internal Ġfun ĠXml Tag . has Matched Name Attr ( name : ĠString ): ĠBoolean Ġ{ ĊĠ Ġreturn Ġthis . attributes . first OrNull Ġ{ ĊĠĠĠ Ġit Ġ!= Ġnull Ġ&& Ġit . local Name Ġ== ĠS dk Constants . ATTR _ NAME Ġ&& Ġit . value Ġ== Ġname ĊĠ Ġ} Ġ!= Ġnull Ċ } Ċ Ċ internal Ġfun ĠXml Tag . has Matched Id Attr ( id : ĠString ): ĠBoolean Ġ{ ĊĠ Ġreturn Ġthis . attributes . first OrNull Ġ{ ĊĠĠĠ Ġit Ġ!= Ġnull Ġ&& Ġit . local Name Ġ== ĠS dk Constants . ATTR _ ID Ġ&& Ġit . value ?. substring After ("@ + id /") Ġ== Ġid ĊĠ Ġ} Ġ!= Ġnull Ċ } Ċ Ċ class ĠXml Source Element ( override Ġval Ġpsi : ĠPsi Element ) Ġ: ĠPsi Source Element Ċ Ċ internal Ġfun ĠSource Element . with Method Icon ( name : ĠString ): ĠSource Element Ġ{ ĊĠ Ġreturn Ġ( this . get Psi () Ġas ? ĠSafe Args Xml Tag )?. let Ġ{ ĊĠĠĠ ĠXml Source Element ( Safe Args Xml Tag ( it . get Original (), ĠPlatform Icons . METHOD _ ICON , Ġname )) ĊĠ Ġ} Ġ?: Ġthis Ċ }