/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* Ġ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 . pm 2 0 Ċ Ċ import Ġcom . android . build . gradle . internal . publishing . Android Artifacts Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . Configuration Ċ import Ġorg . gradle . api . artifacts . Module Dependency Ċ import Ġorg . gradle . api . artifacts . Publish Artifact Ċ import Ġorg . gradle . api . attributes .* Ċ import Ġorg . gradle . api . capabilities . Capability Ċ import Ġorg . gradle . api . component . Ad hoc Component With Variants Ċ import Ġorg . gradle . api . component . Software Component Factory Ċ import Ġorg . gradle . api . provider . Provider Ċ import Ġorg . gradle . api . publish . Publishing Extension Ċ import Ġorg . gradle . api . publish . maven . Maven Publication Ċ import Ġorg . gradle . api . publish . maven . internal . publication . Default Maven Publication Ċ import Ġorg . gradle . api . tasks . bund ling . Abstract Archive Task Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Usage s Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . pm 2 0 . util . Computed Capability Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . pm 2 0 . util . copy Attributes Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . pm 2 0 . util . copy Configuration For Publishing Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . pm 2 0 . util . dis amb igu ate Name Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . published Configuration Name Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . usage ByName Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . with Type Ċ import Ġorg . jetbrains . kotlin . gradle . utils . dash Separ ated Name Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ interface ĠPlatform Publication To Maven Request Ġ{ ĊĠĠĠ Ġval Ġcomponent Name : ĠString ĊĠĠĠ Ġval Ġfrom Module : ĠKotlin Gradle Module ĊĠĠĠ Ġval Ġpublication Holder : ĠSingle Maven Published Module Holder ĊĠĠĠ Ġval Ġvariant Publication Requests : ĠIterable < Variant Publication Request > Ċ } Ċ Ċ data Ġclass ĠBasic Platform Publication To Maven Request ( ĊĠĠĠ Ġoverride Ġval Ġcomponent Name : ĠString , ĊĠĠĠ Ġoverride Ġval Ġfrom Module : ĠKotlin Gradle Module , ĊĠĠĠ Ġoverride Ġval Ġpublication Holder : ĠSingle Maven Published Module Holder , ĊĠĠĠ Ġoverride Ġval Ġvariant Publication Requests : ĠIterable < Variant Publication Request > Ċ ) Ġ: ĠPlatform Publication To Maven Request Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( variant Publication Requests . all Ġ{ Ġit . from Variant . containing Module Ġ=== Ġfrom Module Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Variants Ġfor Ġpublication Ġshould Ġall Ġbelong Ġto Ġthe Ġfrom Module Ġ($ from Module )" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠTODO : Ġconsider Ġalso Ġusing Ġthis Ġclass Ġfor Ġexposing Ġa ĠK PM Ġvariant 's Ġconfigurations Ġfor Ġproject - to - project Ġdependencies , Ċ Ġ* ĠĠĠĠĠĠĠ Ġso Ġthat Ġa Ġvariant Ġmay Ġexpose Ġan Ġarbitrary Ġset Ġof Ġconfigurations Ġrather Ġjust Ġ{ ĠAPI , Ġruntime Ġ} Ġor Ġ{ ĠAPI Ġ} Ġ*/ Ċ interface ĠVariant Publication Request Ġ{ ĊĠĠĠ Ġval Ġfrom Variant : ĠKotlin Gradle Variant ĊĠĠĠ Ġval Ġpublish Configuration : ĠConfiguration Ċ } Ċ Ċ data Ġclass ĠBasic Variant Publication Request ( ĊĠĠĠ Ġoverride Ġval Ġfrom Variant : ĠKotlin Gradle Variant , ĊĠĠĠ Ġoverride Ġval Ġpublish Configuration : ĠConfiguration Ċ ) Ġ: ĠVariant Publication Request ĊĊ Ċ fun ĠVariant Publishing Configurator . configure Native Variant Publication ( variant : ĠKotlin Native Variant Internal ) Ġ{ ĊĠĠĠ Ġval Ġpublish Configurations Ġ= ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠ Ġvariant . api Elements Configuration , ĊĠĠĠĠĠĠĠ Ġvariant . host Specific Metadata Elements Configuration Ġ// Ġhost - specific Ġmetadata Ġmay Ġbe Ġabsent ĊĠĠĠ Ġ) ĊĠĠĠ Ġconfigure Single Variant Publishing ( variant , Ġvariant , Ġpublish Configurations ) Ċ } Ċ Ċ fun ĠVariant Publishing Configurator . configure Single Variant Publication ( variant : ĠKotlin Gradle Published Variant With Runtime ) Ġ{ ĊĠĠĠ Ġval Ġpublish Configurations Ġ= ĠlistOf ( variant . api Elements Configuration , Ġvariant . runtime Elements Configuration ) ĊĠĠĠ Ġconfigure Single Variant Publishing ( variant , Ġvariant , Ġpublish Configurations ) Ċ } Ċ Ċ fun ĠVariant Publishing Configurator . configure Single Variant Publishing ( ĊĠĠĠ Ġvariant : ĠKotlin Gradle Variant , ĊĠĠĠ Ġpublished Module Holder : ĠSingle Maven Published Module Holder , ĊĠĠĠ Ġpublish Configurations : ĠIterable < Configuration > Ċ ) Ġ{ ĊĠĠĠ Ġconfigure Publishing ( ĊĠĠĠĠĠĠĠ ĠBasic Platform Publication To Maven Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplatform Component Name ( variant ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . containing Module , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublished Module Holder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Configurations . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Variant Publication Request ( variant , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ open Ġclass ĠVariant Publishing Configurator Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġproject : ĠProject , ĊĠĠĠ Ġprivate Ġval Ġsoftware Component Factory : ĠSoftware Component Factory Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget ( project : ĠProject ): ĠVariant Publishing Configurator Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . objects . newInstance ( Variant Publishing Configurator :: class . java , Ġproject ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġplatform Component Name ( variant : ĠKotlin Gradle Variant ) Ġ= Ġvariant . dis amb igu ate Name ("") ĊĊĠĠĠ Ġopen Ġfun Ġinfer Maven Scope ( variant : ĠKotlin Gradle Variant , Ġconfiguration Name : ĠString ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Name Ġ== Ġvariant . api Elements Configuration . name Ġ-> Ġ" compile " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Ġis ĠKotlin Gradle Variant With Runtime Ġ&& Ġconfiguration Name Ġ== Ġvariant . runtime Elements Configuration . name Ġ-> Ġ" runtime " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġconfigure Publishing ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠPlatform Publication To Maven Request ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Name Ġ= Ġrequest . component Name ĊĊĠĠĠĠĠĠĠ Ġregister Platform Module Publication ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . publication Holder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . variant Publication Requests , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . from Module :: if Made Public ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpublish From Variants Ġ= Ġrequest . variant Publication Requests . map To ( mutable Set Of ()) Ġ{ Ġit . from Variant Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCollect ing Ġsources Ġfor Ġmultiple Ġvariants Ġis Ġnot Ġyet Ġsupported ; ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġmake Ġcall ers Ġprovide Ġthe Ġsource Ġvariants ? ĊĠĠĠĠĠĠĠ Ġ// ĠThe ĠM PP Ġplugin Ġdoesn 't Ġpublish Ġthe Ġsource Ġartifacts Ġas Ġvariants ; Ġkeep Ġthat Ġbehavior Ġfor Ġlegacy - mapped Ġvariants Ġfor Ġnow ĊĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish From Variants . size Ġ== Ġ 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish From Variants . none Ġ{ Ġit Ġis ĠLegacy Mapped Variant Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingle Published Variant Ġ= Ġpublish From Variants . single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Source Elements Publishing ( component Name , Ġsingle Published Variant ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġregister Platform Variants In Root Module ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . publication Holder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . from Module , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . variant Publication Requests ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġconfigure Source Elements Publishing ( component Name : ĠString , Ġvariant : ĠKotlin Gradle Variant ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Name Ġ= Ġvariant . dis amb igu ate Name (" source Elements ") ĊĠĠĠĠĠĠĠ Ġval Ġdocs Variants Ġ= ĠDocumentation Variant Configurator (). create Sources Elements Configuration ( configuration Name , Ġvariant ) ĊĠĠĠĠĠĠĠ Ġproject . components . with Type ( Ad hoc Component With Variants :: class . java ). named ( component Name ). configure Ġ{ Ġcomponent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent . add Variants From Configuration ( docs Variants ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġthe Ġ[ Ad hoc Component With Variants ] Ġnamed Ġ[ component Name ] Ġfor Ġthe Ġgiven Ġ[ publish Configurations With Maven Scopes ]. ĊĠĠĠĠ Ġ* ĠAt Ġthe Ġpoint Ġ[ when Should Register Publication ] Ġcreates Ġa ĠMaven Ġpublication Ġnamed Ġ[ component Name ] Ġthat Ġpub lishes Ġthe Ġcreated Ġcomponent . ĊĠĠĠĠ Ġ* ĠAssign s Ġthe Ġcreated ĠMaven Ġpublication Ġto Ġthe Ġ[ published Module Holder ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun Ġregister Platform Module Publication ( ĊĠĠĠĠĠĠĠ Ġcomponent Name : ĠString , ĊĠĠĠĠĠĠĠ Ġpublished Module Holder : ĠSingle Maven Published Module Holder , ĊĠĠĠĠĠĠĠ Ġvariant Requests : ĠIterable < Variant Publication Request >, ĊĠĠĠĠĠĠĠ Ġwhen Should Register Publication : Ġ(() Ġ-> ĠUnit ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplatform Component Ġ= Ġsoftware Component Factory . ad hoc ( component Name ) ĊĠĠĠĠĠĠĠ Ġproject . components . add ( platform Component ) ĊĊĠĠĠĠĠĠĠ Ġvariant Requests . forEach Ġ{ Ġrequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Configuration Ġ= Ġrequest . publish Configuration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaven Scope OrNull Ġ= Ġinfer Maven Scope ( request . from Variant , Ġoriginal Configuration . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpublished Configuration Ġ= Ġcopy Configuration For Publishing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . from Variant . project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewName Ġ= Ġpublished Configuration Name ( original Configuration . name ) Ġ+ Ġ"- platform ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Ġ= Ġoriginal Configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Artifacts Ġ= Ġ( request Ġas ? ĠAdvanced Variant Publication Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . override Configuration Artifacts For Publication ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġoverride Ġ-> Ġ{ Ġartifacts Ġ-> Ġartifacts . addAll Later ( override ) Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Attributes Ġ= Ġ( request Ġas ? ĠAdvanced Variant Publication Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . override Configuration Attributes For Publication ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġoverride Ġ-> Ġ{ Ġattributes Ġ-> Ġcopy Attributes ( override , Ġattributes ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplatform Component . add Variants From Configuration ( published Configuration ) Ġdetails @{ Ġvariant Details Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Scope OrNull ?. let Ġ{ Ġvariant Details . map To Maven Scope ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Should Register Publication Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . plugin Manager . with Plugin (" maven - publish ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . extensions . getBy Type ( Publishing Extension :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublications . create ( component Name , ĠMaven Publication :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( this Ġas ĠDefault Maven Publication ). is Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( platform Component ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublished Module Holder . assign Maven Publication ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifact Id Ġ= Ġdash Separ ated Name ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . name , Ġpublished Module Holder . default Published Module Suffix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). toLowerCase ( Locale . EN GL ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġregister Platform Variants In Root Module ( ĊĠĠĠĠĠĠĠ Ġpublished Module Holder : ĠSingle Maven Published Module Holder , ĊĠĠĠĠĠĠĠ Ġkotlin Module : ĠKotlin Gradle Module , ĊĠĠĠĠĠĠĠ Ġvariant Requests : ĠIterable < Variant Publication Request > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplatform Module Dependency Provider Ġ= Ġproject . provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoordinates Ġ= Ġpublished Module Holder . published Maven Module Coordinates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( project . dependencies . create ("${ coordinates . group }:${ coordinates . name }:${ coordinates . version }") Ġas ĠModule Dependency ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( kotlin Module . module Classifier Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapabilities Ġ{ Ġit . require Capability ( Computed Capability . from Module ( kotlin Module )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġroot Software Component Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . components ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Type ( Ad hoc Component With Variants :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ByName ( root Publication Component Name ( kotlin Module )) ĊĊĠĠĠĠĠĠĠ Ġvariant Requests . forEach Ġ{ Ġvariant Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġvariant Request . publish Configuration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . configurations . create ( published Configuration Name ( configuration . name )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Can Be Cons umed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Can Be Resolved Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Module Capability ( this , Ġkotlin Module ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . add Later ( platform Module Dependency Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Attributes ( configuration . attributes , Ġthis . attributes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Software Component . add Variants From Configuration ( this ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġdata Ġclass ĠAdvanced Variant Publication Request ( ĊĠĠĠ Ġoverride Ġval Ġfrom Variant : ĠKotlin Gradle Variant , ĊĠĠĠ Ġoverride Ġval Ġpublish Configuration : ĠConfiguration , ĊĠĠĠ Ġval Ġoverride Configuration Attributes For Publication : ĠAttribute Container ?, ĊĠĠĠ Ġval Ġoverride Configuration Artifacts For Publication : ĠProvider < out ĠIterable < Publish Artifact >> ?, ĊĠĠĠ Ġval Ġinclude Into Project Structure Metadata : ĠBoolean Ċ ) Ġ: ĠVariant Publication Request Ċ Ċ open Ġclass ĠDocumentation Variant Configurator Ġ{ ĊĠĠĠ Ġopen Ġfun Ġcreate Sources Elements Configuration ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġconfiguration Name : ĠString , ĊĠĠĠĠĠĠĠ Ġsources Artifact Provider : ĠAbstract Archive Task , ĊĠĠĠĠĠĠĠ Ġartifact Classifier : ĠString , ĊĠĠĠĠĠĠĠ Ġcapability : ĠCap ability ? ĊĠĠĠ Ġ): ĠConfiguration Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproject . configurations . create ( configuration Name ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Can Be Resolved Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Can Be Cons umed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . attribute ( Usage . USAGE _ ATTRIBUTE , Ġproject . usage ByName ( Kotlin Usage s . K OT LIN _ SOURCES )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . attribute ( Category . CATEGORY _ ATTRIBUTE , Ġproject . objects . named ( Category :: class . java , ĠCategory . DOCUMENT ATION )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . attribute ( Bund ling . B UN DL ING _ ATTRIBUTE , Ġproject . objects . named ( Bund ling :: class . java , ĠBund ling . EXTERNAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . attribute ( Docs Type . DOCS _ TYPE _ ATTRIBUTE , Ġproject . objects . named ( Docs Type :: class . java , ĠDocs Type . SOURCES )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutgoing . artifact ( sources Artifact Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . classifier Ġ= Ġartifact Classifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( capability Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutgoing . capability ( capability ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġcreate Sources Elements Configuration ( ĊĠĠĠĠĠĠĠ Ġconfiguration Name : ĠString , ĊĠĠĠĠĠĠĠ Ġvariant : ĠKotlin Gradle Variant ĊĠĠĠ Ġ): ĠConfiguration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsources Artifact Task Ġ= Ġvariant . project . tasks . with Type < Abstract Archive Task >(). named ( variant . source Archive Task Name ) ĊĠĠĠĠĠĠĠ Ġval Ġartifact Classifier Ġ= Ġdash Separ ated Name ( variant . containing Module . module Classifier , Ġ" sources ") ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Sources Elements Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsources Artifact Task . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifact Classifier , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp uted Capability . from Module OrNull ( variant . containing Module ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }