/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 2 0 Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġorg . oss review toolkit . evaluator Ċ Ċ import Ġorg . oss review toolkit . model . Cur ated Package Ċ import Ġorg . oss review toolkit . model . Identifier Ċ import Ġorg . oss review toolkit . model . License Source Ċ import Ġorg . oss review toolkit . model . Package Ċ import Ġorg . oss review toolkit . model . Package C uration Result Ċ import Ġorg . oss review toolkit . model . Project Ċ import Ġorg . oss review toolkit . model . Severity Ċ import Ġorg . oss review toolkit . model . config . Exclude s Ċ import Ġorg . oss review toolkit . model . licenses . License View Ċ import Ġorg . oss review toolkit . model . licenses . Resolved License Ċ import Ġorg . oss review toolkit . model . licenses . Resolved License Info Ċ import Ġorg . oss review toolkit . sp dx . Sp dx Expression Ċ import Ġorg . oss review toolkit . sp dx . Sp dx License Ċ import Ġorg . oss review toolkit . sp dx . Sp dx License Id Expression Ċ import Ġorg . oss review toolkit . sp dx . Sp dx License With Exception Expression Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Rule ] Ġto Ġcheck Ġa Ġsingle Ġ[ Package ]. Ċ Ġ*/ Ċ open Ġclass ĠPackage Rule ( ĊĠĠĠ Ġrule Set : ĠRule Set , ĊĠĠĠ Ġname : ĠString , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Package ] Ġto Ġcheck . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpkg : ĠPackage , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġlist Ġof Ġcur ations Ġapplied Ġto Ġthe Ġ[ package ][ pkg ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcur ations : ĠList < Package C uration Result >, ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġresolved Ġlicense Ġinfo Ġfor Ġthe Ġ[ Package ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġresolved License Info : ĠResolved License Info Ċ ) Ġ: ĠRule ( rule Set , Ġname ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlicense Rules Ġ= Ġmutable ListOf < License Rule >() ĊĊĠĠĠ Ġ@ Suppress (" UNUSED ") Ġ// ĠThis Ġis Ġintended Ġto Ġbe Ġused Ġby Ġrule Ġimplementations . ĊĠĠĠ Ġval Ġun cur ated Pkg Ġby Ġlazy Ġ{ ĠCur ated Package ( pkg , Ġcur ations ). to Un cur ated Package () Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" Evalu ating Ġrule Ġ'$ name ' Ġfor Ġpackage Ġ'${ pkg . id . to Coordinates ()} '. " ĊĊĠĠĠ Ġoverride Ġfun Ġissue Source () Ġ= Ġ"$ name Ġ- Ġ${ pkg . id . to Coordinates () }" ĊĊĠĠĠ Ġoverride Ġfun Ġrun Internal () Ġ{ ĊĠĠĠĠĠĠĠ Ġlicense Rules . forEach Ġ{ Ġit . evaluate () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġif Ġthe Ġ[ package ][ pkg ] Ġhas Ġany Ġcon clude d , Ġdeclared , Ġor Ġdetected Ġlicense . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas License () Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" has License ()" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġresolved License Info . licenses . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġif Ġthe Ġ[ package ][ pkg ] Ġis Ġ[ excluded ][ Exclude s ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Excluded () Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" is Excluded ()" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġrule Set . ort Result . is Excluded ( pkg . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġif Ġthe Ġ[ identifier ][ Package . id ] Ġof Ġthe Ġ[ package ][ pkg ] Ġbelongs Ġto Ġone Ġof Ġthe Ġprovided ĊĠĠĠĠ Ġ* Ġ[ orgs ][ Identifier . is From Org ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis From Org ( var arg Ġnames : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" is From Org (${ names . join ToString () })" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġpkg . id . is From Org (* names ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġwhether Ġthe Ġ[ package ][ pkg ] Ġis Ġmeta Ġdata Ġonly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis MetaData Only () Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" is MetaData Only ()" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġpkg . is MetaData Only ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġif Ġthe Ġ[ package ][ pkg ] Ġwas Ġcreated Ġfrom Ġa Ġ[ Project ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Project () Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" is Project ()" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġrule Set . ort Result . is Project ( pkg . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġif Ġthe Ġ[ identifier Ġtype ][ Identifier . type ] Ġof Ġthe Ġ[ package ][ pkg ] Ġequals Ġ[ type ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Type ( type : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" is Type ($ type )" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġpkg . id . type Ġ== Ġtype ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA ĠDSL Ġfunction Ġto Ġconfigure Ġa Ġ[ License Rule ] Ġand Ġadd Ġit Ġto Ġthis Ġrule . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlicense Rule ( name : ĠString , Ġlicense View : ĠLicense View , Ġblock : ĠLicense Rule . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresolved License Info . filter ( license View , Ġfilter Sources Ġ= Ġtrue ). forEach Ġ{ Ġresolved License Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolved License . sources . forEach Ġ{ Ġlicense Source Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense Rules Ġ+= ĠLicense Rule ( name , Ġresolved License , Ġlicense Source ). apply ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġissue ( severity : ĠSeverity , Ġmessage : ĠString , Ġhow To Fix : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġissue ( severity , Ġpkg . id , Ġnull , Ġnull , Ġmessage , Ġhow To Fix ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġ[ hint ][ Severity . HINT ] Ġto Ġthe Ġlist Ġof Ġ[ vi olations ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhint ( message : ĠString , Ġhow To Fix : ĠString ) Ġ= Ġhint ( pkg . id , Ġnull , Ġnull , Ġmessage , Ġhow To Fix ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġ[ warning ][ Severity . WARNING ] Ġto Ġthe Ġlist Ġof Ġ[ vi olations ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwarning ( message : ĠString , Ġhow To Fix : ĠString ) Ġ= Ġwarning ( pkg . id , Ġnull , Ġnull , Ġmessage , Ġhow To Fix ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġan Ġ[ error ][ Severity . ERROR ] Ġto Ġthe Ġlist Ġof Ġ[ vi olations ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġerror ( message : ĠString , Ġhow To Fix : ĠString ) Ġ= Ġerror ( pkg . id , Ġnull , Ġnull , Ġmessage , Ġhow To Fix ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġ[ Rule ] Ġto Ġcheck Ġa Ġsingle Ġlicense Ġof Ġthe Ġ[ package ][ pkg ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠLicense Rule ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġ[ Resolved License ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġresolved License : ĠResolved License , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġsource Ġof Ġthe Ġlicense . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġlicense Source : ĠLicense Source ĊĠĠĠ Ġ) Ġ: ĠRule ( rule Set , Ġname ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġshortcut Ġfor Ġthe Ġ[ license ][ Resolved License . license ] Ġin Ġ[ resolved License ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġlicense Ġ= Ġresolved License . license ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġhelper Ġfunction Ġto Ġaccess Ġ[ Package Rule . pkg ] Ġin Ġextension Ġfunctions Ġfor Ġ[ License Rule ], Ġrequired Ġbecause Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġproperties Ġof Ġthe Ġouter Ġclass Ġ[ Package Rule ] Ġcannot Ġbe Ġaccessed Ġfrom Ġan Ġextension Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġpkg () Ġ= Ġpkg ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ"\ t Evalu ating Ġlicense Ġrule Ġ'$ name ' Ġfor Ġ$ license Source Ġlicense Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"' ${ resolved License . license }'. " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġissue Source () Ġ= Ġ"$ name Ġ- Ġ${ pkg . id . to Coordinates ()} Ġ- Ġ${ resolved License . license } Ġ($ license Source )" ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġif Ġa Ġ[ detected ][ License Source . DETECT ED ] Ġlicense Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ excluded ][ Resolved License . is Detected Excluded ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Excluded () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" is Detected Excluded ($ license )" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġlicense Source Ġ== ĠLicense Source . DETECT ED Ġ&& Ġresolved License . is Detected Excluded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġ[ Rule Matcher ] Ġthat Ġchecks Ġif Ġthe Ġ[ license ] Ġis Ġa Ġvalid Ġ[ Sp dx License ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis Sp dx License () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRule Matcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription Ġ= Ġ" is Sp dx License ($ license )" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches () Ġ= Ġwhen Ġ( license ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSp dx License Id Expression , Ġis ĠSp dx License With Exception Expression Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlicense . isValid ( Sp dx Expression . Strict ness . ALLOW _ DEPRECATED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġissue ( severity : ĠSeverity , Ġmessage : ĠString , Ġhow To Fix : ĠString ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissue ( severity , Ġpkg . id , Ġlicense , Ġlicense Source , Ġmessage , Ġhow To Fix ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdd Ġa Ġ[ hint ][ Severity . HINT ] Ġto Ġthe Ġlist Ġof Ġ[ vi olations ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġhint ( message : ĠString , Ġhow To Fix : ĠString ) Ġ= Ġhint ( pkg . id , Ġlicense , Ġlicense Source , Ġmessage , Ġhow To Fix ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdd Ġa Ġ[ warning ][ Severity . WARNING ] Ġto Ġthe Ġlist Ġof Ġ[ vi olations ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwarning ( message : ĠString , Ġhow To Fix : ĠString ) Ġ= Ġwarning ( pkg . id , Ġlicense , Ġlicense Source , Ġmessage , Ġhow To Fix ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAdd Ġan Ġ[ error ][ Severity . ERROR ] Ġto Ġthe Ġlist Ġof Ġ[ vi olations ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġerror ( message : ĠString , Ġhow To Fix : ĠString ) Ġ= Ġerror ( pkg . id , Ġlicense , Ġlicense Source , Ġmessage , Ġhow To Fix ) ĊĠĠĠ Ġ} Ċ } Ċ