bumptech / bumptech/glide

LibraryGlideModule does not work after migrate to ksp.

Open
#5,298 6 comments 1 reaction 0 assignees View on GitHub
bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.