package Ġcom . jetbrains . rd . generator . gradle Ċ Ċ import Ġcom . jetbrains . rd . generator . nova . Rd Gen Ċ import Ġcom . jetbrains . rd . util . Statics Ċ import Ġgro ovy . lang . Closure Ċ import Ġorg . gradle . api . Default Task Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . api . tasks . Task Action Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ import Ġkotlin . reflect . K Property Ċ Ċ class ĠR d gen Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// global Ġparameters Ġfor Ġall Ġrd gen - based Ġtasks ĊĠĠĠĠĠĠĠ Ġproject . extensions . create (" rd gen ", ĠR d gen Params :: class . java , Ġproject ) ĊĊĠĠĠĠĠĠĠ Ġproject . tasks . create (" rd gen ", ĠR d gen Task :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠR d gen Params Ġ@ Jvm Over loads Ġconstructor ( val Ġproject : ĠProject , Ġval Ġtask : ĠTask ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġconstructor ( task : ĠTask ) Ġ: Ġthis ( task . project , Ġtask ) Ċ Ċ // Ġ Ġoption _ path ( Ġ Ġ' h ', Ġ" hash - folder "," Folder Ġto Ġstore Ġhash Ġfile Ġ'${ Rd Gen . hash FileName }' Ġfor Ġincremental Ġgeneration ", ĠPaths . get (" "). to AbsolutePath ()) ĊĠĠĠ Ġvar Ġhash Folder Ġ: ĠString ? Ġ= Ġnull Ċ Ċ // Ġ Ġoption _ path ( Ġ Ġnull , ĠĠ Ġ" compiled ", Ġ" Folder Ġfor Ġcompiled Ġd sl . ĠTemporary Ġfolder Ġis Ġcreated Ġif Ġoption Ġis Ġnot Ġspecified .") ĊĠĠĠ Ġval Ġcompiled Ġ: ĠString ? Ġ= Ġnull Ċ Ċ // Ġ Ġoption _ flag ( Ġ Ġ' f ', ĠĠ Ġ" force ", Ġ" Suppress Ġincremental Ġgeneration .") ĊĠĠĠ Ġvar Ġforce : ĠBoolean ? Ġ= Ġnull Ċ Ċ // Ġ Ġoption _ flag ( Ġ Ġ' x ', ĠĠ Ġ" clear ", Ġ" Clear Ġoutput Ġfolder Ġbefore Ġgeneration Ġ( if Ġit Ġis Ġnot Ġincremental ) Ġ") ĊĠĠĠ Ġvar Ġclear Output : ĠBoolean ? Ġ= Ġnull Ċ Ċ // Ġ Ġoption _ string (' p ', ĠĠĠ Ġ" packages ", Ġ" Java Ġpackage Ġnames Ġto Ġsearch Ġtop levels , Ġdelimited Ġby Ġ',' . ĠExample : Ġcom . jetbrains . r ider . model . nova ", Ġ" com , org ") ĊĠĠĠ Ġvar Ġpackages Ġ: ĠString ? Ġ= Ġnull Ċ Ċ // Ġ Ġoption _ string ( null , ĠĠ Ġ" filter ", Ġ" Filter Ġgenerators Ġby Ġsearching Ġregular Ġexpression Ġinside Ġgenerator Ġclass Ġsimple Ġname Ġ( case Ġins ensitive ). ĠExample : Ġkotlin | csharp | cpp ") ĊĠĠĠ Ġvar Ġfilter Ġ: ĠString ? Ġ= Ġnull Ċ Ċ // Ġ Ġoption _ flag ( Ġ Ġ' v ', ĠĠĠ Ġ" verbose ", Ġ" Verbose Ġoutput ") ĊĠĠĠ Ġvar Ġverbose : ĠBoolean ? Ġ= Ġnull ĊĊ Ċ // Ġ Ġfor Ġpassing Ġsystem Ġproperties ĊĠĠĠ Ġval Ġproperties Ġ: ĠProperties Ġ= ĠProperties () ĊĊĊĠĠĠ Ġ// specify Ġmultiple Ġgenerators ĊĠĠĠ Ġinternal Ġval Ġgenerators Ġ= Ġ Ġmutable ListOf < Gradle Generation Spec >() ĊĠĠĠ Ġfun Ġgenerator ( closure : ĠClosure < Gradle Generation Spec >) Ġ= ĠGradle Generation Spec (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . configure ( this , Ġclosure ) ĊĠĠĠĠĠĠĠ Ġgenerators . add ( this ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġgenerator ( closure : ĠGradle Generation Spec . () Ġ-> ĠUnit ) Ġ= ĠGradle Generation Spec (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġclosure () ĊĠĠĠĠĠĠĠ Ġgenerators . add ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// specify Ġmultiple Ġsource Ġfolders ĊĠĠĠ Ġinternal Ġval Ġ_ sources Ġ= Ġmutable ListOf < Any >() ĊĠĠĠ Ġfun Ġsources ( var arg Ġpaths : ĠAny ) Ġ{ Ġ_ sources . addAll ( paths ) Ġ} ĊĊĠĠĠ Ġ// specify Ġclasspath ĊĠĠĠ Ġinternal Ġval Ġ_ classpath Ġ= Ġmutable ListOf < Any >() ĊĠĠĠ Ġfun Ġclasspath ( var arg Ġpaths : ĠAny ) Ġ{ Ġ_ classpath . addAll ( paths ) Ġ} Ċ Ċ } Ċ Ċ open Ġclass ĠR d gen Task Ġ: ĠDefault Task () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlocal : ĠR d gen Params Ġ= Ġextensions . create (" params ", ĠR d gen Params :: class . java , Ġthis ) ĊĠĠĠ Ġprivate Ġval Ġglobal : ĠR d gen Params ? Ġ= Ġproject . extensions . findBy Type ( Rd gen Params :: class . java ) ĊĊĠĠĠ Ġfun Ġ< T > Ġget ( p : ĠK Property < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġp . call ( local ) ĊĠĠĠĠĠĠĠ Ġif Ġ( global Ġ== Ġnull ) Ġreturn Ġres ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ== Ġnull Ġ-> Ġp . call ( global ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġis ĠCollection < *> Ġ&& Ġres . isEmpty () Ġ-> Ġp . call ( global ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġis ĠMap < *, Ġ*> Ġ&& Ġres . isEmpty () Ġ-> Ġp . call ( global ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġres ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfiles ( p : ĠK Property < List <* >>) Ġ: ĠSet < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġget ( p ) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġlist . map Ġ{ Ġif Ġ( it Ġis ĠFunction 0 <* >) Ġit () Ġelse Ġit Ġ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġproject . files ( res ). files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Task Action ĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ ĠStatic s < Properties >(). use ( get ( Rd gen Params :: properties )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrd Gen Ġ= ĠR d Gen (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsources Ġ*= Ġ Ġfiles ( Ġ ĠR d gen Params ::_ sources ). join ToString ("; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhash Folder . parse ( ĠĠ Ġget ( ĠĠĠ ĠR d gen Params :: hash Folder )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompiled . parse ( ĠĠĠĠ Ġget ( ĠĠĠ ĠR d gen Params :: compiled )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath . parse ( ĠĠĠ Ġfiles ( Ġ ĠR d gen Params ::_ classpath ). join ToString ( File . path Separator ) Ġ{ Ġit . path Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackages . parse ( ĠĠĠĠ Ġget ( ĠĠĠ ĠR d gen Params :: packages )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . parse ( ĠĠĠĠĠĠ Ġget ( ĠĠĠ ĠR d gen Params :: filter )) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforce Ġ*= ĠĠĠĠĠĠĠĠĠĠĠ Ġget ( Rd gen Params :: force ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverbose Ġ*= ĠĠĠĠĠĠĠĠĠ Ġget ( Rd gen Params :: verbose ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Output Ġ*= ĠĠĠĠĠ Ġget ( Rd gen Params :: clear Output ) Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Generation Specs . addAll ( get ( Rd gen Params :: generators )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" Press Ġany Ġkey Ġto Ġcontinue : Ġ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSystem .` in `. read () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( rd Gen . run ()) Ġ{ Ġ" Rd ĠGeneration Ġfailed !" Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ