package Ġorg . ca fe jo jo . s cha api . mining pipeline . usage graph generator . j imple Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . ca fe jo jo . s cha api . models . Node Ċ import Ġorg . ca fe jo jo . s cha api . models . Simple Node Ċ import Ġorg . ca fe jo jo . s cha api . models . library usage graph . j imple . J imple Node Ċ import Ġorg . jetbrains . spe k . api . Spe k Ċ import Ġorg . jetbrains . spe k . api . dsl . describe Ċ import Ġorg . jetbrains . spe k . api . dsl . it Ċ import Ġso ot . j imple . Stmt Ċ import Ġso ot . j imple . internal . J Assign Stmt Ċ import Ġso ot . j imple . internal . J G oto Stmt Ċ import Ġso ot . j imple . internal . J If Stmt Ċ import Ġso ot . j imple . internal . J Invoke Stmt Ċ import Ġso ot . j imple . internal . J Lookup Switch Stmt Ċ import Ġso ot . j imple . internal . J Return Stmt Ċ import Ġso ot . j imple . internal . J Return Void Stmt Ċ import Ġso ot . j imple . internal . J Table Switch Stmt Ċ Ċ private Ġconst Ġval ĠTEST _ CLASSES _ PACKAGE Ġ= Ġ" org . ca fe jo jo . s cha api . mining pipeline . usage graph generator . j imple . test classes " Ċ private Ġval Ġtest Classes Class Path Ġ= ĊĠĠĠ ĠJ imple Usage Graph Generator IntegrationTest :: class . java . getResource ("../../ ../../ ../../ "). to URI (). path Ċ Ċ internal Ġobject ĠJ imple Usage Graph Generator IntegrationTest Ġ: ĠSpe k ({ ĊĠĠĠ Ġdescribe (" the Ġintegration Ġof Ġdifferent Ġcomponents Ġof Ġthe Ġpackage Ġfor Ġsimple Ġclasses ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġsimple Ġclass Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Simple Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" the Ġintegration Ġof Ġdifferent Ġcomponents Ġof Ġthe Ġpackage Ġfor Ġclasses Ġcontaining Ġif Ġstatements ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġan Ġif Ġwith Ġa Ġlibrary Ġusage Ġin Ġthe Ġfalse - branch Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . if conditional . If False Use Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J If Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġan Ġif Ġwith Ġa Ġlibrary Ġusage Ġin Ġthe Ġtrue - branch Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . if conditional . If True Use Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J If Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġan Ġif Ġwith Ġa Ġlibrary Ġusage Ġin Ġboth Ġbranches Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . if conditional . If Both Use Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J If Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġan Ġif Ġwith Ġa Ġlibrary Ġusage Ġin Ġboth Ġbranches Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . if conditional . If No Use Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġan Ġif Ġwith Ġno Ġsuccess ors Ġof Ġthe Ġtrue / false Ġbranch ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . if conditional . If No End Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" filters Ġout Ġa Ġclass Ġcontaining Ġan Ġif Ġwith Ġmethod Ġexit ting Ġreturn Ġstatements ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . if conditional . If Returns Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" the Ġintegration Ġof Ġdifferent Ġcomponents Ġof Ġthe Ġpackage Ġfor Ġclasses Ġcontaining Ġswitch Ġstatements ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġa Ġswitch Ġwith Ġa Ġlibrary Ġusage Ġin Ġa Ġbranch Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ TEST _ CLASSES _ PACKAGE . users . switch conditional . Switch One Use Test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Table Switch Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Void Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Void Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Void Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġa Ġswitch Ġwith Ġa Ġlibrary Ġusage Ġin Ġthe Ġdefault Ġbranch Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ TEST _ CLASSES _ PACKAGE . users . switch conditional . Switch Default Use Test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Lookup Switch Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġa Ġswitch Ġwith Ġno Ġlibrary Ġusage Ġin Ġits Ġbranches Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ TEST _ CLASSES _ PACKAGE . users . switch conditional . Switch No Use Test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" the Ġintegration Ġof Ġdifferent Ġcomponents Ġof Ġthe Ġpackage Ġfor Ġclasses Ġcontaining Ġcomplex Ġstatements ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġan Ġarray list Ġand Ġa Ġlambda ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . ArrayList And Lambda Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġannotations ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Annotation Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġa Ġthrow Ġstatement Ġwith Ġlibrary Ġusage Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Throw Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" does Ġnot Ġconvert Ġa Ġclass Ġcontaining Ġa Ġchecked Ġthrow Ġstatement Ġwithout Ġlibrary Ġusage ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Throw Other Unchecked Exception Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" does Ġnot Ġconvert Ġa Ġclass Ġcontaining Ġan Ġunchecked Ġthrow Ġstatement Ġwithout Ġlibrary Ġusage ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Throw Other Checked Exception Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġwith Ġa Ġtry - catch Ġwith Ġlibrary Ġusage Ġin Ġthe Ġtry Ġblock Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Try Catch Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Void Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġa Ġstatic Ġclass Ġcall Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Static Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Void Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġa Ġnested Ġloop Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Loop Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J If Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J If Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrevious Branch Node () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrevious Branch Node () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Void Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" con verts Ġa Ġclass Ġcontaining Ġa Ġloop Ġwith Ġa Ġcontinue Ġstatement Ġto Ġa Ġlibrary Ġusage Ġgraph ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graph Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Loop Continue Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J If Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Assign Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J If Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrevious Branch Node () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Invoke Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J G oto Stmt >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrevious Branch Node () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode < J Return Void Stmt >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Usage Graph ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" the Ġintegration Ġof Ġdifferent Ġcomponents Ġfor Ġtypes Ġcontaining Ġnon - concrete Ġmethod Ġdeclarations ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" ign ores Ġa Ġnon - concrete Ġinterface Ġmethod Ġdeclaration ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ TEST _ CLASSES _ PACKAGE . users . Interface Test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). has Size ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" ign ores Ġa Ġnon - concrete Ġabstract Ġclass Ġmethod Ġdeclaration ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ TEST _ CLASSES _ PACKAGE . users . Abstract Class Test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). has Size ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" ign ores Ġa Ġnon - concrete Ġabstract Ġclass Ġmethod Ġdeclaration ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ TEST _ CLASSES _ PACKAGE . users . Part ially Abstract Class Test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġcontain Ġthe Ġfully Ġspecified Ġmethod Ġ( not Ġthe Ġdeclared Ġmethod ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). has Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" it Ġfilters Ġnon -' empty ' Ġpatterns ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" filters Ġout Ġpatterns Ġwith Ġonly Ġreturn Ġstatements ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ TEST _ CLASSES _ PACKAGE . users . Empty Pattern Test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdescribe (" filtering Ġof Ġdynamic Ġinvokes ") Ġ{ ĊĠĠĠĠĠĠĠ Ġit (" filters Ġout Ġlamb das Ġthat Ġalso Ġhave Ġa Ġlibrary Ġusage Ġoutside Ġthe Ġlambda ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Lambda Class Constant Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" filters Ġout Ġlamb das Ġthat Ġdo Ġnot Ġhave Ġa Ġlibrary Ġusage Ġoutside Ġthe Ġlambda ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Usage Graphs Ġ= ĠJ imple Library Usage Graph Generator (). generate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Project ( test Classes Class Path , Ġset Of ("$ TEST _ CLASSES _ PACKAGE . users . Lambda Usage Test ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( library Usage Graphs ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ Ċ private Ġfun ĠassertThat Structure Matches ( structure : ĠNode , Ġlibrary Usage Graph : ĠNode ) Ġ{ ĊĠĠĠ ĠassertThat ( library Usage Graph :: class ). isEqualTo ( structure :: class ) ĊĠĠĠ ĠassertThat ( library Usage Graph . success ors ). has Same Size As ( structure . success ors ) ĊĊĠĠĠ Ġif Ġ( library Usage Graph Ġis ĠJ imple Node Ġ&& Ġstructure Ġis ĠJ imple Node ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( structure . statement ). isInstanceOf ( library Usage Graph . statement :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġstructure . success ors . forEach Indexed Ġ{ Ġindex , Ġstructure Success or Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( structure Success or Ġ! is ĠPrevious Branch Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat Structure Matches ( structure Success or , Ġlibrary Usage Graph . success ors [ index ]) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠPrevious Branch Node ( success ors : ĠMutable List < Node > Ġ= Ġarray ListOf ()) Ġ: ĠSimple Node ( success ors ) Ċ Ċ private Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠStmt > Ġnode ( var arg Ġsuccess ors : ĠNode ) Ġ= ĠJ imple Node ( mock < T >(), Ġsuccess ors . to Mutable List ()) Ċ