/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠMichael ĠRo z um y ans ki y Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . jo om . colon ist . plugin Ċ Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . api . plugins . Java Plugin Ċ import Ġorg . gradle . api . tasks . Source Set Ċ import Ġorg . gradle . api . tasks . Source Set Output Ċ import Ġorg . gradle . api . tasks . compile . Java Compile Ċ import Ġjava . io . File Ċ Ċ class ĠJava Colon ist Plugin Ġ: ĠBase Colon ist Plugin () Ġ{ ĊĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠ Ġsuper . apply ( project ) ĊĊĠĠĠ Ġval Ġcolon ist Ġ= Ġproject . extensions . create (" colon ist ", ĠJava Colon ist Plugin Extension :: class . java ) ĊĊĠĠĠ Ġadd Dependencies () ĊĊĠĠĠ Ġproject . after Evaluate Ġ{ ĊĠĠĠĠĠ Ġif Ġ( project . plugins . has Plugin (" java ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Colon ist For Java () ĊĠĠĠĠĠĠĠ Ġif Ġ( colon ist . process Test ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsetup Colon ist For Java Test () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception (" Project Ġshould Ġuse ĠJava Ġplugin ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġadd Dependencies () Ġ{ ĊĠĠĠ Ġadd Dependencies ( Java Plugin . IMPLEMENT ATION _ CONFIGURATION _ NAME ) ĊĠĠĠ Ġadd Dependencies ( Java Plugin . TEST _ IMPLEMENT ATION _ CONFIGURATION _ NAME ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Colon ist For Java () Ġ{ ĊĠĠĠ Ġlogger . info (" Setting Ġup ĠCol on ist Ġtask Ġfor ĠJava Ġproject Ġ{} ...", Ġproject . name ) ĊĠĠĠ Ġcreate Tasks ( project . source Sets . main , Ġproject . tasks . compile Java ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup Colon ist For Java Test () Ġ{ ĊĠĠĠ Ġlogger . info (" Setting Ġup ĠCol on ist Ġtask Ġfor ĠJava Ġtest Ġproject Ġ{} ...", Ġproject . name ) ĊĠĠĠ Ġcreate Tasks ( project . source Sets . test , Ġproject . tasks . compile Test Java , Ġ" test ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Tasks ( source Set : ĠSource Set , Ġcompile Task : ĠJava Compile , Ġname Suffix : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠ Ġval Ġsuffix Ġ= Ġname Suffix . capitalize () ĊĠĠĠ Ġval Ġcolon ist Dir Ġ= ĠFile ( project . build Dir , Ġget Colon ist RelativePath ( name Suffix )) ĊĠĠĠ Ġval Ġclasses Dirs Ġ= Ġget Classes Dirs ( source Set . output ) ĊĠĠĠ Ġval Ġbackup Dirs Ġ= Ġget Backup Dirs ( project . build Dir , Ġcolon ist Dir , Ġclasses Dirs ) ĊĠĠĠ Ġval Ġsource Dir Ġ= ĠFile ( colon ist Dir , Ġ" src ") ĊĠĠĠ Ġval Ġclasspath Ġ= Ġcompile Task . classpath . toList () ĊĠĠĠ Ġval Ġboot Classpath Ġ= ĊĠĠĠĠĠ Ġcompile Task . options . bootstrap Classpath ?. toList () ĊĠĠĠĠĠĠĠ Ġ?: ĠSystem . getProperty (" sun . boot . class . path ") ?. split ( File . path Separator )?. map Ġ{ ĠFile ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġempty List () ĊĠĠĠ Ġval Ġcolon ist Task Ġ= Ġcreate Colon ist Process Task (" colon ist Process $ suffix ", Ġclasses Dirs , Ġbackup Dirs , Ġsource Dir , Ġclasspath , Ġboot Classpath ) ĊĠĠĠ Ġval Ġbackup Task Ġ= Ġcreate Backup Class Files Task (" colon ist Backup Classes $ suffix ", Ġclasses Dirs , Ġbackup Dirs ) ĊĠĠĠ Ġconfigure Tasks ( colon ist Task , Ġbackup Task , Ġcompile Task ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Colon ist RelativePath ( suffix : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( suffix . isEmpty ()) ĠCOL ON IST _ PATH Ġelse ĠCOL ON IST _ PATH Ġ+ ĠFile . separator Char Ġ+ Ġsuffix ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Classes Dirs ( output : ĠSource Set Output ): ĠList < File > Ġ{ ĊĠĠĠ Ġreturn Ġoutput . classes Dirs . files . toList () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Backup Dirs ( build Dir : ĠFile , Ġcolon ist Dir : ĠFile , Ġclasses Dirs : ĠList < File >): ĠList < File > Ġ{ ĊĠĠĠ Ġreturn Ġclasses Dirs . map Ġ{ Ġclasses Dir Ġ-> ĊĠĠĠĠĠ Ġval Ġrelative File Ġ= Ġclasses Dir . relative To Or Self ( build Dir ) ĊĠĠĠĠĠ Ġ// ĠXXX : ĠWhat Ġif Ġrelative File Ġis Ġroot ed ? ĠMaybe Ġwe Ġneed Ġto Ġremove Ġthe Ġroot Ġpart Ġfrom Ġit . ĊĠĠĠĠĠ ĠFile ( colon ist Dir , Ġrelative File . path ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġconfigure Tasks ( colon ist Task : ĠCol on ist Task , Ġbackup Task : ĠBackup Classes Task , Ġcompile Task : ĠTask ) Ġ{ ĊĠĠĠ Ġcolon ist Task . must Run After ( compile Task ) ĊĠĠĠ Ġcolon ist Task . depends On ( compile Task ) ĊĠĠĠ Ġcolon ist Task . depends On ( backup Task ) ĊĠĠĠ Ġcompile Task . final ized By ( colon ist Task ) ĊĊĠĠĠ Ġval Ġclean Backup Task Ġ= Ġproject . tasks [" clean ${ backup Task . name . capitalize ()} "] !! ĊĠĠĠ Ġval Ġclean Colon ist Task Ġ= Ġproject . tasks [" clean ${ colon ist Task . name . capitalize ()} "] !! ĊĊĠĠĠ Ġclean Backup Task . do First Ġ{ ĊĠĠĠĠĠ Ġbackup Task . clean () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclean Colon ist Task . do First Ġ{ ĊĠĠĠĠĠ Ġcolon ist Task . clean () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclean Colon ist Task . depends On ( clean Backup Task ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Colon ist Process Task ( ĊĠĠĠ Ġtask Name : ĠString , ĊĠĠĠ Ġclasses Dirs : ĠList < File >, ĊĠĠĠ Ġbackup Dirs : ĠList < File >, ĊĠĠĠ Ġsource Dir : ĠFile , ĊĠĠĠ Ġclasspath : ĠList < File >, ĊĠĠĠ Ġboot Classpath : ĠList < File > ĊĠ Ġ): ĠCol on ist Task Ġ{ ĊĠĠĠ Ġlogger . info (" Creating ĠCol on ist Ġtask Ġ{} ...", Ġtask Name ) ĊĠĠĠ Ġlogger . info (" Ġ ĠSource Ġclasses Ġdirectories : Ġ{}", Ġbackup Dirs ) ĊĠĠĠ Ġlogger . info (" Ġ ĠPro cessed Ġclasses Ġdirectories : Ġ{}", Ġclasses Dirs ) ĊĊĠĠĠ Ġreturn Ġproject . tasks . create ( task Name , ĠCol on ist Task :: class . java ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠ Ġtask . description Ġ= Ġ" Processes Ġ. class Ġfiles Ġwith ĠCol on ist ĠProcessor ." ĊĠĠĠĠĠ Ġtask . backup Dirs Ġ= Ġbackup Dirs ĊĠĠĠĠĠ Ġtask . classes Dirs Ġ= Ġclasses Dirs ĊĠĠĠĠĠ Ġtask . source Dir Ġ= Ġsource Dir ĊĠĠĠĠĠ Ġtask . classpath Ġ= Ġclasspath ĊĠĠĠĠĠ Ġtask . boot Classpath Ġ= Ġboot Classpath ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Backup Class Files Task ( ĊĠĠĠ Ġtask Name : ĠString , ĊĠĠĠ Ġclasses Dirs : ĠList < File >, ĊĠĠĠ Ġbackup Dirs : ĠList < File > ĊĠ Ġ): ĠBackup Classes Task Ġ{ ĊĠĠĠ Ġreturn Ġproject . tasks . create ( task Name , ĠBackup Classes Task :: class . java ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠ Ġtask . description Ġ= Ġ" Back Ġup Ġoriginal Ġ. class Ġfiles ." ĊĠĠĠĠĠ Ġtask . classes Dirs Ġ= Ġclasses Dirs ĊĠĠĠĠĠ Ġtask . backup Dirs Ġ= Ġbackup Dirs ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠCOL ON IST _ PATH Ġ= Ġ" colon ist " ĊĠ Ġ} Ċ } Ċ