/* Ċ Ġ* Ġ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 . ca ff init as . gradle . compile command Ċ Ċ import Ġorg . gradle . api . Gradle Exception Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . Path Sensitivity Ċ import Ġorg . gradle . api . tasks . compile . Java Compile Ċ import Ġorg . gradle . kotlin . dsl . create Ċ import Ġorg . gradle . kotlin . dsl . getBy Type Ċ import Ġorg . gradle . kotlin . dsl . named Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . channels . File Channel Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Standard Open Option Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Stream Ċ Ċ /** Ċ Ġ* ĠContains Ġall Ġthe Ġboilerplate Ġcode Ġto Ġuse Ġ` compile - command - annotations ` Ġwith ĠGradle Ġincremental Ċ Ġ* ĠJava Ġcompilation . Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ class ĠCompile Command Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ): ĠUnit Ġ= Ġproject . run Ġ{ ĊĠĠĠĠĠĠĠ Ġextensions . create < Compile Commands Extension >(" compile Commands ") ĊĊĠĠĠĠĠĠĠ Ġafter Evaluate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompile Commands Ġ= Ġextensions . getBy Type < Compile Commands Extension >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( compile Command Ġin Ġcompile Commands . get Compile Commands ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Set Ġ= Ġcompile Command . resolve Source Set ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . add ( source Set !!. annotation Processor Configuration Name , Ġcompile Commands . compile Commands Dependency ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . add ( source Set . compile Only Configuration Name , Ġcompile Commands . compile Commands Dependency ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . named < Java Compile >( source Set . compile Java Task Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . compiler Args . add ("- A compile . command . incremental . output =" Ġ+ Ġcompile Command . intermediate Files Directory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Dir Ġ= Ġsource Set . java . output Dir . resolve ( compile Command . intermediate Files Directory ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġoutput Dir . list Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠGradle Exception (" input Ġ'$ output Dir ' Ġis Ġnot Ġa Ġdirectory Ġcontaining Ġfiles ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSort Ġthe Ġinput Ġfile Ġnames Ġto Ġmake Ġthe Ġoutput Ġdeterministic Ġand Ġcache able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . sortBy Ġ{ Ġf Ġ-> Ġf . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconcat Files ( Arrays . stream ( files ), Ġcompile Command . outputFile !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconcat Files ( files : ĠStream < File >, Ġoutput : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Channel . open ( output . to Path (), ĠStandard Open Option . CREATE , ĠStandard Open Option . WRITE ). use Ġ{ Ġw Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ Ġfile : ĠFile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Channel . open ( file . to Path (), ĠStandard Open Option . READ ). use Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġremain Ġ= Ġr . size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġp Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( remain Ġ> Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtr Ġ= Ġr . transfer To ( p , Ġremain , Ġw ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremain Ġ-= Ġtr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ+= Ġtr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGradle Exception (" Failed Ġto Ġconcatenate Ġfiles Ġinto Ġfile Ġ$ output ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ