package Ġnet . mi lo sv asic . factory . kotlin Ċ Ċ import Ġnet . mi lo sv asic . factory . dependency . Classpath Ċ import Ġnet . mi lo sv asic . factory . dependency . Dependency Ċ import Ġnet . mi lo sv asic . factory . module . Module Ċ import Ġnet . mi lo sv asic . factory . project . Project Ċ import Ġnet . mi lo sv asic . factory . project . Project Factory Ċ import Ġjava . io . File Ċ Ċ class ĠKotlin Project Factory ( override Ġval Ġworking Folder Name : ĠString ) Ġ: ĠProject Factory () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠgetClass path ( project : ĠProject ): ĠClass path Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( project . language Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclasspath Ġ= ĠClass path () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ: ĠString Ġ= Ġproject . language ?. version Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradle Plugin Ġ= ĠDependency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" org . jetbrains . kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - gradle - plugin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Reflect Ġ= ĠDependency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" org . jetbrains . kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - reflect ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath . dependencies . add ( gradle Plugin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath . dependencies . add ( kotlin Reflect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġclasspath ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthrow ĠIllegalStateException (" No Ġlanguage Ġspecified .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Module Non Java Directories ( module : ĠModule , Ġroot : ĠFile ): ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġmodule . name . replace (" Ġ", Ġ"_ ") ĊĠĠĠĠĠĠĠ Ġval Ġlocal File Ġ= ĠFile ("${ root . absolute Path }${ File . separator }$ name ${ File . separator } src ") ĊĠĠĠĠĠĠĠ Ġval Ġmain Ġ= ĠFile ("${ local File . absolute Path }${ File . separator } main ") ĊĠĠĠĠĠĠĠ Ġval Ġtest Ġ= ĠFile ("${ local File . absolute Path }${ File . separator } test ") ĊĠĠĠĠĠĠĠ Ġval Ġmain Kotlin Ġ= ĠFile ("${ main . absolute Path }${ File . separator } kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġtest Kotlin Ġ= ĠFile ("${ test . absolute Path }${ File . separator } kotlin ") ĊĠĠĠĠĠĠĠ Ġval Ġdirectories Ġ= Ġmutable ListOf ( main Kotlin , Ġtest Kotlin ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġpackage Directory Kotlin Ġ= Ġmain Kotlin . absolute Path ĊĠĠĠĠĠĠĠ Ġvar Ġpackage Directory Test Kotlin Ġ= Ġtest Kotlin . absolute Path ĊĠĠĠĠĠĠĠ Ġmodule . group . split (". "). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Element Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Directory Kotlin Ġ+= ĠFile . separator Ġ+ Ġpackage Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Directory Test Kotlin Ġ+= ĠFile . separator Ġ+ Ġpackage Element ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpackage Directory Kotlin Ġ+= ĠFile . separator Ġ+ Ġmodule . p Package ĊĠĠĠĠĠĠĠ Ġpackage Directory Test Kotlin Ġ+= ĠFile . separator Ġ+ Ġmodule . p Package ĊĠĠĠĠĠĠĠ Ġdirectories . add ( File ( package Directory Kotlin )) ĊĠĠĠĠĠĠĠ Ġdirectories . add ( File ( package Directory Test Kotlin )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdirectories ĊĠĠĠ Ġ} Ċ Ċ }