/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 2 1 ĠHERE ĠEurope ĠB . V . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġorg . oss review toolkit . reporter . utils Ċ Ċ import Ġorg . oss review toolkit . model . Dependency Navigator Ċ import Ġorg . oss review toolkit . model . Identifier Ċ import Ġorg . oss review toolkit . model . License Source Ċ import Ġorg . oss review toolkit . model . Or t Issue Ċ import Ġorg . oss review toolkit . model . Or t Result Ċ import Ġorg . oss review toolkit . model . Project Ċ import Ġorg . oss review toolkit . model . Rule Violation Ċ import Ġorg . oss review toolkit . model . config . Exclude s Ċ import Ġorg . oss review toolkit . model . config . Scope Exclude Ċ import Ġorg . oss review toolkit . model . licenses . License Info Resolver Ċ import Ġorg . oss review toolkit . model . licenses . License View Ċ import Ġorg . oss review toolkit . model . or Empty Ċ import Ġorg . oss review toolkit . model . utils . Resolution Provider Ċ import Ġorg . oss review toolkit . reporter . How To Fix Text Provider Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Dependency Row Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Issue Row Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Issue Table Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Project Table Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Res olvable Issue Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Res olvable Violation Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Summary Row Ċ import Ġorg . oss review toolkit . reporter . utils . Report TableModel . Summary Table Ċ Ċ private Ġval ĠVI OL ATION _ COMP AR ATOR Ġ= Ġcompare By < Res olvable Violation > Ġ{ Ġit . is Resolved Ġ} ĊĠĠĠ Ġ. then By Descending Ġ{ Ġit . violation . severity Ġ} ĊĠĠĠ Ġ. then By Ġ{ Ġit . violation . rule Ġ} ĊĠĠĠ Ġ. then By Ġ{ Ġit . violation . pkg Ġ} ĊĠĠĠ Ġ. then By Ġ{ Ġit . violation . license . toString () Ġ} ĊĠĠĠ Ġ. then By Ġ{ Ġit . violation . message Ġ} ĊĠĠĠ Ġ. then By Ġ{ Ġit . resolution Description Ġ} Ċ Ċ private Ġfun ĠCollection < Res olvable Issue >. filter Un resolved () Ġ= Ġfilter Ġ{ Ġ! it . is Resolved Ġ} Ċ Ċ private Ġfun ĠProject . getS copes For Dependencies ( ĊĠĠĠ Ġexclude s : ĠExclude s , ĊĠĠĠ Ġnavigator : ĠDependency Navigator Ċ ): ĠMap < Identifier , ĠMap < String , ĠList < Scope Exclude >>> Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable Map Of < Identifier , ĠMutable Map < String , ĠList < Scope Exclude >> >() ĊĊĠĠĠ Ġnavigator . scope Dependencies ( this ). forEach Ġ{ Ġ( scope Name , Ġdependencies ) Ġ-> ĊĠĠĠĠĠĠĠ Ġdependencies . forEach Ġ{ Ġdependency Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . get Or Put ( dependency ) Ġ{ Ġmutable Map Of () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Or Put ( scope Name ) Ġ{ Ġexclude s . find Scope Exclude s ( scope Name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġmapper Ġwhich Ġconverts Ġan Ġ[ Or t Issue ] Ġto Ġa Ġ[ Report TableModel ] Ġview Ġmodel . Ċ Ġ*/ Ċ class ĠReport TableModel Mapper ( ĊĠĠĠ Ġprivate Ġval Ġresolution Provider : ĠResolution Provider , ĊĠĠĠ Ġprivate Ġval Ġhow To Fix Text Provider : ĠHow To Fix Text Provider Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġfun ĠO rt Issue . to Res olvable Issue (): ĠRes olvable Issue Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolution s Ġ= Ġresolution Provider . get Issue Resolution s For ( this ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRes olvable Issue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġthis @ to Res olvable Issue . source , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġthis @ to Res olvable Issue . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Description Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolution s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( resolution s . join ToString ( prefix Ġ= Ġ"\ n Resolved Ġby : Ġ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . reason } Ġ- Ġ${ it . comment }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Resolved Ġ= Ġresolution s . isNotEmpty (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseverity Ġ= Ġseverity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhow To Fix Ġ= Ġhow To Fix Text Provider . get How To Fix Text ( this ). or Empty () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠRule Violation . to Res olvable Violation (): ĠRes olvable Violation Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresolution s Ġ= Ġresolution Provider . get Rule Violation Resolution s For ( this ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRes olvable Violation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviolation Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolution Description Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resolution s . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( resolution s . join ToString ( prefix Ġ= Ġ"\ n Resolved Ġby : Ġ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . reason } Ġ- Ġ${ it . comment }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Resolved Ġ= Ġresolution s . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmap To Report TableModel ( ĊĠĠĠĠĠĠĠ Ġort Result : ĠO rt Result , ĊĠĠĠĠĠĠĠ Ġlicense Info Resolver : ĠLicense Info Resolver ĊĠĠĠ Ġ): ĠReport TableModel Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissue Summary Rows Ġ= Ġmutable Map Of < Identifier , ĠIssue Row >() ĊĠĠĠĠĠĠĠ Ġval Ġsummary Rows Ġ= Ġmutable Map Of < Identifier , ĠSummary Row >() ĊĊĠĠĠĠĠĠĠ Ġval Ġanalyzer Result Ġ= Ġort Result . analyzer ?. result ĊĠĠĠĠĠĠĠ Ġval Ġscan Record Ġ= Ġort Result . scanner ?. results ĊĠĠĠĠĠĠĠ Ġval Ġexclude s Ġ= Ġort Result . get Exclude s () ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Tables Ġ= Ġanalyzer Result ?. projects ?. associate With Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscopes For Dependencies Ġ= Ġproject . getS copes For Dependencies ( exclude s , Ġort Result . dependency Navigator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Exclude s Ġ= Ġexclude s . find Path Exclude s ( project , Ġort Result ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Ids Ġ= Ġsorted Set Of ( project . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Ids Ġ+= Ġort Result . dependency Navigator . project Dependencies ( project ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Issues Ġ= Ġort Result . dependency Navigator . project Issues ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Rows Ġ= Ġall Ids . map Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Result Ġ= Ġscan Record ?. scan Results ?. get ( id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved License Info Ġ= Ġlicense Info Resolver . resolve License Info ( id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcon clude d License Ġ= Ġresolved License Info . license Info . con clude d License Info . con clude d License ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeclared License s Ġ= Ġresolved License Info . filter Ġ{ ĠLicense Source . DECLARE D Ġin Ġit . sources Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . license . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetected License s Ġ= Ġresolved License Info . filter Ġ{ ĠLicense Source . DETECT ED Ġin Ġit . sources Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . license . toString () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanalyzer Issues Ġ= Ġproject Issues [ id ]. or Empty () Ġ+ Ġanalyzer Result . issues [ id ]. or Empty () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Issues Ġ= Ġscan Result ?. flatMap To ( mutable Set Of ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . summary . issues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. or Empty () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage For Id Ġ= Ġort Result . get Package ( id )?. pkg Ġ?: Ġort Result . getProject ( id )?. to Package () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Row ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Artifact Ġ= Ġpackage For Id ?. source Artifact . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv cs Info Ġ= Ġpackage For Id ?. vcs Processed . or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscopes Ġ= Ġscopes For Dependencies [ id ]. or Empty (). to Sorted Map (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcon clude d License Ġ= Ġcon clude d License , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclared License s Ġ= Ġdeclared License s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetected License s Ġ= Ġdetected License s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeffective License Ġ= Ġresolved License Info . filter Excluded (). effective License ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLicense View . CON CL UDE D _ OR _ DECLARE D _ AND _ DETECT ED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġort Result . get Package License Choices ( id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġort Result . getRepository License Choices () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. sort (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer Issues Ġ= Ġanalyzer Issues . map Ġ{ Ġit . to Res olvable Issue () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Issues Ġ= Ġscan Issues . map Ġ{ Ġit . to Res olvable Issue () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Row Excluded Ġ= Ġpath Exclude s . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( row . scopes . isNotEmpty () Ġ&& Ġrow . scopes . all Ġ{ Ġit . value . isNotEmpty () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon Excluded Analyzer Issues Ġ= Ġif Ġ( is Row Excluded ) Ġempty List () Ġelse Ġrow . analyzer Issues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon Excluded Scan Issues Ġ= Ġif Ġ( is Row Excluded ) Ġempty List () Ġelse Ġrow . scan Issues ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsummary Row Ġ= ĠSummary Row ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġrow . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscopes Ġ= Ġsorted Map Of ( project . id Ġto Ġrow . scopes ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcon clude d License s Ġ= Ġrow . con clude d License ?. let Ġ{ Ġset Of ( it ) Ġ}. or Empty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeclared License s Ġ= Ġrow . declared License s . map To ( sorted Set Of ()) Ġ{ Ġit . license . toString () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetected License s Ġ= Ġrow . detected License s . map To ( sorted Set Of ()) Ġ{ Ġit . license . toString () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer Issues Ġ= Ġif Ġ( non Excluded Analyzer Issues . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of ( project . id Ġto Ġnon Excluded Analyzer Issues ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Issues Ġ= Ġif Ġ( non Excluded Scan Issues . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of ( project . id Ġto Ġnon Excluded Scan Issues ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Rows [ row . id ] Ġ= Ġsummary Rows [ row . id ]?. merge ( summary Row ) Ġ?: Ġsummary Row ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun resolved Analyzer Issues Ġ= Ġrow . analyzer Issues . filter Un resolved () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun resolved Scan Issues Ġ= Ġrow . scan Issues . filter Un resolved () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( un resolved Analyzer Issues . isNotEmpty () Ġ|| Ġun resolved Scan Issues . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! is Row Excluded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Row Ġ= ĠIssue Row ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġrow . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyzer Issues Ġ= Ġif Ġ( un resolved Analyzer Issues . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of ( project . id Ġto Ġun resolved Analyzer Issues ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Issues Ġ= Ġif Ġ( un resolved Scan Issues . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of ( project . id Ġto Ġun resolved Scan Issues ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsorted Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue Summary Rows [ row . id ] Ġ= Ġissue Summary Rows [ issue Row . id ]?. merge ( issue Row ) Ġ?: Ġissue Row ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject Table ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Rows , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġort Result . get Definition FilePath Relative To Analyzer Root ( project ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Exclude s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. or Empty (). to Sorted Map () ĊĊĠĠĠĠĠĠĠ Ġval Ġissue Summary Table Ġ= ĠIssue Table ( issue Summary Rows . values . toList (). sorted By Ġ{ Ġit . id Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġsummary Table Ġ= ĠSummary Table ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSort Ġexcluded Ġrows Ġto Ġthe Ġend Ġof Ġthe Ġlist . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Rows . values . toList (). sorted With ( compare By ({ Ġort Result . is Excluded ( it . id ) Ġ}, Ġ{ Ġit . id Ġ})) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠUse Ġthe Ġprefixes Ġup Ġuntil Ġthe Ġfirst Ġ'.' Ġ( which Ġbelow Ġget Ġdiscarded ) Ġfor Ġsome Ġvisual Ġgrouping Ġin Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġreport . ĊĠĠĠĠĠĠĠ Ġval Ġlabels Ġ= Ġort Result . labels . map Keys Ġ{ Ġit . key . substring After (".") Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrule Vi olations Ġ= Ġort Result . get Rule Vi olations () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Res olvable Violation () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted With ( VI OL ATION _ COMP AR ATOR ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠReport TableModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġort Result . repository . vcs Processed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġort Result . repository . config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule Vi olations , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissue Summary Table , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary Table , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Tables , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabels ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ