LibraryGlideModule does not work after migrate to ksp.
- Dominant language
- Java
- Stars
- 35k
- Forks
- 6.2k
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 8
Description
Glide: 4.16.0
**1. Background introduction.**
I have a custom LibraryGlideModule to custom image url. The code are below:
```
@GlideModule
class ResizeableUrlGlideModule : LibraryGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
registry.append(IResizeableUrl::class.java, InputStream::class.java, ResizeableModelLoaderFactory())
}
}
class ResizeableModelLoaderFactory : ModelLoaderFactory {
override fun build(multiFactory: MultiModelLoaderFactory): ResizeableModelLoader {
return ResizeableModelLoader(
multiFactory.build(
String::class.java,
InputStream::class.java
)
)
}
override fun teardown() {}
}
class ResizeableModelLoader : ModelLoader {
private var defaultLoader: ModelLoader
constructor(uriLoader: ModelLoader) {
this.defaultLoader = uriLoader
}
override fun buildLoadData(
model: IResizeableUrl,
width: Int,
height: Int,
options: Options
): ModelLoader.LoadData? {
model.getResizeableUrl(width, height)?.let { newUrl ->
return defaultLoader.buildLoadData(newUrl, width, height, options)
}
return null
}
override fun handles(model: IResizeableUrl): Boolean {
return true
}
}
interface IResizeableUrl {
fun getResizeableUrl(width: Int, height: Int): String?
}
class ScreenWidthUrl(url: String?, val ratio: Float = 1F) : ResizeableUrl(url) {
override fun getResizeableUrlInternal(width: Int, height: Int): String? {
....
}
}
```
**2. Error appear**
when using KAPT,i can use `ScreenWidthUrl` like below:
```
Glide.with(imageView).load(ScreenWidthUrl(imageUrl)).into(view)
```
But after migrate to KSP,i get an error:
```
com.bumptech.glide.Registry$NoModelLoaderAvailableException: Failed to find any ModelLoaders registered for model class: class com.youdao.dict.core.glide.model.UserIconUrl
at com.bumptech.glide.load.model.ModelLoaderRegistry.getModelLoaders(ModelLoaderRegistry.java:77)
at com.bumptech.glide.Registry.getModelLoaders(Registry.java:594)
at com.bumptech.glide.load.engine.DecodeHelper.getLoadData(DecodeHelper.java:212)
at com.bumptech.glide.load.engine.DecodeHelper.getCacheKeys(DecodeHelper.java:229)
at com.bumptech.glide.load.engine.ResourceCacheGenerator.startNext(ResourceCacheGenerator.java:47)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:311)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:277)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:235)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:424)
at java.lang.Thread.run(Thread.java:920)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultPriorityThreadFactory$1.run(GlideExecutor.java:383)
```
**3. Try to solve error**
I have searched without solution. So i print message in function`s body and find the diff between KAPT and KSP.
- KAPT
```
public void registerComponents(@NonNull Context context, @NonNull Glide glide,
@NonNull Registry registry) {
new OkHttpLibraryGlideModule().registerComponents(context, glide, registry);
new ResizeableUrlGlideModule().registerComponents(context, glide, registry);
appGlideModule.registerComponents(context, glide, registry);
}
```
- KSP
```
public void registerComponents(@NonNull Context context, @NonNull Glide glide,
@NonNull Registry registry) {
new OkHttpLibraryGlideModule().registerComponents(context, glide, registry);
appGlideModule.registerComponents(context, glide, registry);
}
```
The above code snippets are both in `GeneratedAppGlideModuleImpl` which generated automatically in `build/generated/source/kapt/developDebug/com/bumptech/glide/GeneratedAppGlideModuleImpl.java` of app module.
The lack of `new ResizeableUrlGlideModule().registerComponents(context, glide, registry);`, so i get the error.
**4. Discussion**
My app module is still using KAPT, because it using `DataBinding`. And `ResizeableUrlGlideModule` is in library module which use KSP.
When library module use KAPT too, everything is ok. When library module use KSP, i got error above.
Can anyone tell me how to solve this? thanks!
Contributor guide
Assessment
This issue has not been assessed yet.