package Ġorg . jetbrains . research . k ex Ċ Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . Internal Serialization Api Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . con co lic . Con co lic Checker Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . def ect . Call C ite Checker Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . def ect . Defect Checker Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . def ect . Defect Manager Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . test gen . Descriptor Checker Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . test gen . Failure Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . test gen . Method Checker Ċ import Ġorg . jetbrains . research . k ex . asm . analysis . test gen . Random Checker Ċ import Ġorg . jetbrains . research . k ex . asm . manager . Coverage Counter Ċ import Ġorg . jetbrains . research . k ex . asm . state . Predicate State Analysis Ċ import Ġorg . jetbrains . research . k ex . asm . transform . Branch Adapter Ċ import Ġorg . jetbrains . research . k ex . asm . transform . Loop Der ol ler Ċ import Ġorg . jetbrains . research . k ex . asm . transform . Runtime Trace Collector Ċ import Ġorg . jetbrains . research . k ex . asm . transform . System Exit Transformer Ċ import Ġorg . jetbrains . research . k ex . asm . util . Class Writer Ċ import Ġorg . jetbrains . research . k ex . asm . util . Visibility Ċ import Ġorg . jetbrains . research . k ex . config . Cmd Config Ċ import Ġorg . jetbrains . research . k ex . config . File Config Ċ import Ġorg . jetbrains . research . k ex . config . Runtime Config Ċ import Ġorg . jetbrains . research . k ex . config . k ex Config Ċ import Ġorg . jetbrains . research . k ex . jac oco . Coverage Reporter Ċ import Ġorg . jetbrains . research . k ex . random . easy random . Easy Random Driver Ċ import Ġorg . jetbrains . research . k ex . re anim ator . Random Object Re anim ator Ċ import Ġorg . jetbrains . research . k ex . re anim ator . collector . External Ctor Collector Ċ import Ġorg . jetbrains . research . k ex . re anim ator . collector . Method Field Access Collector Ċ import Ġorg . jetbrains . research . k ex . re anim ator . collector . Setter Collector Ċ import Ġorg . jetbrains . research . k ex . re anim ator . descriptor . Descriptor Statistics Ċ import Ġorg . jetbrains . research . k ex . serialization . K ex Serializer Ċ import Ġorg . jetbrains . research . k ex . smt . Checker Ċ import Ġorg . jetbrains . research . k ex . smt . Result Ċ import Ġorg . jetbrains . research . k ex . state . transformer . execute Model Ċ import Ġorg . jetbrains . research . k ex . trace . Trace Manager Ċ import Ġorg . jetbrains . research . k ex . trace .` object `. Object Trace Manager Ċ import Ġorg . jetbrains . research . k ex . util . getPath Separator Ċ import Ġorg . jetbrains . research . k ex . util . get Runtime Ċ import Ġorg . jetbrains . research . k fg . Class Manager Ċ import Ġorg . jetbrains . research . k fg . K fg Config Ċ import Ġorg . jetbrains . research . k fg . Package Ċ import Ġorg . jetbrains . research . k fg . analysis . Loop Simpl ifier Ċ import Ġorg . jetbrains . research . k fg . container . Container Ċ import Ġorg . jetbrains . research . k fg . container . as Container Ċ import Ġorg . jetbrains . research . k fg . ir . Class Ċ import Ġorg . jetbrains . research . k fg . ir . Concrete Class Ċ import Ġorg . jetbrains . research . k fg . ir . Method Ċ import Ġorg . jetbrains . research . k fg . util . Flags Ċ import Ġorg . jetbrains . research . k fg . visitor . Pipeline Ċ import Ġorg . jetbrains . research . k fg . visitor . execute Pipeline Ċ import Ġorg . jetbrains . research . k the l per . assert . unreachable Ċ import Ġorg . jetbrains . research . k the l per . logging . debug Ċ import Ġorg . jetbrains . research . k the l per . logging . log Ċ import Ġjava . io . File Ċ import Ġjava . net . URL ClassLoader Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ import Ġkotlin . system . exit Process Ċ Ċ class ĠK ex ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcmd Ġ= ĠCmd Config ( args ) ĊĠĠĠ Ġprivate Ġval Ġproperties Ġ= Ġcmd . get Cmd Value (" config ", Ġ" k ex . ini ") ĊĠĠĠ Ġprivate Ġval Ġlog Name Ġ= Ġcmd . get Cmd Value (" log ", Ġ" k ex . log ") ĊĠĠĠ Ġprivate Ġval Ġclass Path Ġ= ĠSystem . getProperty (" java . class . path ") ĊĊĠĠĠ Ġprivate Ġval Ġcmd Class Path Ġ= Ġcmd . get Cmd Value (" classpath ") ĊĊĠĠĠ Ġval Ġcontainers : ĠList < Container > ĊĠĠĠ Ġval Ġcontainer ClassLoader : ĠURL ClassLoader ĊĠĠĠ Ġval Ġoutput Dir : ĠPath ĊĊĠĠĠ Ġval Ġclass Manager : ĠClass Manager ĊĠĠĠ Ġval Ġorig Manager : ĠClass Manager ĊĊĠĠĠ Ġval Ġ` package `: ĠPackage ĊĠĠĠ Ġvar Ġklass : ĠClass ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġmethods : ĠSet < Method >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġvisibility Level : ĠVisibility ĊĊĠĠĠ Ġenum Ġclass ĠMode Ġ{ ĊĠĠĠĠĠĠĠ ĠF uz zer , ĊĠĠĠĠĠĠĠ ĠS ymbolic , ĊĠĠĠĠĠĠĠ ĠCon co lic , ĊĠĠĠĠĠĠĠ ĠCheck er , ĊĠĠĠĠĠĠĠ ĠLib Checker , ĊĠĠĠĠĠĠĠ ĠRe anim ator , ĊĠĠĠĠĠĠĠ ĠDebug ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġanalysis Level : ĠAnalysis Level ĊĊĠĠĠ Ġprivate Ġsealed Ġclass ĠAnalysis Level Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠPACK AGE Ġ: ĠAnalysis Level () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠCLASS ( val Ġklass : ĠString ) Ġ: ĠAnalysis Level () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMETHOD ( val Ġklass : ĠString , Ġval Ġmethod : ĠString ) Ġ: ĠAnalysis Level () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġk ex Config . initialize ( cmd , ĠRuntime Config , ĠFile Config ( properties )) ĊĠĠĠĠĠĠĠ Ġk ex Config . init Log ( log Name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclass Paths Ġ= Ġcmd Class Path ?. split ( getPath Separator ()) ĊĠĠĠĠĠĠĠ Ġval Ġtarget Name Ġ= Ġcmd . get Cmd Value (" target ") ĊĠĠĠĠĠĠĠ Ġrequire ( class Paths Ġ!= Ġnull , Ġcmd :: print Help ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontainer Paths Ġ= Ġclass Paths . map Ġ{ ĠPaths . get ( it ). to AbsolutePath () Ġ} ĊĠĠĠĠĠĠĠ Ġcontainer ClassLoader Ġ= ĠURL ClassLoader (* container Paths . map Ġ{ Ġit . to Uri (). to URL () Ġ}. to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġanalysis Level Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` package ` Ġ= ĠPackage . default Package ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalysis Level . PACKAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name . matches ( Regex ("[ a - zA - Z 0 - 9 ]+ (\\ .[ a - zA - Z 0 - 9 ]+ )* \\. \\ * ")) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` package ` Ġ= ĠPackage . parse ( target Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalysis Level . PACKAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name . matches ( Regex ("[ a - zA - Z 0 - 9 ]+ (\\ .[ a - zA - Z 0 - 9 ]+ )* \\ .[ a - zA - Z 0 - 9 \ $_ ]+ :: [ a - zA - Z 0 - 9 \ $_ ]+ ")) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( klass Name , ĠmethodName ) Ġ= Ġtarget Name . split (" :: ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` package ` Ġ= ĠPackage . parse ("${ klass Name . drop Last While Ġ{ Ġit Ġ!= Ġ'.' Ġ}} * ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalysis Level . METHOD ( klass Name . replace ('.', Ġ'/ '), ĠmethodName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Name . matches ( Regex ("[ a - zA - Z 0 - 9 ]+ (\\ .[ a - zA - Z 0 - 9 ]+ )* \\ .[ a - zA - Z 0 - 9 \ $_ ]+ ")) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` package ` Ġ= ĠPackage . parse ("${ target Name . drop Last While Ġ{ Ġit Ġ!= Ġ'.' Ġ}} * ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnalysis Level . CLASS ( target Name . replace ('.', Ġ'/ ')) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Could Ġnot Ġparse Ġtarget Ġ$ target Name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcmd . print Help () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontainers Ġ= Ġcontainer Paths . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Container () Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Can 't Ġrepresent Ġ${ it . to AbsolutePath ()} Ġas Ġclass Ġcontainer ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclass Manager Ġ= ĠClass Manager ( K fg Config ( flags Ġ= ĠFlags . read All , Ġfail OnError Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġorig Manager Ġ= ĠClass Manager ( K fg Config ( flags Ġ= ĠFlags . read All , Ġfail OnError Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠ Ġval Ġanalysis J ars Ġ= ĠlistOf NotNull (* containers . to Typed Array (), Ġget Runtime ()) ĊĠĠĠĠĠĠĠ Ġclass Manager . initialize (* analysis J ars . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġorig Manager . initialize (* analysis J ars . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġlog . debug (" Running Ġwith Ġclass Ġpath :\ n ${ containers . join ToString ("\ n ") Ġ{ Ġit . name Ġ}} ") ĊĠĠĠĠĠĠĠ Ġwhen Ġ( analysis Level ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAnalysis Level . PACKAGE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Target : Ġpackage Ġ$ ` package ` ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAnalysis Level . CLASS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġklass Ġ= Ġclass Manager [ analysis Level . klass ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( klass Ġ! is ĠConcrete Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Class Ġ$ klass Ġnot Ġfound Ġis Ġclasspath , Ġexiting ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Target : Ġclass Ġ$ klass ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAnalysis Level . METHOD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġklass Ġ= Ġclass Manager [ analysis Level . klass ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethods Ġ= Ġklass !!. get Methods ( analysis Level . method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Target : Ġmethods Ġ$ methods ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoutput Dir Ġ= Ġ( cmd . get Cmd Value (" output ") ?. let Ġ{ ĠPaths . get ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠFiles . create Temp Directory ( Paths . get (". "), Ġ" k ex - instrument ed ")). to AbsolutePath () ĊĊĠĠĠĠĠĠĠ Ġvisibility Level Ġ= Ġk ex Config . get EnumValue (" api Generation ", Ġ" visibility ", Ġtrue , ĠVisibility . PUBLIC ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Class Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// val Ġurl Class Path Ġ= Ġloader . ur Ls . join ToString ( separator Ġ= ĠgetPath Separator ()) Ġ{ Ġ"${ it . path } ." Ġ} ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" java . class . path ", Ġclass Path Ġ+ ĠgetPath Separator () Ġ+ Ġcmd Class Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Class Path () Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . setProperty (" java . class . path ", Ġclass Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Serialization Api ĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġfun Ġmain () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwrite Ġall Ġclasses Ġto Ġoutput Ġdirectory , Ġso Ġthey Ġwill Ġbe Ġseen Ġby ĠClassLoader ĊĠĠĠĠĠĠĠ Ġcontainers . forEach Ġ{ Ġit . unpack ( class Manager , Ġoutput Dir , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclass Loader Ġ= ĠURL ClassLoader ( array Of ( output Dir . to Uri (). to URL ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Context Ġ= ĠExecutionContext ( orig Manager , Ġcontainer ClassLoader , ĠEasy Random Driver ()) ĊĠĠĠĠĠĠĠ Ġval Ġanalysis Context Ġ= ĠExecutionContext ( class Manager , Ġclass Loader , ĠEasy Random Driver ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġinstrument Ġall Ġclasses Ġin Ġthe Ġtarget Ġpackage ĊĠĠĠĠĠĠĠ Ġrun Pipeline ( original Context , Ġ` package `) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ System Exit Transformer ( original Context . cm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Runtime Trace Collector ( original Context . cm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Class Writer ( original Context , Ġoutput Dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( cmd . get EnumValue (" mode ", ĠMode . Symbolic , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . F uz zer Ġ-> Ġf uz zer ( original Context , Ġanalysis Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . Symbolic Ġ-> Ġsymbolic ( original Context , Ġanalysis Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . Re anim ator Ġ-> Ġre anim ator ( analysis Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . Checker Ġ-> Ġchecker ( analysis Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . Lib Checker Ġ-> Ġlib Checker ( analysis Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . Con co lic Ġ-> Ġcon co lic ( original Context , Ġanalysis Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMode . Debug Ġ-> Ġdebug ( analysis Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlog . info (" -------------------------------- - Ja Co Co -------------------------------- - ") ĊĠĠĠĠĠĠĠ Ġlog . info (" analysis Level Ġ= Ġ$ analysis Level ") ĊĠĠĠĠĠĠĠ Ġupdate Class Path () ĊĠĠĠĠĠĠĠ Ġlog . info ( Coverage Reporter (` package `. name , Ġcontainer ClassLoader ). execute ( analysis Level . toString ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Serialization Api ĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġfun Ġdebug ( analysis Context : ĠExecutionContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp sa Ġ= ĠPredicate State Analysis ( analysis Context . cm ) ĊĊĠĠĠĠĠĠĠ Ġval Ġps File Ġ= Ġcmd . get Cmd Value (" ps ") Ġ?: Ġthrow ĠIllegalArgumentException (" Specify ĠPS Ġfile Ġto Ġdebug ") ĊĠĠĠĠĠĠĠ Ġval Ġfailure Ġ= ĠK ex Serializer ( analysis Context . cm ). fromJson < Failure >( File ( ps File ). read Text ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġfailure . method ĊĠĠĠĠĠĠĠ Ġlog . debug ( failure ) ĊĠĠĠĠĠĠĠ Ġupdate Class Path () ĊĊĠĠĠĠĠĠĠ Ġval Ġchecker Ġ= ĠCheck er ( method , Ġcontainer ClassLoader , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġchecker . check ( failure . state ) Ġas ? ĠResult . Sat Result Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġlog . debug ( result . model ) ĊĠĠĠĠĠĠĠ Ġval Ġrec Mod Ġ= Ġexecute Model ( analysis Context , Ġchecker . state , Ġmethod , Ġresult . model ) ĊĠĠĠĠĠĠĠ Ġlog . debug ( rec Mod ) ĊĠĠĠĠĠĠĠ Ġclear Class Path () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsymbolic ( original Context : ĠExecutionContext , Ġanalysis Context : ĠExecutionContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrace Manager Ġ= ĠObject Trace Manager () ĊĠĠĠĠĠĠĠ Ġval Ġp sa Ġ= ĠPredicate State Analysis ( analysis Context . cm ) ĊĠĠĠĠĠĠĠ Ġval Ġcm Ġ= Ġcreate Coverage Counter ( original Context . cm , Ġtrace Manager ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġupdate Class Path ( analysis Context . loader Ġas ĠURL ClassLoader ) ĊĠĠĠĠĠĠĠ Ġval Ġuse Api Generation Ġ= Ġk ex Config . getBoolean Value (" api Generation ", Ġ" enabled ", Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġprepare Package ( analysis Context , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġrun Pipeline ( analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Api Generation Ġ-> ĠDescriptor Checker ( analysis Context , Ġtrace Manager , Ġp sa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMethod Checker ( analysis Context , Ġtrace Manager , Ġp sa ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ cm ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġclear Class Path () ĊĊĠĠĠĠĠĠĠ Ġval Ġcoverage Ġ= Ġcm . total Coverage ĊĠĠĠĠĠĠĠ Ġlog . info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Overall Ġsummary Ġfor Ġ${ cm . method Infos . size } Ġmethods :\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body Ġcoverage : Ġ${ String . format ( Locale . EN GL ISH , Ġ"% . 2 f ", Ġcoverage . body Coverage )} %\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full Ġcoverage : Ġ${ String . format ( Locale . EN GL ISH , Ġ"% . 2 f ", Ġcoverage . full Coverage )} %" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDescriptor Statistics . print Statistics () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġf uz zer ( original Context : ĠExecutionContext , Ġanalysis Context : ĠExecutionContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrace Manager Ġ= ĠObject Trace Manager () ĊĠĠĠĠĠĠĠ Ġval Ġp sa Ġ= ĠPredicate State Analysis ( analysis Context . cm ) ĊĠĠĠĠĠĠĠ Ġval Ġcm Ġ= Ġcreate Coverage Counter ( original Context . cm , Ġtrace Manager ) ĊĊĠĠĠĠĠĠĠ Ġupdate Class Path () ĊĊĠĠĠĠĠĠĠ Ġprepare Package ( analysis Context , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġrun Pipeline ( analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Random Checker ( analysis Context , Ġp sa , Ġvisibility Level , Ġtrace Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ cm ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclear Class Path () ĊĊĠĠĠĠĠĠĠ Ġval Ġcoverage Ġ= Ġcm . total Coverage ĊĠĠĠĠĠĠĠ Ġlog . info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Overall Ġsummary Ġfor Ġ${ cm . method Infos . size } Ġmethods :\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body Ġcoverage : Ġ${ String . format ( Locale . EN GL ISH , Ġ"% . 2 f ", Ġcoverage . body Coverage )} %\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full Ġcoverage : Ġ${ String . format ( Locale . EN GL ISH , Ġ"% . 2 f ", Ġcoverage . full Coverage )} %" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDescriptor Statistics . print Statistics () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchecker ( analysis Context : ĠExecutionContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp sa Ġ= ĠPredicate State Analysis ( analysis Context . cm ) ĊĊĠĠĠĠĠĠĠ Ġupdate Class Path () ĊĊĠĠĠĠĠĠĠ Ġprepare Package ( analysis Context , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġrun Pipeline ( analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Defect Checker ( analysis Context , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclear Class Path () ĊĠĠĠĠĠĠĠ Ġlog . debug (" Analysis Ġfinished , Ġemit ting Ġresults Ġinfo Ġ${ Defect Manager . def ect File }") ĊĠĠĠĠĠĠĠ ĠDef ect Manager . emit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlib Checker ( analysis Context : ĠExecutionContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall C ite Package Ġ= ĠPackage . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcmd . get Cmd Value (" lib Check ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġunreachable Ġ{ Ġlog . error (" You Ġneed Ġto Ġspecify Ġpackage Ġin Ġwhich Ġto Ġlook Ġfor Ġlibrary Ġusage s ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġp sa Ġ= ĠPredicate State Analysis ( analysis Context . cm ) ĊĊĠĠĠĠĠĠĠ Ġupdate Class Path () ĊĊĠĠĠĠĠĠĠ Ġprepare Package ( analysis Context , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġrun Pipeline ( analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Call C ite Checker ( analysis Context , Ġcall C ite Package , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclear Class Path () ĊĠĠĠĠĠĠĠ Ġlog . debug (" Analysis Ġfinished , Ġemit ting Ġresults Ġinfo Ġ${ Defect Manager . def ect File }") ĊĠĠĠĠĠĠĠ ĠDef ect Manager . emit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre anim ator ( analysis Context : ĠExecutionContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp sa Ġ= ĠPredicate State Analysis ( analysis Context . cm ) ĊĊĠĠĠĠĠĠĠ Ġupdate Class Path () ĊĊĠĠĠĠĠĠĠ Ġrun Pipeline ( analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Loop Simpl ifier ( analysis Context . cm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Loop Der ol ler ( analysis Context . cm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ps a ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Method Field Access Collector ( analysis Context , Ġp sa ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Setter Collector ( analysis Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ External Ctor Collector ( analysis Context . cm , Ġvisibility Level ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠRandom Object Re anim ator ( analysis Context , Ġ` package `, Ġp sa , Ġvisibility Level ). run () ĊĠĠĠĠĠĠĠ Ġclear Class Path () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcon co lic ( original Context : ĠExecutionContext , Ġanalysis Context : ĠExecutionContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrace Manager Ġ= ĠObject Trace Manager () ĊĠĠĠĠĠĠĠ Ġval Ġp sa Ġ= ĠPredicate State Analysis ( analysis Context . cm ) ĊĠĠĠĠĠĠĠ Ġval Ġcm Ġ= ĠCoverage Counter ( original Context . cm , Ġtrace Manager ) ĊĊĠĠĠĠĠĠĠ Ġrun Pipeline ( analysis Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Con co lic Checker ( analysis Context , Ġp sa , Ġtrace Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ cm ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcoverage Ġ= Ġcm . total Coverage ĊĠĠĠĠĠĠĠ Ġlog . info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Overall Ġsummary Ġfor Ġ${ cm . method Infos . size } Ġmethods :\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body Ġcoverage : Ġ${ String . format ("% . 2 f ", Ġcoverage . body Coverage )} %\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" full Ġcoverage : Ġ${ String . format ("% . 2 f ", Ġcoverage . full Coverage )} %" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDescriptor Statistics . print Statistics () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġcreate Coverage Counter ( cm : ĠClass Manager , Ġtm : ĠTrace Manager < T >) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġmethods Ġ!= Ġnull Ġ-> ĠCoverage Counter ( cm , Ġtm , Ġmethods !! ) ĊĠĠĠĠĠĠĠ Ġklass Ġ!= Ġnull Ġ-> ĠCoverage Counter ( cm , Ġtm , Ġklass !! ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCoverage Counter ( cm , Ġtm , Ġ` package `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Pipeline ( context : ĠExecutionContext , Ġtarget : ĠPackage , Ġinit : ĠPipeline . () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠ Ġexecute Pipeline ( context . cm , Ġtarget , Ġinit ) ĊĊĠĠĠ Ġprivate Ġfun Ġrun Pipeline ( context : ĠExecutionContext , Ġinit : ĠPipeline . () Ġ-> ĠUnit ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġmethods Ġ!= Ġnull Ġ-> Ġexecute Pipeline ( context . cm , Ġmethods !! , Ġinit ) ĊĠĠĠĠĠĠĠ Ġklass Ġ!= Ġnull Ġ-> Ġexecute Pipeline ( context . cm , Ġklass !! , Ġinit ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġexecute Pipeline ( context . cm , Ġ` package `, Ġinit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Package ( ĊĠĠĠĠĠĠĠ Ġctx : ĠExecutionContext , ĊĠĠĠĠĠĠĠ Ġp sa : ĠPredicate State Analysis , ĊĠĠĠĠĠĠĠ Ġpkg : ĠPackage Ġ= ĠPackage . default Package ĊĠĠĠ Ġ) Ġ= Ġrun Pipeline ( ctx , Ġpkg ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ+ Loop Simpl ifier ( ctx . cm ) ĊĠĠĠĠĠĠĠ Ġ+ Loop Der ol ler ( ctx . cm ) ĊĠĠĠĠĠĠĠ Ġ+ Branch Adapter ( ctx . cm ) ĊĠĠĠĠĠĠĠ Ġ+ ps a ĊĠĠĠĠĠĠĠ Ġ+ Method Field Access Collector ( ctx , Ġp sa ) ĊĠĠĠĠĠĠĠ Ġ+ Setter Collector ( ctx ) ĊĠĠĠĠĠĠĠ Ġ+ External Ctor Collector ( ctx . cm , Ġvisibility Level ) ĊĠĠĠ Ġ} Ċ } Ċ