diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 78527c0..7af52a8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Thu Sep 12 16:31:13 CDT 2019 -distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedBindingBuilder.kt b/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedBindingBuilder.kt index 8c788b3..6bb26d2 100644 --- a/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedBindingBuilder.kt +++ b/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedBindingBuilder.kt @@ -18,6 +18,7 @@ package dev.misfitlabs.kotlinguice4.binder import com.google.inject.binder.AnnotatedBindingBuilder +import kotlin.reflect.KClass /** * An extension of [AnnotatedBindingBuilder] that enhances the binding DSL to allow binding using @@ -40,6 +41,12 @@ abstract class KotlinAnnotatedBindingBuilder(private val self: AnnotatedBindi return this } + /** Binds with the annotation specified by the class. */ + fun annotatedWith(annotationClass: KClass): KotlinLinkedBindingBuilder { + delegate.annotatedWith(annotationClass.java) + return this + } + /** Binds with the specified annotation. */ override fun annotatedWith(annotation: Annotation): KotlinLinkedBindingBuilder { delegate.annotatedWith(annotation) diff --git a/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedElementBuilder.kt b/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedElementBuilder.kt index f85bf2b..8e60f81 100644 --- a/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedElementBuilder.kt +++ b/kotlin-guice/src/main/kotlin/dev/misfitlabs/kotlinguice4/binder/KotlinAnnotatedElementBuilder.kt @@ -18,6 +18,7 @@ package dev.misfitlabs.kotlinguice4.binder import com.google.inject.binder.AnnotatedElementBuilder +import kotlin.reflect.KClass /** * An extension of [AnnotatedElementBuilder] that enhances the binding DSL to allow binding using @@ -34,4 +35,9 @@ class KotlinAnnotatedElementBuilder(val delegate: AnnotatedElementBuilder) : inline fun annotatedWith() { delegate.annotatedWith(TAnn::class.java) } + + /** Binds with the annotation specified by the class. */ + fun annotatedWith(annotation: KClass) { + delegate.annotatedWith(annotation.java) + } } diff --git a/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinBinderSpec.kt b/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinBinderSpec.kt index e0fa112..c121934 100644 --- a/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinBinderSpec.kt +++ b/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinBinderSpec.kt @@ -119,6 +119,19 @@ object KotlinBinderSpec : Spek({ a.get() shouldEqual "Impl of A" } + it("binds with an annotation using a type argument") { + val injector = Guice.createInjector(object : KotlinModule() { + override fun configure() { + kotlinBinder.bind().to() + kotlinBinder.bind().annotatedWith(Annotated::class).to() + } + }) + + val a = injector.getInstance(Key.get(A::class.java, Annotated::class.java)) + + a.get() shouldEqual "Impl of A" + } + it("binds to a provider using a type parameter") { val injector = Guice.createInjector(object : KotlinModule() { override fun configure() { diff --git a/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinPrivateBinderSpec.kt b/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinPrivateBinderSpec.kt index cb142a7..33c4c08 100644 --- a/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinPrivateBinderSpec.kt +++ b/kotlin-guice/src/test/kotlin/dev/misfitlabs/kotlinguice4/KotlinPrivateBinderSpec.kt @@ -227,6 +227,21 @@ object KotlinPrivateBinderSpec : Spek({ a.get() shouldEqual "Impl of A" } + it("binds with an annotation using a class") { + val injector = Guice.createInjector(object : KotlinPrivateModule() { + override fun configure() { + kotlinBinder.bind().to() + kotlinBinder.bind().annotatedWith(Annotated::class).to() + + kotlinBinder.expose().annotatedWith(Annotated::class) + } + }) + + val a = injector.getInstance(annotatedKey()) + + a.get() shouldEqual "Impl of A" + } + it("binds to a provider using a type parameter") { val injector = Guice.createInjector(object : KotlinPrivateModule() { override fun configure() {