/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ċ Ġ* Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ package Ġorg . jetbrains . kotlin . gradle . plugin . mpp Ċ Ċ import Ġgro ovy . lang . Closure Ċ import Ġorg . gradle . api . Action Ċ import Ġorg . gradle . api . Domain Object Set Ċ import Ġorg . gradle . api . Named Domain Object Container Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . Dependency Ċ import Ġorg . gradle . api . attributes . Attribute Ċ import Ġorg . gradle . api . attributes . Attribute Container Ċ import Ġorg . gradle . api . attributes . Usage . JAVA _ API Ċ import Ġorg . gradle . api . attributes . Usage . JAVA _ RUNTIME _ J ARS Ċ import Ġorg . gradle . api . internal . component . Usage Context Ċ import Ġorg . gradle . api . plugins . Java Plugin Ċ import Ġorg . gradle . api . publish . maven . Maven Publication Ċ import Ġorg . gradle . util . Configure Util Ċ import Ġorg . gradle . util . Wrap Util Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . Kotlin Multi platform Extension Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . kotlin Extension Ċ import Ġorg . jetbrains . kotlin . gradle . plugin .* Ċ import Ġorg . jetbrains . kotlin . gradle . utils . is Gradle Version At Least Ċ import Ġorg . jetbrains . kotlin . gradle . utils . lower Camel Case Name Ċ import Ġorg . jetbrains . kotlin . kon an . target . Kon an Target Ċ Ċ abstract Ġclass ĠAbstract Kotlin Target ( ĊĠĠĠ Ġfinal Ġoverride Ġval Ġproject : ĠProject Ċ ) Ġ: ĠKotlin Target Ġ{ ĊĠĠĠ Ġprivate Ġval Ġattribute Container Ġ= ĠH ierarchy Attribute Container ( parent Ġ= Ġnull ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Attributes (): ĠAttribute Container Ġ= Ġattribute Container ĊĊĠĠĠ Ġoverride Ġval Ġdefault Configuration Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdis amb igu ate Name (" default ") ĊĊĠĠĠ Ġoverride Ġval Ġapi Elements Configuration Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdis amb igu ate Name (" api Elements ") ĊĊĠĠĠ Ġoverride Ġval Ġruntime Elements Configuration Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdis amb igu ate Name (" runtime Elements ") ĊĊĠĠĠ Ġoverride Ġval Ġartifacts Task Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdis amb igu ate Name (" jar ") ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" target Ġ$ name Ġ($ platform Type )" ĊĊĠĠĠ Ġoverride Ġval Ġpublish able : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġval Ġcomponent : ĠKotlin Target Component Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Gradle Version At Least ( 4 , Ġ 7 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Kotlin Target Component () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Variant ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Kotlin Target Component (): ĠKotlin Target Component Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Extension Ġ= Ġproject . kotlin Extension Ġas ? ĠKotlin Multi platform Extension ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠKotlin Variant With Coordinates ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( target Name Ġ== ĠKotlin Multi platform Plugin . METADATA _ TARGET _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKotlin Variant With Coordinates ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġseparate Metadata Target Ġ= Ġkotlin Extension . targets . get ByName ( Kotlin Multi platform Plugin . METADATA _ TARGET _ NAME ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( kotlin Extension . is Gradle Metadata Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Variant With Metadata Variant ( this , Ġseparate Metadata Target ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġshould Ġonly Ġadd Ġthe ĠKotlin Ġmetadata Ġdependency Ġif Ġwe Ġpublish Ġno ĠGradle Ġmetadata Ġrelated Ġto ĠKotlin ĠM PP ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwith Ġmetadata , Ġsuch Ġa Ġdependency Ġwould Ġget Ġinvalid , Ġsince Ġa Ġplatform Ġmodule Ġshould Ġonly Ġdepend Ġon Ġmodules Ġfor Ġthat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsame Ġplatform , Ġnot ĠKotlin Ġmetadata Ġmodules ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Variant With Metadata Dependency ( this , Ġseparate Metadata Target ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Usage Contexts (): ĠSet < Usage Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpublish With Kotlin Metadata Ġ= Ġ( project . kotlin Extension Ġas ? ĠKotlin Multi platform Extension )?. is Gradle Metadata Available ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtrue Ġ// ĠIn Ġnon - MP P Ġproject , Ġthese Ġusage Ġcontexts Ġdo Ġnot Ġget Ġpublished Ġanyway ĊĊĠĠĠĠĠĠĠ Ġ// ĠHere , Ġ` JAVA _ API ` Ġand Ġ` JAVA _ RUNTIME _ J ARS ` Ġare Ġused Ġintention ally Ġas ĠGradle Ġneeds Ġthis Ġfor ĊĠĠĠĠĠĠĠ Ġ// Ġordering Ġof Ġthe Ġusage Ġcontexts Ġ( prior it izing Ġthe Ġdependencies ); ĊĠĠĠĠĠĠĠ Ġ// ĠThese ĠJava Ġusage s Ġshould Ġnot Ġbe Ġreplaced Ġwith Ġthe Ġcustom ĠKotlin Ġusage s . ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Platform Usage Context ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġproject . usage ByName ( JAVA _ API ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Elements Configuration Name , Ġpublish With Kotlin Metadata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comp il ations . get ByName ( Kotlin Compilation . MAIN _ COMPI L ATION _ NAME ) Ġis ĠKotlin Compilation To Runnable Files ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Platform Usage Context ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġproject . usage ByName ( JAVA _ RUNTIME _ J ARS ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġruntime Elements Configuration Name , Ġpublish With Kotlin Metadata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ). toSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġinternal Ġval Ġpublication Configure Actions Ġ= ĊĠĠĠĠĠĠĠ ĠWrap Util . to Domain Object Set ( Action :: class . java ) Ġas ĠDomain Object Set < Action < Maven Publication >> ĊĊĠĠĠ Ġoverride Ġfun Ġmaven Publication ( action : ĠAction < Maven Publication >) Ġ{ ĊĠĠĠĠĠĠĠ Ġpublication Configure Actions . add ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmaven Publication ( action : ĠClosure < Unit >) Ġ= ĊĠĠĠĠĠĠĠ Ġmaven Publication ( Configure Util . configure Using ( action )) Ċ } Ċ Ċ internal Ġfun ĠKotlin Target . dis amb igu ate Name ( simple Name : ĠString ) Ġ= ĊĠĠĠ Ġlower Camel Case Name ( target Name , Ġsimple Name ) Ċ Ċ open Ġclass ĠKotlin Android Target ( ĊĠĠĠ Ġoverride Ġval Ġtarget Name : ĠString , ĊĠĠĠ Ġproject : ĠProject Ċ ) Ġ: ĠAbstract Kotlin Target ( project ) Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġdis amb ig uation Classifier : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġoverride Ġval Ġplatform Type : ĠKotlin Platform Type ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠKotlin Platform Type . android Jvm ĊĊĠĠĠ Ġprivate Ġval Ġcompilation Factory Ġ= ĠKotlin Jvm Android Compilation Factory ( project , Ġthis ) ĊĊĠĠĠ Ġoverride Ġval Ġcompil ations : ĠNamed Domain Object Container < out ĠKotlin Jvm Android Compilation > Ġ= ĊĠĠĠĠĠĠĠ Ġproject . container ( compilation Factory . item Class , Ġcompilation Factory ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Usage Contexts (): ĠSet < Usage Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// TODO Ġsetup ĠAndroid Ġlibraries Ġpublishing . ĠThis Ġwill Ġlikely Ġrequire Ġnew ĠAPI Ġin Ġthe ĠAndroid ĠGradle Ġplugin ĊĠĠĠĠĠĠĠ Ġreturn Ġempty Set () ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠKotlin With Java Target ( ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġoverride Ġval Ġplatform Type : ĠKotlin Platform Type , ĊĠĠĠ Ġoverride Ġval Ġtarget Name : ĠString Ċ ) Ġ: ĠAbstract Kotlin Target ( project ) Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġdis amb ig uation Classifier : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġoverride Ġval Ġdefault Configuration Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠDependency . DEFAULT _ CONFIGURATION ĊĊĠĠĠ Ġoverride Ġval Ġapi Elements Configuration Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠJava Plugin . API _ ELEMENT S _ CONFIGURATION _ NAME ĊĊĠĠĠ Ġoverride Ġval Ġruntime Elements Configuration Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠJava Plugin . RUNTIME _ ELEMENT S _ CONFIGURATION _ NAME ĊĊĠĠĠ Ġoverride Ġval Ġartifacts Task Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠJava Plugin . JAR _ TASK _ NAME ĊĊĠĠĠ Ġoverride Ġval Ġcompil ations : ĠNamed Domain Object Container < Kotlin With Java Compilation > Ġ= ĊĠĠĠĠĠĠĠ Ġproject . container ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin With Java Compilation :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin With Java Compilation Factory ( project , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ) Ċ } Ċ Ċ open Ġclass ĠKotlin Only Target < T Ġ: ĠKotlin Compilation >( ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġoverride Ġval Ġplatform Type : ĠKotlin Platform Type Ċ ) Ġ: ĠAbstract Kotlin Target ( project ) Ġ{ ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġcompil ations : ĠNamed Domain Object Container < T > ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġtarget Name : ĠString ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠ Ġoverride Ġvar Ġdis amb ig uation Classifier : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġset Ċ } Ċ Ċ class ĠKotlin Native Target ( ĊĠĠĠ Ġproject : ĠProject , ĊĠĠĠ Ġval Ġkon an Target : ĠKon an Target Ċ ) Ġ: ĠKotlin Only Target < Kotlin Native Compilation >( project , ĠKotlin Platform Type . native ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġattributes . attribute ( kon an Target Attribute , Ġkon an Target . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠShould Ġbinary Ġfiles Ġbe Ġoutput Ġof Ġa Ġtarget Ġor Ġa Ġcompilation ? ĊĠĠĠ Ġoverride Ġval Ġartifacts Task Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdis amb igu ate Name (" link ") ĊĊĠĠĠ Ġoverride Ġval Ġpublish able : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġkon an Target . enabled On Current Host ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkon an Target Attribute Ġ= ĠAttribute . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" org . jetbrains . kotlin . native . target ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠCan Ġwe Ġdo Ġit Ġbetter ? ĊĠĠĠĠĠĠĠ Ġ// ĠUser - visible Ġconstants ĊĠĠĠĠĠĠĠ Ġval ĠDEBUG Ġ= ĠNative Build Type . DEBUG ĊĠĠĠĠĠĠĠ Ġval ĠRELEASE Ġ= ĠNative Build Type . RELEASE ĊĊĠĠĠĠĠĠĠ Ġval ĠEXEC UT ABLE Ġ= ĠNative Output Kind . EXECUT ABLE ĊĠĠĠĠĠĠĠ Ġval ĠFRAME WORK Ġ= ĠNative Output Kind . FRAME WORK ĊĠĠĠĠĠĠĠ Ġval ĠD Y NAMIC Ġ= ĠNative Output Kind . DYNAMIC ĊĠĠĠĠĠĠĠ Ġval ĠSTATIC Ġ= ĠNative Output Kind . STATIC ĊĠĠĠ Ġ} Ċ } ĊĊ