/* Ċ Ġ* ĠCopyright ĠThe ĠOpen Telemetry ĠAuthors Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ package Ġio . op entelemetry . instrumentation . gradle . codegen Ċ Ċ import Ġnet . byte buddy . Byte Bu ddy Ċ import Ġnet . byte buddy . build . Plugin Ċ import Ġnet . byte buddy . description . type . Type Description Ċ import Ġnet . byte buddy . dynamic . Class File Locator Ċ import Ġnet . byte buddy . dynamic . Dynamic Type Ċ import Ġjava . io . File Ċ import Ġjava . net . URL Ċ import Ġjava . net . URL ClassLoader Ċ Ċ /** Ċ Ġ* ĠStarting Ġfrom Ġversion Ġ 1 . 1 0 . 1 5 , ĠByte Bu ddy Ġgradle Ġplugin Ġtransformations Ġrequire Ġthat Ġplugin Ċ Ġ* Ġclasses Ġare Ġgiven Ġas Ġclass Ġinstances Ġinstead Ġof Ġa Ġclass Ġname Ġstring . ĠTo Ġbe Ġable Ġto Ġstill Ġuse Ġa Ċ Ġ* Ġplugin Ġimplementation Ġthat Ġis Ġnot Ġa Ġbuild script Ġdependency , Ġthis Ġre implements Ġthe Ġprevious Ġlogic Ċ Ġ* Ġby Ġtaking Ġa Ġdelegate Ġclass Ġname Ġand Ġclass Ġpath Ġas Ġarguments Ġand Ġloading Ġthe Ġplugin Ġclass Ġfrom Ġthe Ċ Ġ* Ġprovided Ġclass loader Ġwhen Ġthe Ġplugin Ġis Ġinstantiated . Ċ Ġ*/ Ċ // TODO Ġremove Ġtogether Ġwith Ġio . op entelemetry . instrumentation . java agent - codegen . gradle Ċ class ĠClass path Byte Bu ddy Plugin ( ĊĠ Ġclass Path : ĠIterable < File >, Ġsource Directory : ĠFile , ĠclassName : ĠString Ċ ) Ġ: ĠPlugin Ġ{ ĊĠ Ġprivate Ġval Ġdelegate Ġ= Ġplugin From Class Path ( class Path , Ġsource Directory , ĠclassName ) ĊĊĠ Ġoverride Ġfun Ġapply ( ĊĠĠĠ Ġbuilder : ĠDynamic Type . Builder <* >, ĊĠĠĠ Ġtype Description : ĠType Description , ĊĠĠĠ Ġclass File Locator : ĠClass File Locator ĊĠ Ġ): ĠDynamic Type . Builder < *> Ġ{ ĊĠĠĠ Ġreturn Ġdelegate . apply ( builder , Ġtype Description , Ġclass File Locator ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠ Ġdelegate . close () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġmatches ( type Definitions : ĠType Description ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġdelegate . matches ( type Definitions ) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġplugin From Class Path ( ĊĠĠĠĠĠ Ġclass Path : ĠIterable < File >, Ġsource Directory : ĠFile , ĠclassName : ĠString ĊĠĠĠ Ġ): ĠPlugin Ġ{ ĊĠĠĠĠĠ Ġval Ġclass Loader Ġ= Ġclass Loader From Class Path ( class Path , Ġsource Directory ) ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠClass . forName ( className , Ġfalse , Ġclass Loader ) ĊĠĠĠĠĠĠĠ Ġreturn Ġclazz . getDeclared Constructor (). newInstance () Ġas ĠPlugin ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Failed Ġto Ġcreate ĠByte Bu ddy Ġplugin Ġinstance ", Ġe ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclass Loader From Class Path ( ĊĠĠĠĠĠ Ġclass Path : ĠIterable < File >, Ġsource Directory : ĠFile ĊĠĠĠ Ġ): ĠClassLoader Ġ{ ĊĠĠĠĠĠ Ġval Ġurls Ġ= Ġmutable ListOf < URL >() ĊĠĠĠĠĠ Ġurls . add ( file As Url ( source Directory )) ĊĠĠĠĠĠ Ġfor Ġ( file Ġin Ġclass Path ) Ġ{ ĊĠĠĠĠĠĠĠ Ġurls . add ( file As Url ( file )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĠURL ClassLoader ( urls . to Typed Array (), ĠByte Bu ddy :: class . java . class Loader ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfile As Url ( file : ĠFile ): ĠURL Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfile . to URI (). to URL () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ