package Ġcom . by but ter . sis y ph us . protobuf . gradle Ċ Ċ import Ġcom . android . build . api . dsl . Android Source Set Ċ import Ġcom . android . build . gradle . api . Base Variant Ċ import Ġorg . gradle . api . attributes . Attribute Ċ import Ġorg . gradle . api . file . File Collection Ċ import Ġorg . gradle . api . tasks . Source Set Ċ import Ġorg . gradle . api . tasks . Source Task Ċ import Ġorg . gradle . plugins . ide . idea . model . Ide a Model Ċ Ċ class ĠProtobuf Android Plugin Ġ: ĠBase Protobuf Plugin () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdo Apply () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( source Set Ġin Ġproject . android . source Sets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Source Set ( source Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgenerate Proto Task () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdo After Apply () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( source Set Ġin Ġproject . source Sets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Apply Source Set ( source Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( variant Ġin Ġproject . android . variants ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Apply Variant ( variant ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġproto Api Files ( source SetName : ĠString ): ĠFile Collection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvariant Ġ= Ġproject . android . variants . first Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġsource SetName ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġproject . files ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . compile Configuration . incoming . artifact View Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . attributes Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . attribute ( Attribute . of (" artifact Type ", ĠString :: class . java ), Ġ" jar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. files , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . source Sets . map Ġ{ Ġproto Api Configuration ( it . name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġproto Compile Files ( source SetName : ĠString ): ĠFile Collection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvariant Ġ= Ġproject . android . variants . first Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġsource SetName ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġproject . files ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . source Sets . map Ġ{ Ġproto Src ( it . name ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvariant . source Sets . map Ġ{ Ġproto Configuration ( it . name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Source Set ( source Set : ĠAndroid Source Set ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproto Configuration ( source Set . name ) ĊĠĠĠĠĠĠĠ Ġproto Api Configuration ( source Set . name ) ĊĊĠĠĠĠĠĠĠ Ġsource Set . resources Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Dir ( metadata Dir ( source Set . name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsource Set . java Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Dir ( out Dir ( source Set . name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġafter Apply Source Set ( source Set : ĠSource Set ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . extensions . findBy Type ( Ide a Model :: class . java )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule . source Dirs Ġ= Ġmodule . source Dirs Ġ+ Ġproto Src ( source Set . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule . generated Source Dirs . add ( out Dir ( source Set . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . module . scopes [" PROVIDED "] ?. get (" plus ") ?. add ( proto Api Configuration ( source Set . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . module . scopes [" COMPILE "] ?. get (" plus ") ?. add ( proto Configuration ( source Set . name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġafter Apply Variant ( variant : ĠBase Variant ) Ġ{ ĊĠĠĠĠĠĠĠ Ġextract Proto Task ( variant . name ) ĊĠĠĠĠĠĠĠ Ġgenerate Proto Task ( variant . name ) ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Task Ġ= Ġproject . tasks . find ByName ( compile Kotlin Task Name ( variant . name )) Ġas ? ĠSource Task ĊĠĠĠĠĠĠĠ Ġif Ġ( extension . auto Generating Ġ&& Ġkotlin Task Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( source Set Ġin Ġvariant . source Sets ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Task . depends On ( generate Proto Task ( variant . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ