/* Ċ Ġ* Ġ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 . build Utils . idea Ċ Ċ import ĠIntelliJ Instrument Code Task Ċ import Ġorg . gradle . api . Named Domain Object Container Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . tasks . Abstract Copy Task Ċ import Ġorg . gradle . api . tasks . compile . Abstract Compile Ċ import Ġorg . jetbrains . gradle . ext . TopLevel Artifact Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠTemporary Ġsolution Ġfor Ġconfiguring ĠIDEA Ġartifacts Ġbased Ġon ĠGradle Ġcopy Ġtasks Ġconfigurations . Ċ Ġ* ĠThis Ġshould Ġbe Ġreplaced Ġwith ĠDSL Ġthat Ġproduces Ġboth ĠGradle Ġcopy Ġtasks Ġand ĠIDEA Ġartifacts Ġconfiguration . Ċ Ġ* Ċ Ġ* ĠTODO : Ġremove Ġthis Ġpackage Ġwhen ĠDSL Ġdescribed Ġabove Ġwill Ġbe Ġimplemented Ċ Ġ*/ Ċ fun Ġgenerate Ide Artifacts ( root Project : ĠProject , Ġartifacts Factory : ĠNamed Domain Object Container < TopLevel Artifact >) Ġ{ ĊĠĠĠ Ġval Ġreports Dir Ġ= ĠFile ( path ( root Project . build Dir . path , Ġ" reports ", Ġ" idea - artifacts - cfg ")) ĊĠĠĠ Ġreports Dir . mkdir s () ĊĠĠĠ Ġval Ġproject Dir Ġ= Ġroot Project . project Dir ĊĊĠĠĠ ĠFile ( reports Dir , Ġ" 0 1 - visitor . report . txt "). print Writer (). use Ġ{ Ġvisitor Report Ġ-> ĊĠĠĠĠĠĠĠ Ġval ĠmodelBuilder Ġ= Ġobject Ġ: ĠDist Model Builder ( root Project , Ġvisitor Report ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġinvestigate Ġwhy Ġall Copy Actions Ġnot Ġworking ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtransform Jar Name ( name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname 1 Ġ= Ġname . replace ( Regex ("- ${ java . util . regex . Pattern . quote ( root Project . version . toString ()) } "), Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname 2 Ġ= Ġwhen Ġ( name 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - runtime - common . jar " Ġ-> Ġ" kotlin - runtime . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - compiler - before - pro guard . jar " Ġ-> Ġ" kotlin - compiler . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - main - k ts - before - pro guard . jar " Ġ-> Ġ" kotlin - main - k ts . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - al lopen - compiler - plugin . jar " Ġ-> Ġ" al lopen - compiler - plugin . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - no arg - compiler - plugin . jar " Ġ-> Ġ" no arg - compiler - plugin . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - sam - with - receiver - compiler - plugin . jar " Ġ-> Ġ" sam - with - receiver - compiler - plugin . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - android - extensions - runtime . jar " Ġ-> Ġ" android - extensions - runtime . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġname 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname 3 Ġ= Ġname 2 . remove Prefix (" dist - ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġvisit All Tasks ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tasks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠAbstract Copy Task Ġ-> ĠmodelBuilder . visit Copy Task ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠAbstract Compile Ġ-> ĠmodelBuilder . visit Compile Task ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠIntelliJ Instrument Code Task Ġ-> ĠmodelBuilder . visit Instrument Task ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġ" strip Metadata " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmodelBuilder . root Ctx . log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" STRIP ĠMET ADATA ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . inputs . files . single File } Ġ-> Ġ${ it . outputs . files . single File }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDist Copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmodelBuilder . require Path ( it . outputs . files . single File . path ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmodelBuilder . require Path ( it . inputs . files . single File . path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġwhile Ġvisit ing Ġ`$ it `", Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . sub projects . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit All Tasks ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvisit All Tasks ( root Project ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġpro guard ĊĠĠĠĠĠĠĠ ĠDist Copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= ĠmodelBuilder . require Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dir . path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" libraries ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" reflect ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" build ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" libs ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin - reflect - pro guard . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Ġ= ĠmodelBuilder . require Path ( path ( project Dir . path , Ġ" libraries ", Ġ" reflect ", Ġ" build ", Ġ" libs ", Ġ" kotlin - reflect - shadow . jar ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠFile ( reports Dir , Ġ" 0 2 - vfs . txt "). print Writer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmodelBuilder . vfs Root . print Tree ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠmodelBuilder . check Refs () ĊĊĠĠĠĠĠĠĠ Ġwith ( Dist Model Fl att ener ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Dist Model Ide a Artifact Builder ( root Project )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( reports Dir , Ġ" 0 3 - flatten ed - vfs . txt "). print Writer (). use Ġ{ Ġreport Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġget Flatten ned ( vfs Path : ĠString ): ĠDist V File Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmodelBuilder . vfs Root . relative Path ( path ( project Dir . path , Ġv fs Path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Ġ= Ġget Flatten ned (" dist ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall . child [" artifacts "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . removeAll Ġ{ Ġit Ġ!= Ġ" idea Plugin " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall . child [" artifacts "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . child ?. get (" idea Plugin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . child ?. get (" Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . removeAll Ġ{ Ġit Ġ!= Ġ" kotlin c " Ġ&& Ġit Ġ!= Ġ" lib " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall . removeAll Ġ{ Ġit . endsWith (". zip ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall . print Tree ( report ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdist Ġ= Ġartifacts Factory . create (" dist _ auto _ reference _ dont _ use ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist . add Files ( all ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġpath ( var arg Ġcomponents : ĠString ) Ġ= Ġcomponents . join ToString ( File . separator ) Ċ Ċ internal Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger (" ide - artifacts ") ĊĊ