/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠThe ĠB azel ĠAuthors . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġio . bazel . rule sk otlin . workers . comp ilers . jvm . actions Ċ Ċ import Ġcom . google . devtools . build . lib . view . proto . Deps Ċ import Ġio . bazel . rule sk otlin . workers . Build Action Ċ import Ġio . bazel . rule sk otlin . workers . Context Ċ import Ġio . bazel . rule sk otlin . workers . Kotlin Tool chain Ċ import Ġio . bazel . rule sk otlin . workers . comp ilers . jvm . utils . J deps Parser Ċ import Ġio . bazel . rule sk otlin . workers . model . Flags . CLAS SPATH Ċ import Ġio . bazel . rule sk otlin . workers . model . Flags . LABEL Ċ import Ġio . bazel . rule sk otlin . workers . model . Flags . OUTPUT _ CLASS JAR Ċ import Ġio . bazel . rule sk otlin . workers . model . Flags . OUTPUT _ J DEPS Ċ import Ġio . bazel . rule sk otlin . workers . utils . execute And Wait Output Ċ import Ġio . bazel . rule sk otlin . workers . utils . root Cause Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths ĊĊ Ċ class ĠGenerate J deps File ( toolchain : ĠKotlin Tool chain ) Ġ: ĠBuild Action (" generate Ġj deps ", Ġtoolchain ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġis Kotlin Implicit Ġ= ĠJ deps Parser . path Suffix Matching Predicate ( toolchain . K OT LIN _ LIB _ DIR , Ġ* toolchain . K OT LIN _ STD _ LIBS ) ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( ctx : ĠContext ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Jar Ġ= ĠOUTPUT _ CLASS JAR [ ctx ] ĊĠĠĠĠĠĠĠ Ġval Ġclass Path Ġ= ĠCL AS SPATH [ ctx ] ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠOUTPUT _ J DEPS [ ctx ] ĊĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= ĠLABEL [ ctx ] ĊĊĠĠĠĠĠĠĠ Ġval Ġj deps Content : ĠDep s . Dependencies ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj deps Content Ġ= Ġexecute And Wait Output ( 1 0 , Ġtoolchain . J DEPS _ PATH , Ġ"- cp ", Ġclass Path , Ġclass Jar ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ deps Parser . parse ( label , Ġclass Jar , Ġclass Path , Ġit . stream (), Ġis Kotlin Implicit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" error Ġreading Ġor Ġparsing Ġj deps Ġfile ", Ġe . root Cause ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPaths . get ( output ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete IfExists ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( Files . create File ( it ). to File ()). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj deps Content . writeTo ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" error Ġwriting Ġout Ġj deps Ġfile ", Ġe . root Cause ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ