import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . file . Directory Property Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . file . FileType Ċ import Ġorg . gradle . api . provider . List Property Ċ import Ġorg . gradle . api . provider . Property Ċ import Ġorg . gradle . api . tasks .* Ċ import Ġorg . gradle . kotlin . dsl . register Ċ import Ġorg . gradle . work . Incremental Ċ import Ġorg . gradle . work . Input Changes Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Jvm Compilation Ċ import Ġjava . io . File Ċ import Ġjava . net . URL ClassLoader Ċ import Ġjavax . inject . Inject Ċ Ċ abstract Ġclass ĠCollect Screenshots Task Ġ@ Inject Ġconstructor () Ġ: ĠDefault Task () Ġ{ ĊĠĠĠ Ġ@ get : Incremental ĊĠĠĠ Ġ@ get : Path Sensitive ( Path Sensitivity . NAME _ ONLY ) ĊĠĠĠ Ġ@ get : Input Directory ĊĠĠĠ Ġabstract Ġval Ġinput Dir : ĠDirectory Property ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġruntime Dependencies : ĠProperty < File Collection > ĊĊĠĠĠ Ġ@ get : Output Directory ĊĠĠĠ Ġabstract Ġval Ġoutput Dir : ĠDirectory Property ĊĊĠĠĠ Ġ@ get : Input ĊĠĠĠ Ġabstract Ġval Ġignore : ĠList Property < String > ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġignore . set ( emptyList ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġexecute ( input Changes : ĠInput Changes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreload Class Ġ= ĠFile ( project . root Project . project Dir , Ġ" build Src / build / classes / kotlin / preload ") ĊĠĠĠĠĠĠĠ Ġrequire ( preload Class . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" preload Ġclass Ġnot Ġfound : Ġ'${ preload Class . absolute Path } '" ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinput Changes . getFile Changes ( input Dir ). forEach Ġ{ Ġchange Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( change ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( change . fileType Ġ== ĠFile Type . DIRECTORY ) Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( change . file . extension Ġ== Ġ" class ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass Name Ġ= Ġchange . file . name Without Extension ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( klass Name . drop Last ( 2 ) Ġin Ġignore . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcp Ġ= Ġ( runtime Dependencies . get (). map Ġ{ Ġit . to URI (). to URL () Ġ} Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Dir . get (). as File . to URI (). to URL () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu cl Ġ= ĠURL ClassLoader ( cp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġklass Ġ= Ġu cl . load Class ( klass Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Collect ing Ġscreenshot Ġfor Ġ${ klass Name } Ġ${ klass }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Method Ġ= Ġklass . getMethod (" main ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . java exec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . classpath Ġ+= Ġproject . files ( input Dir . get (). as File , Ġpreload Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . classpath Ġ+= Ġruntime Dependencies . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . main Class . set ( klass Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . working Dir ( project . root Project . project Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj vm Args ("- D take Screenshot = true ", Ġ"- D screenshot Path =${ output Dir . get (). as File }/ $ klass Name . png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsilently Ġignore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġonly Ġexecuted Ġif Ġthere Ġare Ġch ances Ġin Ġthe Ġinput Dir ĊĠĠĠĠĠĠĠ Ġval Ġrun Dem os Ġ= Ġoutput Dir . get (). as File . list Files Ġ{ Ġfile : ĠFile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . extension Ġ== Ġ" png " ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . name Without Extension Ġ}. sorted () ĊĠĠĠĠĠĠĠ Ġval Ġreadme Ġ= ĠFile ( project . project Dir , Ġ" README . md ") ĊĠĠĠĠĠĠĠ Ġif Ġ( readme . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlines Ġ= Ġreadme . read Lines (). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreenshots Line Ġ= Ġlines . indexOf First Ġ{ Ġit Ġ== Ġ" <!-- Ġ__ demos __ Ġ--> " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( screenshots Line Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines Ġ= Ġlines . sub List ( 0 , Ġscreenshots Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (" <!-- Ġ__ demos __ Ġ--> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (" ## ĠD emos ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( demo Ġin Ġrun Dem os ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Path Ġ= Ġproject . project Dir . relative To ( project . rootDir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (" ### Ġ${ demo . drop Last ( 2 )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("[ source Ġcode ]( src / demo / kotlin /${ demo . drop Last ( 2 )}. kt )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add (" ![ ${ demo } ]( https :// raw . githubusercontent . com / open rnd r / or x / media /$ project Path / images /${ demo }. png )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . add ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreadme . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreadme . write Text ( lines . join ToString ("\ n ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠScreenshots Helper Ġ{ ĊĠĠĠ Ġfun ĠKotlin Jvm Compilation . collect Screenshots ( config : ĠCollect Screenshots Task . () Ġ-> ĠUnit ): ĠCollect Screenshots Task Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġthis . project . tasks . register < Collect Screenshots Task >(" collect Screenshots "). get () ĊĠĠĠĠĠĠĠ Ġtask . output Dir . set ( project . file ( project . project Dir . toString () Ġ+ Ġ"/ images ")) ĊĠĠĠĠĠĠĠ Ġtask . input Dir . set ( output . classes Dirs . first ()) ĊĠĠĠĠĠĠĠ Ġtask . runtime Dependencies . set ( runtime Dependency Files ) ĊĠĠĠĠĠĠĠ Ġtask . config () ĊĠĠĠĠĠĠĠ Ġtask . depends On ( this . compile Kotlin Task ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtask ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcollect Screenshots ( project : ĠProject , Ġsource Set : ĠSource Set , Ġconfig : ĠCollect Screenshots Task . () Ġ-> ĠUnit ): ĠCollect Screenshots Task Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġproject . tasks . register < Collect Screenshots Task >(" collect Screenshots "). get () ĊĠĠĠĠĠĠĠ Ġtask . output Dir . set ( project . file ( project . project Dir . toString () Ġ+ Ġ"/ images ")) ĊĠĠĠĠĠĠĠ Ġtask . input Dir . set ( File ( project . build Dir , Ġ" classes / kotlin /${ source Set . name } ")) ĊĠĠĠĠĠĠĠ Ġtask . runtime Dependencies . set ( source Set . runtime Classpath ) ĊĠĠĠĠĠĠĠ Ġtask . config () ĊĠĠĠĠĠĠĠ Ġtask . depends On ( source Set . output ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtask ĊĠĠĠ Ġ} Ċ } ĊĊ