/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . kotlin . script Ċ Ċ import Ġcom . intellij . openapi . diagnostic . Logger Ċ import Ġcom . intellij . openapi . extensions . Extension Point Name Ċ import Ġcom . intellij . openapi . extensions . Extensions Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġjava . io . File Ċ import Ġjava . net . URL ClassLoader Ċ import Ġkotlin . script . experimental . dependencies . Dependencies Resolver Ċ Ċ interface ĠScript Templates Provider Ġ{ ĊĊĠĠĠ Ġ// Ġfor Ġresolving Ġamb igu ities ĊĠĠĠ Ġval Ġid : ĠString ĊĊĠĠĠ Ġ@ Deprecated (" Parameter Ġisn 't Ġused Ġfor Ġresolving Ġprior ities Ġanymore . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" com . intellij . openapi . extensions . Loading Order Ġconstants Ġcan Ġbe Ġused Ġto Ġorder Ġproviders Ġwhen Ġregistered Ġfrom ĠInt ellij Ġplugin .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReplace With (" 0 ")) ĊĠĠĠ Ġval Ġversion : ĠInt Ġget () Ġ= Ġ 0 ĊĊĠĠĠ Ġval ĠisValid : ĠBoolean ĊĊĠĠĠ Ġval Ġtemplate ClassNames : ĠIterable < String > ĊĊĠĠĠ Ġval Ġresolver : ĠDependencies Resolver ? Ġget () Ġ= Ġnull ĊĊĠĠĠ Ġval Ġfile Pattern : ĠString ? Ġget () Ġ= Ġnull ĊĊĠĠĠ Ġval Ġtemplate Classpath : ĠList < File > ĊĊĠĠĠ Ġ// ĠTODO : Ġneed Ġto Ġprovide Ġa Ġway Ġto Ġspecify Ġthis Ġin Ġcompiler / repl Ġ.. Ġetc ĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠAllows Ġto Ġspecify Ġadditional Ġj ars Ġneeded Ġfor ĠDependencies Resolver Ġ( and Ġnot Ġscript Ġtemplate ). ĊĠĠĠĠ Ġ* ĠScript Ġtemplate Ġdependencies Ġn atur ally Ġbecome Ġ( part Ġof ) Ġdependencies Ġof Ġthe Ġscript Ġwhich Ġis Ġnot Ġalways Ġdesired Ġfor Ġresolver Ġdependencies . ĊĠĠĠĠ Ġ* Ġi . e . Ġgradle Ġresolver Ġmay Ġdepend Ġon Ġsome Ġj ars Ġthat Ġ' built . gradle . k ts ' Ġfiles Ġshould Ġnot Ġdepend Ġon . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġadditional Resolver Classpath : ĠList < File > Ġget () Ġ= Ġempty List () ĊĊĠĠĠ Ġval Ġenvironment : ĠMap < String , ĠAny ?> ? ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠEP _ NAME : ĠExtension Point Name < Script Templates Provider > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExtension Point Name . create < Script Templates Provider >(" org . jetbrains . kotlin . script Templates Provider ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmake Script Defs From Templates Provider Extensions ( project : ĠProject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors Handler : Ġ(( Script Templates Provider , ĠThrowable ) Ġ-> ĠUnit ) Ġ= Ġ{ Ġ_, Ġex Ġ-> Ġthrow Ġex Ġ} Ċ ): ĠList < Kotlin Script Definition > Ġ= ĊĠĠĠĠĠĠĠ Ġmake Script Defs From Templates Providers ( Extensions . get Area ( project ). getExtension Point ( Script Templates Provider . EP _ NAME ). extensions . as Iterable (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors Handler ) Ċ Ċ fun Ġmake Script Defs From Templates Providers ( providers : ĠIterable < Script Templates Provider >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors Handler : Ġ(( Script Templates Provider , ĠThrowable ) Ġ-> ĠUnit ) Ġ= Ġ{ Ġ_, Ġex Ġ-> Ġthrow Ġex Ġ} Ċ ): ĠList < Kotlin Script Definition > Ġ= Ġproviders . flatMap Ġ{ Ġprovider Ġ-> ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġloader Ġ= Ġcreate ClassLoader ( provider ) ĊĠĠĠĠĠĠĠ Ġprovider . template ClassNames . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Script Definition From Annotated Template ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloader . load Class ( it ). kotlin , Ġprovider . resolver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider . file Pattern , Ġprovider . environment , Ġprovider . template Classpath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( ex : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLOG . info (" Templates Ġprovider Ġ${ provider . id } Ġis Ġinvalid : Ġ${ ex . message }") ĊĠĠĠĠĠĠĠ Ġerrors Handler ( provider , Ġex ) ĊĠĠĠĠĠĠĠ Ġempty List < Kotlin Script Definition >() ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġcreate ClassLoader ( provider : ĠScript Templates Provider ): ĠClassLoader Ġ{ ĊĠĠĠ Ġval Ġclasspath Ġ= Ġprovider . template Classpath Ġ+ Ġprovider . additional Resolver Classpath ĊĠĠĠ ĠLOG . info ("[ k ts ] Ġloading Ġscript Ġdefinitions Ġ${ provider . template ClassNames } Ġusing Ġcp : Ġ${ classpath . join ToString ( File . path Separator )} ") ĊĠĠĠ Ġval Ġbase Loader Ġ= ĠScript Templates Provider :: class . java . class Loader ĊĠĠĠ Ġreturn Ġif Ġ( classpath . isEmpty ()) Ġbase Loader Ġelse ĠURL ClassLoader ( classpath . map Ġ{ Ġit . to URI (). to URL () Ġ}. to Typed Array (), Ġbase Loader ) Ċ } Ċ Ċ private Ġval ĠLOG Ġ= ĠLogger . getInstance (" Script Templates Providers ") Ċ