/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 7 Ġ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 . debugger . source map Ċ Ċ import Ġcom . google . gson . stream . Json Token Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . openapi . util . registry . Registry Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . openapi . util . text . StringUtil Rt Ċ import Ġcom . intellij . util . Path Util Ċ import Ġcom . intellij . util . Smart List Ċ import Ġcom . intellij . util . Uri Util Ċ import Ġcom . intellij . util . containers . isNull OrEmpty Ċ import Ġorg . jetbrains . debugger . source map . Base 6 4 VL Q . Char Iterator Ċ import Ġorg . jetbrains . io . Json Reader Ex Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ import Ġkotlin . properties . Deleg ates . notNull Ċ Ċ private Ġval ĠM APP ING _ COMP AR ATOR _ BY _ SOURCE _ POSITION Ġ= ĠComparator < Mapping Entry > Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠ Ġif Ġ( o 1 . sourceLine Ġ== Ġo 2 . sourceLine ) Ġ{ ĊĠĠĠ Ġo 1 . source Column Ġ- Ġo 2 . source Column ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġo 1 . sourceLine Ġ- Ġo 2 . sourceLine ĊĠ Ġ} Ċ } Ċ Ċ val ĠM APP ING _ COMP AR ATOR _ BY _ GENERATED _ POSITION : ĠComparator < Mapping Entry > Ġ= ĠComparator Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠ Ġif Ġ( o 1 . generated Line Ġ== Ġo 2 . generated Line ) Ġ{ ĊĠĠĠ Ġo 1 . generated Column Ġ- Ġo 2 . generated Column ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġo 1 . generated Line Ġ- Ġo 2 . generated Line ĊĠ Ġ} Ċ } Ċ Ċ internal Ġconst Ġval ĠUN MAP PED Ġ= Ġ- 1 Ċ Ċ // Ġhttps :// docs . google . com / document / d / 1 U 1 R GA eh Qw R yp U To v F 1 KR l pi OF ze 0 b -_ 2 gc 6 f AH 0 KY 0 k / edit ? hl = en _ US Ċ fun Ġdecode Source Map (` in `: ĠCharSequence , Ġsource Resolver Factory : Ġ( source Urls : ĠList < String >, Ġsource Contents : ĠList < String ?> ?) Ġ-> ĠSource Resolver ): ĠSource Map ? Ġ{ ĊĠ Ġif Ġ(` in `. isEmpty ()) Ġ{ ĊĠĠĠ Ġthrow ĠIOException (" source Ġmap Ġcontents Ġcannot Ġbe Ġempty ") ĊĠ Ġ} ĊĊĠ Ġval Ġreader Ġ= ĠJson Reader Ex (` in `) ĊĠ Ġreader . is Len ient Ġ= Ġtrue ĊĠ Ġreturn Ġparse Map ( reader , Ġ 0 , Ġ 0 , ĠArrayList (), Ġsource Resolver Factory ) Ċ } Ċ Ċ private Ġfun Ġparse Map ( reader : ĠJson Reader Ex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmappings : ĠMutable List < Mapping Entry >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Resolver Factory : Ġ( source Urls : ĠList < String >, Ġsource Contents : ĠList < String ?> ?) Ġ-> ĠSource Resolver ): ĠSource Map ? Ġ{ ĊĠ Ġreader . begin Object () ĊĠ Ġvar Ġsource Root : ĠString ? Ġ= Ġnull ĊĠ Ġvar Ġsources Reader : ĠJson Reader Ex ? Ġ= Ġnull ĊĠ Ġvar Ġnames : ĠList < String >? Ġ= Ġnull ĊĠ Ġvar Ġencoded Mappings : ĠString ? Ġ= Ġnull ĊĠ Ġvar Ġfile : ĠString ? Ġ= Ġnull ĊĠ Ġvar Ġversion Ġ= Ġ- 1 ĊĠ Ġvar Ġsources Content : ĠMutable List < String ?> ? Ġ= Ġnull ĊĠ Ġwhile Ġ( reader . hasNext ()) Ġ{ ĊĠĠĠ Ġwhen Ġ( reader . next Name ()) Ġ{ ĊĠĠĠĠĠ Ġ" sections " Ġ-> Ġthrow ĠIOException (" sections Ġis Ġnot Ġsupported Ġyet ") ĊĠĠĠĠĠ Ġ" version " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġversion Ġ= Ġreader . nextInt () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" source Root " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Root Ġ= ĠString Util . nul lize ( read Source Path ( reader )) ĊĠĠĠĠĠĠĠ Ġif Ġ( source Root Ġ!= Ġnull Ġ&& Ġsource Root Ġ!= Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsource Root Ġ= ĠUri Util . trim Trailing Sl ashes ( source Root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" sources " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġsources Reader Ġ= Ġreader . sub Reader () ĊĠĠĠĠĠĠĠ Ġreader . skip Value () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" names " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġreader . begin Array () ĊĠĠĠĠĠĠĠ Ġif Ġ( reader . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġnames Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reader . peek () Ġ== ĠJson Token . BEGIN _ OBJECT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpol ymer Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . skip Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames . add (" POLY MER ĠUNKNOWN ĠNAME ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames . add ( reader . next String ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( reader . hasNext ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġnames Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreader . end Array () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" mappings " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġencoded Mappings Ġ= Ġreader . next String () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" file " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġfile Ġ= Ġreader . next String () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ" sources Content " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġreader . begin Array () ĊĠĠĠĠĠĠĠ Ġif Ġ( reader . peek () Ġ!= ĠJson Token . END _ ARRAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsources Content Ġ= ĠSmart List < String >() ĊĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reader . peek () Ġ== ĠJson Token . STRING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources Content . add ( StringUtil Rt . convert Line Separ ators ( reader . next String ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( reader . peek () Ġ== ĠJson Token . NULL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnull Ġmeans Ġsource Ġfile Ġshould Ġbe Ġresolved Ġby Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources Content . add ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . next Null () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger < Source Map >(). warn (" Unknown Ġsources Content Ġelement : Ġ${ reader . peek (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . skip Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( reader . hasNext ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreader . end Array () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġskip Ġfile Ġor Ġextensions ĊĠĠĠĠĠĠĠ Ġreader . skip Value () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġreader . close () ĊĊĠ Ġ// Ġcheck Ġit Ġbefore Ġother Ġchecks , Ġprobably Ġit Ġis Ġnot Ġa Ġsource map Ġfile ĊĠ Ġif Ġ( encoded Mappings . isNull OrEmpty ()) Ġ{ ĊĠĠĠ Ġ// Ġempty Ġmap ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġif Ġ( Registry .` is ` (" js . debugger . fix . jsp m . source . maps ", Ġfalse ) Ġ&& Ġencoded Mappings !!. startsWith ("; ") Ġ&& Ġfile Ġ!= Ġnull Ġ&& Ġfile . endsWith (". ts ! transp iled ")) Ġ{ ĊĠĠĠ Ġencoded Mappings Ġ= Ġencoded Mappings . substring ( 1 ) ĊĠ Ġ} ĊĊĠ Ġif Ġ( version Ġ!= Ġ 3 ) Ġ{ ĊĠĠĠ Ġthrow ĠIOException (" Unsupported Ġsource map Ġversion : Ġ$ version ") ĊĠ Ġ} ĊĊĠ Ġif Ġ( sources Reader Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġthrow ĠIOException (" sources Ġis Ġnot Ġspecified ") ĊĠ Ġ} ĊĊĠ Ġval Ġsources Ġ= Ġread Sources ( sources Reader , Ġsource Root ) ĊĠ Ġif Ġ( sources . isEmpty ()) Ġ{ ĊĠĠĠ Ġ// Ġempty Ġmap , Ġme teor Ġcan Ġreport Ġsuch Ġugly Ġmaps ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġval Ġreverse Mappings By Source Url Ġ= ĠarrayOf Null s < Mutable List < Mapping Entry >? >( sources . size ) ĊĠ Ġread Mappings ( encoded Mappings !! , Ġline , Ġcolumn , Ġmappings , Ġreverse Mappings By Source Url , Ġnames ) ĊĊĠ Ġval Ġsource To Entries Ġ= ĠArray < Mapping List ? >( reverse Mappings By Source Url . size ) Ġ{ ĊĠĠĠ Ġval Ġentries Ġ= Ġreverse Mappings By Source Url [ it ] ĊĠĠĠ Ġif Ġ( entries Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġentries . sort With ( MAPPING _ COMP AR ATOR _ BY _ SOURCE _ POSITION ) ĊĠĠĠĠĠ ĠSource Mapping List ( entries ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġreturn ĠOne Level Source Map ( file , ĠGenerated Mapping List ( mappings ), Ġsource To Entries , Ġsource Resolver Factory ( sources , Ġsources Content ), Ġ! names . isNull OrEmpty ()) Ċ } Ċ Ċ private Ġfun Ġread Source Path ( reader : ĠJson Reader Ex ): ĠString Ġ= ĠPath Util . to System In dependent Name ( reader . next String (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}) Ċ Ċ private Ġfun Ġread Mappings ( value : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Line : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Column : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmappings : ĠMutable List < Mapping Entry >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Mappings By Source Url : ĠArray < Mutable List < Mapping Entry >? >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnames : ĠList < String > ?) Ġ{ ĊĠ Ġif Ġ( value . isEmpty ()) Ġ{ ĊĠĠĠ Ġreturn ĊĠ Ġ} ĊĊĠ Ġvar Ġline Ġ= Ġinitial Line ĊĠ Ġvar Ġcolumn Ġ= Ġinitial Column ĊĠ Ġval Ġchar Iterator Ġ= ĠCharSequence Iterator ( value ) ĊĠ Ġvar Ġsource Index Ġ= Ġ 0 ĊĠ Ġvar Ġreverse Mappings : ĠMutable List < Mapping Entry > Ġ= Ġget Mapping ( reverse Mappings By Source Url , Ġsource Index ) ĊĠ Ġvar Ġsource Line Ġ= Ġ 0 ĊĠ Ġvar Ġsource Column Ġ= Ġ 0 ĊĠ Ġvar Ġname Index Ġ= Ġ 0 ĊĠ Ġvar Ġprev Entry : ĠMutable Entry ? Ġ= Ġnull ĊĊĠ Ġfun Ġadd Entry ( entry : ĠMutable Entry ) Ġ{ ĊĠĠĠ Ġif Ġ( prev Entry Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġprev Entry !!. next Generated Ġ= Ġentry ĊĠĠĠ Ġ} ĊĠĠĠ Ġprev Entry Ġ= Ġentry ĊĠĠĠ Ġmappings . add ( entry ) ĊĠ Ġ} ĊĊĠ Ġwhile Ġ( char Iterator . hasNext ()) Ġ{ ĊĠĠĠ Ġif Ġ( char Iterator . peek () Ġ== Ġ', ') Ġ{ ĊĠĠĠĠĠ Ġchar Iterator . next () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġwhile Ġ( char Iterator . peek () Ġ== Ġ'; ') Ġ{ ĊĠĠĠĠĠĠĠ Ġline ++ ĊĠĠĠĠĠĠĠ Ġcolumn Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġchar Iterator . next () ĊĠĠĠĠĠĠĠ Ġif Ġ(! char Iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcolumn Ġ+= ĠBase 6 4 VL Q . decode ( char Iterator ) ĊĠĠĠ Ġif Ġ( is Separator ( char Iterator )) Ġ{ ĊĠĠĠĠĠ Ġadd Entry ( Un mapped Entry ( line , Ġcolumn )) ĊĠĠĠĠĠ Ġcontinue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsource Index Delta Ġ= ĠBase 6 4 VL Q . decode ( char Iterator ) ĊĠĠĠ Ġif Ġ( source Index Delta Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġsource Index Ġ+= Ġsource Index Delta ĊĠĠĠĠĠ Ġreverse Mappings Ġ= Ġget Mapping ( reverse Mappings By Source Url , Ġsource Index ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġsource Line Ġ+= ĠBase 6 4 VL Q . decode ( char Iterator ) ĊĠĠĠ Ġsource Column Ġ+= ĠBase 6 4 VL Q . decode ( char Iterator ) ĊĊĠĠĠ Ġval Ġentry : ĠMutable Entry ĊĠĠĠ Ġif Ġ( is Separator ( char Iterator )) Ġ{ ĊĠĠĠĠĠ Ġentry Ġ= ĠUn named Entry ( line , Ġcolumn , Ġsource Index , Ġsource Line , Ġsource Column ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġname Index Ġ+= ĠBase 6 4 VL Q . decode ( char Iterator ) ĊĠĠĠĠĠ Ġassert ( names Ġ!= Ġnull ) ĊĠĠĠĠĠ Ġentry Ġ= ĠNamed Entry ( names ! ![ name Index ], Ġline , Ġcolumn , Ġsource Index , Ġsource Line , Ġsource Column ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreverse Mappings . add ( entry ) ĊĠĠĠ Ġadd Entry ( entry ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġread Sources ( reader : ĠJson Reader Ex , Ġsource Root : ĠString ?): ĠList < String > Ġ{ ĊĠ Ġreader . begin Array () ĊĠ Ġval Ġsources : ĠList < String > ĊĠ Ġif Ġ( reader . peek () Ġ== ĠJson Token . END _ ARRAY ) Ġ{ ĊĠĠĠ Ġsources Ġ= Ġempty List () ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġsources Ġ= ĠSmart List < String >() ĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠ Ġvar Ġsource Url : ĠString Ġ= Ġread Source Path ( reader ) ĊĠĠĠĠĠ Ġif Ġ(! source Root . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( source Root Ġ== Ġ"/") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsource Url Ġ= Ġ"/ $ source Url " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsource Url Ġ= Ġ"$ source Root /$ source Url " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġsources . add ( source Url ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġwhile Ġ( reader . hasNext ()) ĊĠ Ġ} ĊĠ Ġreader . end Array () ĊĠ Ġreturn Ġsources Ċ } Ċ Ċ private Ġfun Ġget Mapping ( reverse Mappings By Source Url : ĠArray < Mutable List < Mapping Entry >? >, Ġsource Index : ĠInt ): ĠMutable List < Mapping Entry > Ġ{ ĊĠ Ġvar Ġreverse Mappings Ġ= Ġreverse Mappings By Source Url . get ( source Index ) ĊĠ Ġif Ġ( reverse Mappings Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreverse Mappings Ġ= ĠArrayList () ĊĠĠĠ Ġreverse Mappings By Source Url . set ( source Index , Ġreverse Mappings ) ĊĠ Ġ} ĊĠ Ġreturn Ġreverse Mappings Ċ } Ċ Ċ private Ġfun Ġis Separator ( char Iterator : ĠCharSequence Iterator ): ĠBoolean Ġ{ ĊĠ Ġif Ġ(! char Iterator . hasNext ()) Ġ{ ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġval Ġcurrent Ġ= Ġchar Iterator . peek () ĊĠ Ġreturn Ġcurrent Ġ== Ġ',' Ġ|| Ġcurrent Ġ== Ġ';' Ċ } Ċ Ċ interface ĠMutable Entry Ġ: ĠMapping Entry Ġ{ ĊĠ Ġoverride Ġvar Ġnext Generated : ĠMapping Entry Ċ } Ċ Ċ /** Ċ Ġ* ĠNot Ġmapped Ġto Ġa Ġsection Ġin Ġthe Ġoriginal Ġsource . Ċ Ġ*/ Ċ private Ġdata Ġclass ĠUn mapped Entry ( override Ġval Ġgenerated Line : ĠInt , Ġoverride Ġval Ġgenerated Column : ĠInt ) Ġ: ĠMapping Entry , ĠMutable Entry Ġ{ ĊĠ Ġoverride Ġval Ġsource Line Ġ= ĠUN MAP PED ĊĊĠ Ġoverride Ġval Ġsource Column Ġ= ĠUN MAP PED ĊĊĠ Ġoverride Ġvar Ġnext Generated : ĠMapping Entry Ġby Ġnot Null () Ċ } Ċ Ċ /** Ċ Ġ* ĠM apped Ġto Ġa Ġsection Ġin Ġthe Ġoriginal Ġsource . Ċ Ġ*/ Ċ private Ġdata Ġclass ĠUn named Entry ( override Ġval Ġgenerated Line : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġgenerated Column : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsource : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsource Line : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsource Column : ĠInt ) Ġ: ĠMapping Entry , ĠMutable Entry Ġ{ ĊĠ Ġoverride Ġvar Ġnext Generated : ĠMapping Entry Ġby Ġnot Null () Ċ } Ċ Ċ /** Ċ Ġ* ĠM apped Ġto Ġa Ġsection Ġin Ġthe Ġoriginal Ġsource , Ġand Ġis Ġassociated Ġwith Ġa Ġname . Ċ Ġ*/ Ċ private Ġdata Ġclass ĠNamed Entry ( override Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġgenerated Line : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġgenerated Column : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsource : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsource Line : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsource Column : ĠInt ) Ġ: ĠMapping Entry , ĠMutable Entry Ġ{ ĊĠ Ġoverride Ġvar Ġnext Generated : ĠMapping Entry Ġby Ġnot Null () Ċ } Ċ Ċ // Ġjava ĠCharacter Iterator Ġis Ġugly , Ġnext () Ġimpl , Ġso , Ġwe Ġre invent Ċ private Ġclass ĠCharSequence Iterator ( private Ġval Ġcontent : ĠCharSequence ) Ġ: ĠChar Iterator Ġ{ ĊĠ Ġprivate Ġval Ġlength Ġ= Ġcontent . length ĊĠ Ġprivate Ġvar Ġcurrent Ġ= Ġ 0 ĊĊĠ Ġoverride Ġfun Ġnext () Ġ= Ġcontent . get ( current ++) ĊĊĠ Ġinternal Ġfun Ġpeek () Ġ= Ġcontent . get ( current ) ĊĊĠ Ġoverride Ġfun Ġhas Next () Ġ= Ġcurrent Ġ< Ġlength Ċ } Ċ Ċ private Ġclass ĠSource Mapping List ( mappings : ĠList < Mapping Entry >) Ġ: ĠMapping List ( mappings ) Ġ{ ĊĠ Ġoverride Ġfun Ġget Line ( mapping : ĠMapping Entry ) Ġ= Ġmapping . sourceLine ĊĊĠ Ġoverride Ġfun Ġget Column ( mapping : ĠMapping Entry ) Ġ= Ġmapping . source Column ĊĊĠ Ġoverride Ġval Ġcomparator Ġ= ĠM APP ING _ COMP AR ATOR _ BY _ SOURCE _ POSITION Ċ } Ċ Ċ private Ġclass ĠGenerated Mapping List ( mappings : ĠList < Mapping Entry >) Ġ: ĠMapping List ( mappings ) Ġ{ ĊĠ Ġoverride Ġfun Ġget Line ( mapping : ĠMapping Entry ) Ġ= Ġmapping . generated Line ĊĊĠ Ġoverride Ġfun Ġget Column ( mapping : ĠMapping Entry ) Ġ= Ġmapping . generated Column ĊĊĠ Ġoverride Ġval Ġcomparator Ġ= ĠM APP ING _ COMP AR ATOR _ BY _ GENERATED _ POSITION Ċ } ĊĊ