package Ġkotlin . modules Ċ Ċ import Ġjava . util .* Ċ import Ġjet . modules .* Ċ Ċ fun Ġmodule ( name : ĠString , Ġcallback : Ġ ĠModule Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠModule Builder ( name ) ĊĠĠĠ Ġbuilder . callback () ĊĠĠĠ ĠAll Modules . modules ?. add ( builder ) Ċ } Ċ Ċ class ĠS ources Builder ( val Ġparent : ĠModule Builder ) Ġ{ ĊĠĠĠ Ġfun Ġplus Assign ( pattern : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent . add Source Files ( pattern ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠClass path Builder ( val Ġparent : ĠModule Builder ) Ġ{ ĊĠĠĠ Ġfun Ġplus Assign ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent . addClass path Entry ( name ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠModule Builder ( val Ġname : ĠString ): ĠModule Ġ{ ĊĠĠĠ Ġ// Ġhttp :// yout rack . jetbrains . net / issue / KT - 9 0 4 ĊĠĠĠ Ġprivate Ġval Ġsource Files 0 : ĠArrayList < String ?> Ġ= ĠArrayList < String ?> () ĊĠĠĠ Ġprivate Ġval Ġclasspath Roots 0 : ĠArrayList < String ?> Ġ= ĠArrayList < String ?> () ĊĊĠĠĠ Ġval Ġsources : ĠS ources Builder ĊĠĠĠĠĠ Ġget () Ġ= ĠS ources Builder ( this ) ĊĊĠĠĠ Ġval Ġclasspath : ĠClass path Builder ĊĠĠĠĠĠ Ġget () Ġ= ĠClass path Builder ( this ) ĊĊĠĠĠ Ġfun Ġadd Source Files ( pattern : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsource Files 0 . add ( pattern ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Classpath Entry ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclasspath Roots 0 . add ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Source Files (): ĠList < String ?> ? Ġ= Ġsource Files 0 ĊĠĠĠ Ġoverride Ġfun ĠgetClass path Roots (): ĠList < String ?> ? Ġ= Ġclasspath Roots 0 ĊĠĠĠ Ġoverride Ġfun Ġget ModuleName (): ĠString ? Ġ= Ġname Ċ } ĊĊ