/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . kotlin . gradle Ċ Ċ import Ġorg . gradle . api . logging . configuration . Warning Mode Ċ import Ġorg . gradle . util . Gradle Version Ċ import Ġorg . jetbrains . kotlin . gradle . test base .* Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . condition . Disabled On Os Ċ import Ġorg . junit . jupiter . api . condition . OS Ċ Ċ @ DisplayName (" Build Ġcache Ġre location ") Ċ @ Simple Gradle Plugin Tests Ċ class ĠBuild Cache Re location IT Ġ: ĠK GP Base Test () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġdefault Build Options Ġ= Ġsuper . default Build Options . copy ( build Cache Enabled Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġval Ġlocal Build Cache Dir Ġget () Ġ= Ġworking Dir . resolve (" remote - jdk - build - cache ") ĊĊĠĠĠ Ġ@ DisplayName (" works Ġfor ĠKotlin Ġsimple Ġproject ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Re location Simple Project ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( first Project , Ġsecond Project ) Ġ= Ġprepare Test Projects (" simple Project ", Ġgradle Version ) ĊĊĠĠĠĠĠĠĠ Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (": classes ", Ġ": test Classes "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" works Ġfor ĠKotlin Ġwith ĠK apt Ġsimple Ġproject ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Re location Simple K apt ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( first Project , Ġsecond Project ) Ġ= Ġprepare Test Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k apt 2 / simple ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Version ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . gradle Properties . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk apt . use Build Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (": classes ", Ġ": test Classes "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (": k apt Kotlin ", Ġ": k apt Generate Stub s Kotlin ", Ġ": compile Kotlin ", Ġ": compile Test Kotlin ", Ġ": compile Java ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" works Ġwith ĠJS / D CE Ġproject ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Re location Kotlin 2 Js D ce ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( first Project , Ġsecond Project ) Ġ= Ġprepare Test Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin 2 Js D ce Project ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Version ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġtest Project Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFix Ġthe Ġproblem Ġthat Ġthe Ġdestination Dir Ġof Ġcompile Ġtask Ġ( i . e . Ġbuild Dir ) Ġcontains Ġfiles Ġfrom Ġother Ġtasks : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Project . sub Project (" main Project "). build Gradle . modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace ("/ example app . js ", Ġ"/ web / example app . js ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Project . sub Project (" library Project "). build Gradle . modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace ("/ example app . js ", Ġ"/ web / example app . js ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFix Ġassemb ling Ġthe ĠJ AR Ġfrom Ġthe Ġwhole Ġbuild Dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" from Ġbuild Dir ", Ġ" from Ġcompile Kotlin 2 Js . destination Dir ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" assemble ", Ġ" run D ce Kotlin Js "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (": library Project : compile Kotlin 2 Js ", Ġ": main Project : compile Kotlin 2 Js ", Ġ": main Project : run D ce Kotlin Js ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" works Ġwith ĠMulti platform ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Re location Multi platform ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( first Project , Ġsecond Project ) Ġ= Ġprepare Test Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" new - mpp - lib - with - tests ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Version , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Options Ġ= Ġdefault Build Options . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwarning Mode Ġ= ĠWarning Mode . Summary Ġ// ĠRemove Ġit Ġonce Ġproject Ġwill Ġbe Ġupdated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" build "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Kotlin Metadata ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Kotlin Jvm With Java ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Test Kotlin Jvm With Java ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Kotlin Js ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Test Kotlin Js " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" works Ġwith ĠAndroid Ġproject ") ĊĠĠĠ Ġ@ Gradle Test Versions ( min Version Ġ= Ġ" 6 . 7 . 1 ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Re location Android Project ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( first Project , Ġsecond Project ) Ġ= Ġprepare Test Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Android Project ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Version , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Build Options . copy ( android Version Ġ= ĠTest Versions . AG P . AG P _ 4 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" assemble Debug "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (": Lib ", Ġ": Android "). flatMap Ġ{ Ġmodule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" Flavor 1 ", Ġ" Flavor 2 "). flatMap Ġ{ Ġflavor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" Debug "). map Ġ{ Ġbuild Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ module : compile $ flavor ${ build Type } Kotlin " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" Test Ġre location Ġfor ĠAndroid Ġwith Ġdagger Ġproject ") ĊĠĠĠ Ġ@ Gradle Test Versions ( min Version Ġ= Ġ" 6 . 7 . 1 ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Re location Android D agger ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( first Project , Ġsecond Project ) Ġ= Ġprepare Test Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" k apt 2 / android - d agger ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Version , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Build Options . copy ( android Version Ġ= ĠTest Versions . AG P . AG P _ 4 2 ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . sub Project (" app "). build Gradle . append ("\ nk apt . use Build Cache Ġ= Ġtrue ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" assemble Debug "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" Debug "). flatMap Ġ{ Ġbuild Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" k apt ", Ġ" k apt Generate Stub s ", Ġ" compile "). map Ġ{ Ġkotlin Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": app :$ kotlin Task ${ build Type } Kotlin " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" with Ġnative Ġproject ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġ@ Disabled On Os ( OS . WINDOWS , Ġdisabled Reason Ġ= Ġ" remove Ġafter Ġfix Ġof ĠK T - 4 8 2 8 3 ") ĊĠĠĠ Ġfun Ġtest Re location Native ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( first Project , Ġsecond Project ) Ġ= Ġprepare Test Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" native - build - cache ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Version , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Build Options . copy ( parallel Ġ= Ġfalse ) Ġ// Ġdisabled Ġto Ġbe Ġable Ġto Ġconsume Ġpublished Ġlibrary Ġbefore Ġapp Ġcompilation ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Repo Uri Ġ= Ġit . project Path . resolve (" repo "). to Uri () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . sub Project (" build - cache - app "). build Gradle K ts . append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepositories Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Url ("$ local Repo Uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Project , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (": build - cache - lib : publish ", Ġ": build - cache - app : assemble "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": build - cache - lib : compile Kotlin Host ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": build - cache - app : compile Kotlin Host ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": build - cache - app : lib - module : compile Kotlin Host ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": build - cache - app : link Debug Static Host ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": build - cache - app : link Debug Shared Host " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" Incremental Ġcompilation Ġbuild Ġcache Ġdoes Ġnot Ġbreak Ġre located Ġcache ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Kotlin Compile Caching Incremental Build With Re location ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Project Ġ= Ġproject (" build Cache Simple ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Project Ġ= Ġproject (" build Cache Simple ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Kotlin Compile Caching Incremental Build ( first Project , Ġsecond Project ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" K apt Ġincremental Ġcompilation Ġworks Ġwith Ġcache ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest K apt Caching Incremental Build Without Re location ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject (" k apt 2 / k apt Avoid ance ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck K apt Caching Incremental Build ( this , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" K apt Ġincremental Ġcompilation Ġbuild Ġdoes Ġnot Ġbreak Ġre located Ġbuild Ġcache ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest K apt Caching Incremental Build With Re location ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Project Ġ= Ġproject (" k apt 2 / k apt Avoid ance ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Project Ġ= Ġproject (" k apt 2 / k apt Avoid ance ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck K apt Caching Incremental Build ( first Project , Ġsecond Project ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare Test Projects ( ĊĠĠĠĠĠĠĠ ĠprojectName : ĠString , ĊĠĠĠĠĠĠĠ Ġgradle Version : ĠGradle Version , ĊĠĠĠĠĠĠĠ Ġbuild Options : ĠBuild Options Ġ= Ġdefault Build Options , ĊĠĠĠĠĠĠĠ Ġadditional Configuration : Ġ( Test Project ) Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ): ĠPair < Test Project , ĠTest Project > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Project Ġ= Ġproject ( projectName , Ġgradle Version , Ġbuild Options ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Configuration ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Project Ġ= Ġproject ( projectName , Ġgradle Version , Ġbuild Options ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Configuration ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfirst Project Ġto Ġsecond Project ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Build Cache Re location ( ĊĠĠĠĠĠĠĠ Ġfirst Project : ĠTest Project , ĊĠĠĠĠĠĠĠ Ġsecond Project : ĠTest Project , ĊĠĠĠĠĠĠĠ Ġtasks To Execute : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġcache able Tasks : ĠList < String > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst Project . build (* tasks To Execute . to Typed Array ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (* cache able Tasks . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsecond Project . build (* tasks To Execute . to Typed Array ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (* cache able Tasks . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Kotlin Compile Caching Incremental Build ( ĊĠĠĠĠĠĠĠ Ġfirst Project : ĠTest Project , ĊĠĠĠĠĠĠĠ Ġsecond Project : ĠTest Project ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġbuild , Ġshould Ġbe Ġstored Ġinto Ġthe Ġbuild Ġcache : ĊĠĠĠĠĠĠĠ Ġfirst Project . build (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠA Ġcache Ġhit : Ġa Ġclean Ġbuild Ġwithout Ġany Ġchanges Ġto Ġthe Ġproject ĊĠĠĠĠĠĠĠ Ġsecond Project . build (" clean ", Ġ" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠChange Ġthe Ġreturn Ġtype Ġof Ġfoo () Ġfrom ĠInt Ġto ĠString Ġin Ġfoo . kt , Ġand Ġcheck Ġthat Ġfoo Usage . kt Ġis Ġre compiled Ġas Ġwell : ĊĠĠĠĠĠĠĠ Ġval Ġfoo Kt SourceFile Ġ= Ġsecond Project . kotlin Sources Dir (). resolve (" foo . kt ") ĊĠĠĠĠĠĠĠ Ġfoo Kt SourceFile . modify Ġ{ Ġit . replace (" Int Ġ= Ġ 1 ", Ġ" String Ġ= Ġ\" abc \" ") Ġ} ĊĠĠĠĠĠĠĠ Ġsecond Project . build (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Incremental Compilation ( modified Files Ġ= Ġset Of ( foo Kt SourceFile )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRe vert Ġthe Ġchange Ġto Ġthe Ġreturn Ġtype Ġof Ġfoo (), Ġand Ġcheck Ġif Ġwe Ġget Ġa Ġcache Ġhit ĊĠĠĠĠĠĠĠ Ġfoo Kt SourceFile . modify Ġ{ Ġit . replace (" String Ġ= Ġ\" abc \"", Ġ" Int Ġ= Ġ 1 ") Ġ} ĊĠĠĠĠĠĠĠ Ġsecond Project . build (" clean ", Ġ" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck K apt Caching Incremental Build ( ĊĠĠĠĠĠĠĠ Ġfirst Project : ĠTest Project , ĊĠĠĠĠĠĠĠ Ġsecond Project : ĠTest Project ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk apt Options Ġ= ĠBuild Options . K apt Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverbose Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Workers Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincremental K apt Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Compile Classpath Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġbuild , Ġshould Ġbe Ġstored Ġinto Ġthe Ġbuild Ġcache : ĊĠĠĠĠĠĠĠ Ġfirst Project . build (" clean ", Ġ": app : build ", Ġbuild Options Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (": app : k apt Generate Stub s Kotlin ", Ġ": app : k apt Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠA Ġcache Ġhit : Ġa Ġclean Ġbuild Ġwithout Ġany Ġchanges Ġto Ġthe Ġproject ĊĠĠĠĠĠĠĠ Ġsecond Project . build (" clean ", Ġ": app : build ", Ġbuild Options Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": app : k apt Generate Stub s Kotlin ", Ġ": app : k apt Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġchanges Ġto Ġannotated Ġclass Ġand Ġcheck Ġk apt Ġtasks Ġare Ġre - executed ĊĠĠĠĠĠĠĠ Ġval Ġapp Class Kt SourceFile Ġ= Ġsecond Project . sub Project (" app "). kotlin Sources Dir (). resolve (" App Class . kt ") ĊĠĠĠĠĠĠĠ Ġapp Class Kt SourceFile . modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" val Ġtest Val : ĠString Ġ= Ġ\" text \"", Ġ" val Ġtest Val : ĠInt Ġ= Ġ 1 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsecond Project . build (" build ", Ġbuild Options Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": app : k apt Generate Stub s Kotlin ", Ġ": app : k apt Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRe vert Ġchanges Ġand Ġcheck Ġk apt Ġtasks Ġare Ġfrom Ġcache ĊĠĠĠĠĠĠĠ Ġapp Class Kt SourceFile . modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" val Ġtest Val : ĠInt Ġ= Ġ 1 ", Ġ" val Ġtest Val : ĠString Ġ= Ġ\" text \" ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsecond Project . build (" clean ", Ġ" build ", Ġbuild Options Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": app : k apt Generate Stub s Kotlin ", Ġ": app : k apt Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ