package Ġorg . gradle . modules Ċ Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . artifacts . Configuration Ċ import Ġorg . gradle . api . artifacts . Resolved Dependency Ċ import Ġorg . gradle . util . G Util Ċ Ċ import Ġorg . object web . asm . Class Reader Ċ import Ġorg . object web . asm . Class Writer Ċ import Ġorg . object web . asm . commons . Class Rem apper Ċ import Ġorg . object web . asm . commons . Rem apper Ċ Ċ import Ġjava . io . File Ċ Ċ import Ġorg . gradle . kotlin . dsl .* Ċ import Ġorg . gradle . kotlin . dsl . support . zip To ĊĊ Ċ // ĠMap Ġof Ġinternal ĠAPIs Ġthat Ġhave Ġbeen Ġrenamed Ġsince Ġthe Ġlast Ġrelease Ċ val ĠRE MAPP INGS Ġ= Ġmap Of ( ĊĠĠĠ Ġ" org / gradle / plugin / use / internal / Plugin Requests " Ġto Ġ" org / gradle / plugin / management / internal / Plugin Requests ") ĊĊ Ċ open Ġclass ĠClass path Manifest Patch er ( ĊĠĠĠ Ġprivate Ġval Ġproject : ĠProject , ĊĠĠĠ Ġprivate Ġval Ġtemporary Dir : ĠFile , ĊĠĠĠ Ġprivate Ġval Ġruntime : ĠConfiguration , ĊĠĠĠ Ġprivate Ġval Ġmodule Names : ĠSet < String > Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġwrite Pat ched Files To ( output Dir : ĠFile ) Ġ= ĊĠĠĠĠĠĠĠ Ġresolve External Module J ars (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal File Ġ= Ġmain Artifact File Of ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpatched File Ġ= Ġoutput Dir . resolve ( original File . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunpack Dir Ġ= Ġunpack ( original File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch Manifest Of ( it , Ġunpack Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatch Class Files In ( unpack Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpack ( unpack Dir , Ġpatched File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRes olves Ġeach Ġexternal Ġmodule Ġagainst Ġthe Ġruntime Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġresolve External Module J ars (): ĠCollection < Resolved Dependency > Ġ= ĊĠĠĠĠĠĠĠ Ġruntime . resolved Configuration . first Level Module Dependencies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . moduleName Ġin Ġmodule Names Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġpatch Manifest Of ( module : ĠResolved Dependency , Ġunpack Dir : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclasspath Manifest File Ġ= Ġunpack Dir . resolve ("${ module . moduleName }- classpath . properties ") ĊĠĠĠĠĠĠĠ Ġval Ġclasspath Manifest Ġ= ĠG Util . load Properties ( classpath Manifest File ) ĊĠĠĠĠĠĠĠ Ġclasspath Manifest [" runtime "] Ġ= Ġruntime Manifest Of ( module ) ĊĠĠĠĠĠĠĠ Ġclasspath Manifest File . write Text ( classpath Manifest . toMap (). as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"\ n ") Ġ{ Ġ"${ it . key } =${ it . value }" Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġpatch Class Files In ( dir : ĠFile ) Ġ= ĊĠĠĠĠĠĠĠ Ġdir . walk Top Down (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . name . endsWith (". class ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremap Types Of ( it , ĠRE MAPP INGS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġremap Types Of ( class File : ĠFile , Ġrem appings : ĠMap < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Writer Ġ= ĠClass Writer ( 0 ) ĊĠĠĠĠĠĠĠ ĠClass Reader ( class File . read Bytes ()). accept ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClass Rem apper ( class Writer , Ġre mapper For ( rem appings )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClass Reader . EXPAND _ FR AMES ) ĊĠĠĠĠĠĠĠ Ġclass File . write Bytes ( class Writer . toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġre mapper For ( typeName Rem appings : ĠMap < String , ĠString >) Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠRem apper () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmap ( typeName : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtypeName Rem appings [ typeName ] Ġ?: ĠtypeName ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġruntime Manifest Of ( module : ĠResolved Dependency ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( module . all Module Artifacts Ġ- Ġmodule . module Artifacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . file . name Ġ}. sorted (). join ToString (",") ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġunpack ( file : ĠFile ) Ġ= ĊĠĠĠĠĠĠĠ Ġunpack Dir For ( file ). also Ġ{ Ġunpack Dir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinto ( unpack Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( zip Tree ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġunpack Dir For ( file : ĠFile ) Ġ= ĊĠĠĠĠĠĠĠ Ġtemporary Dir . resolve ( file . name ) ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġpack ( base Dir : ĠFile , Ġdest File : ĠFile ): ĠUnit Ġ= Ġproject . run Ġ{ ĊĠĠĠĠĠĠĠ Ġzip To ( dest File , Ġbase Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate ĊĠĠĠ Ġfun Ġmain Artifact File Of ( module : ĠResolved Dependency ) Ġ= ĊĠĠĠĠĠĠĠ Ġmodule . module Artifacts . single (). file Ċ } Ċ