|
25 | 25 | import com.bumptech.glide.provider.ResourceDecoderRegistry;
|
26 | 26 | import com.bumptech.glide.provider.ResourceEncoderRegistry;
|
27 | 27 | import com.bumptech.glide.util.pool.FactoryPools;
|
| 28 | +import java.io.File; |
28 | 29 | import java.util.ArrayList;
|
29 | 30 | import java.util.Arrays;
|
30 | 31 | import java.util.Collections;
|
| 32 | +import java.util.HashMap; |
31 | 33 | import java.util.List;
|
| 34 | +import java.util.Map; |
32 | 35 |
|
33 | 36 | /**
|
34 | 37 | * Manages component registration to extend or replace Glide's default loading, decoding, and
|
@@ -530,17 +533,43 @@ public <Model, TResource, Transcode> List<Class<?>> getRegisteredResourceClasses
|
530 | 533 | if (result == null) {
|
531 | 534 | result = new ArrayList<>();
|
532 | 535 | List<Class<?>> dataClasses = modelLoaderRegistry.getDataClasses(modelClass);
|
| 536 | + |
| 537 | + Map<Class<?>, List<? extends Class<?>>> dataClassToResourceClasses = new HashMap<>(); |
| 538 | + Map<Class<?>, List<Class<Transcode>>> resourceClassToTranscodeClasses = new HashMap<>(); |
| 539 | + |
533 | 540 | for (Class<?> dataClass : dataClasses) {
|
534 | 541 | List<? extends Class<?>> registeredResourceClasses =
|
535 | 542 | decoderRegistry.getResourceClasses(dataClass, resourceClass);
|
| 543 | + |
| 544 | + dataClassToResourceClasses.put(dataClass, registeredResourceClasses); |
| 545 | + |
536 | 546 | for (Class<?> registeredResourceClass : registeredResourceClasses) {
|
537 |
| - List<Class<Transcode>> registeredTranscodeClasses = transcoderRegistry |
538 |
| - .getTranscodeClasses(registeredResourceClass, transcodeClass); |
| 547 | + |
| 548 | + List<Class<Transcode>> registeredTranscodeClasses = |
| 549 | + transcoderRegistry.getTranscodeClasses(registeredResourceClass, transcodeClass); |
| 550 | + |
| 551 | + resourceClassToTranscodeClasses.put(registeredResourceClass, registeredTranscodeClasses); |
| 552 | + |
539 | 553 | if (!registeredTranscodeClasses.isEmpty() && !result.contains(registeredResourceClass)) {
|
540 | 554 | result.add(registeredResourceClass);
|
541 | 555 | }
|
542 | 556 | }
|
543 | 557 | }
|
| 558 | + |
| 559 | + // Throw the exception before populating the cache in the hopes that a subsequent attempt will |
| 560 | + // succeed and only one request will randomly fail. This is really debugging logic that should |
| 561 | + // go away when we find the actual cause for b/73882030. |
| 562 | + if (result.isEmpty() && !File.class.equals(transcodeClass)) { |
| 563 | + if (dataClasses.isEmpty()) { |
| 564 | + throw new IllegalStateException("Failed to find any data classes for: " + modelClass); |
| 565 | + } |
| 566 | + |
| 567 | + throw new IllegalStateException( |
| 568 | + "Failed to find any resource or transcode classes for model: " + modelClass |
| 569 | + + ", data to resource classes: " + dataClassToResourceClasses |
| 570 | + + ", resource to transcode classes: " + resourceClassToTranscodeClasses); |
| 571 | + } |
| 572 | + |
544 | 573 | modelToResourceClassCache.put(modelClass, resourceClass,
|
545 | 574 | Collections.unmodifiableList(result));
|
546 | 575 | }
|
|
0 commit comments