package Ġio . gitlab . art urb os ch . de te kt . core . processors . util Ċ Ċ object ĠL LOC Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcomments Ġ= ĠarrayOf ("// ", Ġ" /* ", Ġ" */ ", Ġ"* ") ĊĠĠĠ Ġprivate Ġval Ġescap es Ġ= ĠarrayOf (" import ", Ġ" package ") ĊĊĠĠĠ Ġfun Ġanalyze ( ĊĠĠĠĠĠĠĠ Ġlines : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġis Comment Mode : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Full Mode : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠInt Ġ= ĠL LO CC o unter ( lines , Ġis Comment Mode , Ġis Full Mode ). run () ĊĊĠĠĠ Ġprivate Ġclass ĠL LO CC o unter ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlines : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġis Comment Mode : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġis Full Mode : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġopened Br ackets Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġclosed Br ackets Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġescape : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Loop With Too Many Jump Statements ") ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġrun (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġlines ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrimmed Ġ= Ġline . trim () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trimmed . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Or Escape Comment ( trimmed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( escape ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Or Escape Additional Statements ( trimmed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( escape ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Statements And Declarations ( trimmed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcounter Ġ+ Ġif Ġ( opened Br ackets Ġ- Ġclosed Br ackets Ġ== Ġ 0 ) Ġopened Br ackets Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcount Statements And Declarations ( trimmed : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trimmed . contains ("; ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trimmed . contains ("{ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopened Br ackets Ġ+= Ġfrequency ( trimmed , Ġ"{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( trimmed . length Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trimmed . contains (" } ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Br ackets Ġ+= Ġfrequency ( trimmed , Ġ" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcount Or Escape Additional Statements ( trimmed : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġescape Ġ= Ġis Esc aped ( trimmed , Ġescap es ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( escape Ġ&& Ġis Full Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcount Or Escape Comment ( trimmed : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġescape Ġ= Ġis Esc aped ( trimmed , Ġcomments ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Comment Mode Ġ&& Ġescape ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Esc aped ( trimmed : ĠString , Ġrules : ĠArray < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrules . any Ġ{ Ġtrimmed . startsWith ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfrequency ( source : ĠString , Ġpart : ĠString ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source . isEmpty () Ġ|| Ġpart . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġsource . indexOf ( part , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( pos Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ġ+= Ġpart . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ġ= Ġsource . indexOf ( part , Ġpos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcount ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ