Skip to content

Commit

Permalink
Add support for Dagger 2.48 with KSP support (#82)
Browse files Browse the repository at this point in the history
AutoDagger already had KSP support, but there are some breaking changes
in Dagger 2.48 and AutoDagger was using some of those now unsupported
features.

This fixes #81
  • Loading branch information
ansman authored Aug 30, 2023
1 parent 6bb2b35 commit 50e88b9
Show file tree
Hide file tree
Showing 48 changed files with 113 additions and 91 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,23 @@ Setup
For detailed instructions see the [getting-started](https://auto-dagger.ansman.se/latest/getting-started/) page.
```groovy
dependencies {
// Set up your dagger dependencies and compiler
// Include this in kotlin or android modules
implementation("se.ansman.dagger.auto:core:0.8.0")
kapt("se.ansman.dagger.auto:compiler:0.8.0")
// If you're using KSP
ksp("se.ansman.dagger.auto:compiler:0.8.0")
// Include this only in android modules
implementation("se.ansman.dagger.auto:android:0.8.0")
// Add these if you want to replace objects during tests
testImplementation("se.ansman.dagger.auto:android-testing:0.8.0")
kaptTest("se.ansman.dagger.auto:compiler:0.8.0")
// If you're using KSP
kspTest("se.ansman.dagger.auto:compiler:0.8.0")
// If you want to provide Retrofit services add the Retrofit dependency
implementation("se.ansman.dagger.auto:retrofit:0.8.0")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package se.ansman.dagger.auto.compiler.common.rendering

import com.google.devtools.ksp.containingFile
import com.google.devtools.ksp.symbol.KSDeclaration
import com.squareup.kotlinpoet.AnnotationSpec
import com.squareup.kotlinpoet.ClassName
Expand Down Expand Up @@ -68,10 +67,7 @@ class HiltKotlinModuleBuilder private constructor(
.addModifiers(if (isPublic) KModifier.PUBLIC else KModifier.INTERNAL, KModifier.ABSTRACT)
.addAnnotation(Binds::class)
.addAnnotations(mode.asAnnotations())
.addAnnotations(sourceType.qualifiers.map {
it.toBuilder().useSiteTarget(AnnotationSpec.UseSiteTarget.RECEIVER).build()
})
.receiver(sourceType.type)
.addParameter(sourceType.toParameterSpec(nameAllocator))
.addAnnotations(returnType.qualifiers)
.returns(returnType.type)
.build()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ import kotlin.String
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepositoryOfString(): Repository<String>
public abstract fun bindRealRepositoryAsRepositoryOfString(realRepository: RealRepository):
Repository<String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
public abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ import dagger.hilt.codegen.OriginatingElement
@OriginatingElement(topLevelClass = ActivityRepository::class)
public abstract class AutoBindActivityRepositoryActivityModule private constructor() {
@Binds
public abstract fun ActivityRepository.bindActivityRepositoryAsRepository(): Repository
public abstract fun bindActivityRepositoryAsRepository(activityRepository: ActivityRepository):
Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ import dagger.hilt.codegen.OriginatingElement
@OriginatingElement(topLevelClass = FragmentRepository::class)
public abstract class AutoBindFragmentRepositoryFragmentModule private constructor() {
@Binds
public abstract fun FragmentRepository.bindFragmentRepositoryAsRepository(): Repository
public abstract fun bindFragmentRepositoryAsRepository(fragmentRepository: FragmentRepository):
Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = GlobalRepository::class)
public abstract class AutoBindGlobalRepositorySingletonModule private constructor() {
@Binds
public abstract fun GlobalRepository.bindGlobalRepositoryAsRepository(): Repository
public abstract fun bindGlobalRepositoryAsRepository(globalRepository: GlobalRepository):
Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ import dagger.hilt.codegen.OriginatingElement
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositoryMyModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
public abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@ import dagger.hilt.codegen.OriginatingElement
@OriginatingElement(topLevelClass = RealFragmentHelper::class)
public abstract class AutoBindRealFragmentHelperFragmentModule private constructor() {
@Binds
public abstract fun RealFragmentHelper.bindRealFragmentHelperAsFragmentHelper(): FragmentHelper
public abstract
fun bindRealFragmentHelperAsFragmentHelper(realFragmentHelper: RealFragmentHelper):
FragmentHelper
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
public abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ import se.ansman.dagger.auto.Initializable
public abstract class AutoInitializeRealRepositoryModule private constructor() {
@Binds
@IntoSet
public abstract fun RealRepository.bindRealRepositoryAsInitializable(): Initializable
public abstract fun bindRealRepositoryAsInitializable(realRepository: RealRepository):
Initializable
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
internal abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
internal abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ public abstract class AutoBindRepositorySingletonModule private constructor() {
@Binds
@IntoMap
@StringKey("test")
public abstract fun Repository.bindRepositoryAsCloseableIntoMap(): Closeable
public abstract fun bindRepositoryAsCloseableIntoMap(repository: Repository): Closeable
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import kotlin.Boolean
public abstract class AutoBindBooleanProviderSingletonModule private constructor() {
@Binds
@IntoSet
public abstract fun BooleanProvider.bindBooleanProviderAsCallableOfBooleanIntoSet():
public abstract
fun bindBooleanProviderAsCallableOfBooleanIntoSet(booleanProvider: BooleanProvider):
Callable<Boolean>
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import kotlin.Int
public abstract class AutoBindIntProviderSingletonModule private constructor() {
@Binds
@IntoSet
public abstract fun IntProvider.bindIntProviderAsCallableOfIntIntoSet(): Callable<Int>
public abstract fun bindIntProviderAsCallableOfIntIntoSet(intProvider: IntProvider): Callable<Int>

@Binds
@IntoSet
public abstract fun IntProvider.bindIntProviderAsCallableOfStarIntoSet(): Callable<*>
public abstract fun bindIntProviderAsCallableOfStarIntoSet(intProvider_: IntProvider): Callable<*>
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ import java.util.concurrent.Callable
public abstract class AutoBindStringProviderSingletonModule private constructor() {
@Binds
@IntoSet
public abstract fun StringProvider.bindStringProviderAsCallableOfStarIntoSet(): Callable<*>
public abstract fun bindStringProviderAsCallableOfStarIntoSet(stringProvider: StringProvider):
Callable<*>
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ import java.io.Closeable
public abstract class AutoBindRepositorySingletonModule private constructor() {
@Binds
@IntoSet
public abstract fun Repository.bindRepositoryAsCloseableIntoSet(): Closeable
public abstract fun bindRepositoryAsCloseableIntoSet(repository: Repository): Closeable
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import kotlin.Boolean
public abstract class AutoBindBooleanProviderSingletonModule private constructor() {
@Binds
@IntoSet
public abstract fun BooleanProvider.bindBooleanProviderAsCallableOfBooleanIntoSet():
public abstract
fun bindBooleanProviderAsCallableOfBooleanIntoSet(booleanProvider: BooleanProvider):
Callable<Boolean>
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import kotlin.Int
public abstract class AutoBindIntProviderSingletonModule private constructor() {
@Binds
@IntoSet
public abstract fun IntProvider.bindIntProviderAsCallableOfIntIntoSet(): Callable<Int>
public abstract fun bindIntProviderAsCallableOfIntIntoSet(intProvider: IntProvider): Callable<Int>

@Binds
@IntoSet
public abstract fun IntProvider.bindIntProviderAsCallableOfStarIntoSet(): Callable<*>
public abstract fun bindIntProviderAsCallableOfStarIntoSet(intProvider_: IntProvider): Callable<*>
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ import java.util.concurrent.Callable
public abstract class AutoBindStringProviderSingletonModule private constructor() {
@Binds
@IntoSet
public abstract fun StringProvider.bindStringProviderAsCallableOfStarIntoSet(): Callable<*>
public abstract fun bindStringProviderAsCallableOfStarIntoSet(stringProvider: StringProvider):
Callable<*>
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ public abstract class AutoBindAuthInterceptorSingletonModule private constructor
@Binds
@IntoSet
@Named("api")
public abstract fun AuthInterceptor.bindAuthInterceptorAsInterceptorIntoSet(): Interceptor
public abstract fun bindAuthInterceptorAsInterceptorIntoSet(authInterceptor: AuthInterceptor):
Interceptor
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ import kotlin.String
@OriginatingElement(topLevelClass = RunnableThing::class)
public abstract class AutoBindRunnableThingSingletonModule private constructor() {
@Binds
public abstract fun RunnableThing.bindRunnableThingAsFunction0OfString(): Function0<String>
public abstract fun bindRunnableThingAsFunction0OfString(runnableThing: RunnableThing):
Function0<String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ import dagger.multibindings.StringKey
@OriginatingElement(topLevelClass = RealType::class)
public abstract class AutoBindRealTypeSingletonModule private constructor() {
@Binds
public abstract fun RealType.bindRealTypeAsType1(): Type1
public abstract fun bindRealTypeAsType1(realType: RealType): Type1

@Binds
@IntoSet
public abstract fun RealType.bindRealTypeAsType2IntoSet(): Type2
public abstract fun bindRealTypeAsType2IntoSet(realType_: RealType): Type2

@Binds
@IntoMap
@StringKey("test")
public abstract fun RealType.bindRealTypeAsType3IntoMap(): Type3
public abstract fun bindRealTypeAsType3IntoMap(realType__: RealType): Type3
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ import kotlin.String
@OriginatingElement(topLevelClass = RealType::class)
public abstract class AutoBindRealTypeSingletonModule private constructor() {
@Binds
public abstract fun RealType.bindRealTypeAsType2OfString(): Type2<String>
public abstract fun bindRealTypeAsType2OfString(realType: RealType): Type2<String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = RealType::class)
public abstract class AutoBindRealTypeSingletonModule private constructor() {
@Binds
public abstract fun RealType.bindRealTypeAsType1(): Type1
public abstract fun bindRealTypeAsType1(realType: RealType): Type1

@Binds
public abstract fun RealType.bindRealTypeAsType2(): Type2
public abstract fun bindRealTypeAsType2(realType_: RealType): Type2

@Binds
public abstract fun RealType.bindRealTypeAsType3(): Type3
public abstract fun bindRealTypeAsType3(realType__: RealType): Type3
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = RealSomeUseCase::class)
public abstract class AutoBindRealSomeUseCaseSingletonModule private constructor() {
@Binds
public abstract fun RealSomeUseCase.bindRealSomeUseCaseAsSomeUseCase(): SomeUseCase
public abstract fun bindRealSomeUseCaseAsSomeUseCase(realSomeUseCase: RealSomeUseCase):
SomeUseCase
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
public abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ import dagger.hilt.components.SingletonComponent
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
public abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ import se.ansman.dagger.auto.Initializable
public abstract class AutoInitializeInitializableThingModule private constructor() {
@Binds
@IntoSet
public abstract fun InitializableThing.bindInitializableThingAsInitializable(): Initializable
public abstract fun bindInitializableThingAsInitializable(initializableThing: InitializableThing):
Initializable
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ public abstract class AutoBindFakeRepositoryFragmentModule private constructor()
@Binds
@IntoMap
@StringKey("repository")
public abstract fun FakeRepository.bindFakeRepositoryAsRunnableIntoMap(): Runnable
public abstract fun bindFakeRepositoryAsRunnableIntoMap(fakeRepository: FakeRepository): Runnable
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@ import java.io.Closeable
@OriginatingElement(topLevelClass = FakeRepository::class)
public abstract class AutoBindFakeRepositorySingletonModule private constructor() {
@Binds
public abstract fun FakeRepository.bindFakeRepositoryAsRepository(): Repository
public abstract fun bindFakeRepositoryAsRepository(fakeRepository: FakeRepository): Repository

@Binds
@IntoSet
public abstract fun FakeRepository.bindFakeRepositoryAsCloseableIntoSet(): Closeable
public abstract fun bindFakeRepositoryAsCloseableIntoSet(fakeRepository_: FakeRepository):
Closeable
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ public abstract class AutoBindRealRepositoryFragmentModule private constructor()
@Binds
@IntoMap
@StringKey("repository")
public abstract fun RealRepository.bindRealRepositoryAsRunnableIntoMap(): Runnable
public abstract fun bindRealRepositoryAsRunnableIntoMap(realRepository: RealRepository): Runnable
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import java.io.Closeable
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
public abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository

@Binds
@IntoSet
public abstract fun RealRepository.bindRealRepositoryAsCloseableIntoSet(): Closeable
public abstract fun bindRealRepositoryAsCloseableIntoSet(realRepository_: RealRepository):
Closeable
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ import dagger.hilt.testing.TestInstallIn
@OriginatingElement(topLevelClass = FakeRepository::class)
public abstract class AutoBindFakeRepositorySingletonModule private constructor() {
@Binds
public abstract fun FakeRepository.bindFakeRepositoryAsRepository(): Repository
public abstract fun bindFakeRepositoryAsRepository(fakeRepository: FakeRepository): Repository
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ public abstract class AutoBindRealRepositoryFragmentModule private constructor()
@Binds
@IntoMap
@StringKey("repository")
public abstract fun RealRepository.bindRealRepositoryAsCallableOfStringIntoMap(): Callable<String>
public abstract fun bindRealRepositoryAsCallableOfStringIntoMap(realRepository: RealRepository):
Callable<String>

@Binds
@IntoMap
@StringKey("repository")
public abstract fun RealRepository.bindRealRepositoryAsCallableOfStarIntoMap(): Callable<*>
public abstract fun bindRealRepositoryAsCallableOfStarIntoMap(realRepository_: RealRepository):
Callable<*>
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import java.util.concurrent.Callable
@OriginatingElement(topLevelClass = RealRepository::class)
public abstract class AutoBindRealRepositorySingletonModule private constructor() {
@Binds
public abstract fun RealRepository.bindRealRepositoryAsRepository(): Repository
public abstract fun bindRealRepositoryAsRepository(realRepository: RealRepository): Repository

@Binds
@IntoSet
public abstract fun RealRepository.bindRealRepositoryAsCallableOfStarIntoSet(): Callable<*>
public abstract fun bindRealRepositoryAsCallableOfStarIntoSet(realRepository_: RealRepository):
Callable<*>
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ import dagger.hilt.testing.TestInstallIn
@OriginatingElement(topLevelClass = FakeRepository::class)
public abstract class AutoBindFakeRepositorySingletonModule private constructor() {
@Binds
public abstract fun FakeRepository.bindFakeRepositoryAsRepository(): Repository
public abstract fun bindFakeRepositoryAsRepository(fakeRepository: FakeRepository): Repository
}
Loading

0 comments on commit 50e88b9

Please sign in to comment.