Showing preview only (4,447K chars total). Download the full file or copy to clipboard to get everything.
Repository: bumptech/glide
Branch: master
Commit: d4278e03c082
Files: 952
Total size: 4.0 MB
Directory structure:
gitextract_c7iyc7lj/
├── .github/
│ ├── stale.yml
│ └── workflows/
│ ├── build.yml
│ └── publish-manual.yml
├── .gitignore
├── .gitmodules
├── .idea/
│ ├── codeStyleSettings.xml
│ └── inspectionProfiles/
│ └── Project_Default.xml
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── annotation/
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── compiler/
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── proguard.pro
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── bumptech/
│ │ │ │ └── glide/
│ │ │ │ └── annotation/
│ │ │ │ └── compiler/
│ │ │ │ ├── AppModuleGenerator.java
│ │ │ │ ├── AppModuleProcessor.java
│ │ │ │ ├── ExtensionProcessor.java
│ │ │ │ ├── GlideAnnotationProcessor.java
│ │ │ │ ├── GlideExtensionValidator.java
│ │ │ │ ├── GlideGenerator.java
│ │ │ │ ├── IndexerGenerator.java
│ │ │ │ ├── LibraryModuleProcessor.java
│ │ │ │ ├── ProcessorUtil.java
│ │ │ │ ├── RequestBuilderGenerator.java
│ │ │ │ ├── RequestManagerFactoryGenerator.java
│ │ │ │ ├── RequestManagerGenerator.java
│ │ │ │ ├── RequestOptionsExtensionGenerator.java
│ │ │ │ ├── RequestOptionsGenerator.java
│ │ │ │ └── RequestOptionsOverrideGenerator.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── gradle/
│ │ │ └── incremental.annotation.processors
│ │ └── test/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── compiler/
│ │ │ ├── AppGlideModuleWithExcludesTest.java
│ │ │ ├── AppGlideModuleWithLibraryInPackageTest.java
│ │ │ ├── AppGlideModuleWithMultipleExcludesTest.java
│ │ │ ├── EmptyAppAndLibraryGlideModulesTest.java
│ │ │ ├── EmptyAppGlideModuleTest.java
│ │ │ ├── EmptyLibraryGlideModuleTest.java
│ │ │ ├── GlideExtensionOptionsTest.java
│ │ │ ├── GlideExtensionWithOptionTest.java
│ │ │ ├── GlideExtensionWithTypeTest.java
│ │ │ ├── InvalidAppGlideModuleWithExcludesTest.java
│ │ │ ├── InvalidGlideExtensionTest.java
│ │ │ ├── InvalidGlideOptionsExtensionTest.java
│ │ │ ├── InvalidGlideTypeExtensionTest.java
│ │ │ ├── MultipleAppGlideModuleTest.java
│ │ │ ├── MultipleEmptyLibraryGlideModuleTest.java
│ │ │ ├── OverlyLongFileNameTest.java
│ │ │ └── test/
│ │ │ ├── CompilationProvider.java
│ │ │ ├── ReferencedResource.java
│ │ │ ├── RegenerateResourcesRule.java
│ │ │ ├── SubDirectory.java
│ │ │ ├── TestDescription.java
│ │ │ └── Util.java
│ │ └── resources/
│ │ ├── AppGlideModuleWithExcludesTest/
│ │ │ ├── AppModuleWithExcludes.java
│ │ │ └── GeneratedAppGlideModuleImpl.java
│ │ ├── AppGlideModuleWithLibraryInPackageTest/
│ │ │ ├── AppModuleWithLibraryInPackage.java
│ │ │ ├── GeneratedAppGlideModuleImpl.java
│ │ │ └── LibraryModuleInPackage.java
│ │ ├── AppGlideModuleWithMultipleExcludesTest/
│ │ │ ├── AppModuleWithMultipleExcludes.java
│ │ │ ├── EmptyLibraryModule1.java
│ │ │ ├── EmptyLibraryModule2.java
│ │ │ └── GeneratedAppGlideModuleImpl.java
│ │ ├── EmptyAppAndLibraryGlideModulesTest/
│ │ │ └── GeneratedAppGlideModuleImpl.java
│ │ ├── EmptyAppGlideModuleTest/
│ │ │ ├── EmptyAppModule.java
│ │ │ ├── GeneratedAppGlideModuleImpl.java
│ │ │ ├── GeneratedRequestManagerFactory.java
│ │ │ ├── GlideApp.java
│ │ │ ├── GlideOptions.java
│ │ │ ├── GlideRequest.java
│ │ │ └── GlideRequests.java
│ │ ├── EmptyLibraryGlideModuleTest/
│ │ │ ├── EmptyLibraryModule.java
│ │ │ └── GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule.java
│ │ ├── GlideExtensionOptionsTest/
│ │ │ ├── MemoizeStaticMethod/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── OverrideExtend/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── OverrideExtendMultipleArguments/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── OverrideReplace/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── SkipStaticMethod/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ └── StaticMethodName/
│ │ │ ├── Extension.java
│ │ │ ├── GlideOptions.java
│ │ │ └── GlideRequest.java
│ │ ├── GlideExtensionWithOptionTest/
│ │ │ ├── ExtensionWithOption.java
│ │ │ ├── GlideOptions.java
│ │ │ └── GlideRequest.java
│ │ ├── GlideExtensionWithTypeTest/
│ │ │ ├── ExtensionWithType.java
│ │ │ ├── GlideOptions.java
│ │ │ └── GlideRequests.java
│ │ ├── MultipleAppGlideModuleTest/
│ │ │ ├── EmptyAppModule1.java
│ │ │ └── EmptyAppModule2.java
│ │ └── MultipleEmptyLibraryGlideModuleTest/
│ │ ├── EmptyLibraryModule1.java
│ │ ├── EmptyLibraryModule2.java
│ │ └── GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule1_com_bumptech_glide_test_EmptyLibraryModule2.java
│ ├── gradle.properties
│ ├── ksp/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── integrationtest/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── ksp/
│ │ │ └── integrationtest/
│ │ │ └── IntegrationLibraryGlideModuleTests.kt
│ │ ├── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── ksp/
│ │ │ ├── AppGlideModules.kt
│ │ │ ├── GlideSymbolProcessor.kt
│ │ │ ├── GlideSymbolProcessorProvider.kt
│ │ │ ├── LibraryGlideModules.kt
│ │ │ └── ModuleParser.kt
│ │ └── test/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── ksp/
│ │ │ └── test/
│ │ │ └── SourceTestHelpers.kt
│ │ └── test/
│ │ └── kotlin/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── annotation/
│ │ └── ksp/
│ │ └── test/
│ │ ├── LibraryGlideModuleTests.kt
│ │ └── OnlyAppGlideModuleTests.kt
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── annotation/
│ ├── Excludes.java
│ ├── GlideExtension.java
│ ├── GlideModule.java
│ ├── GlideOption.java
│ ├── GlideType.java
│ ├── compiler/
│ │ └── Index.java
│ └── ksp/
│ └── Index.java
├── benchmark/
│ ├── benchmark-proguard-rules.pro
│ ├── build.gradle.kts
│ ├── gradle.properties
│ └── src/
│ └── androidTest/
│ ├── AndroidManifest.xml
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ ├── benchmark/
│ │ ├── BenchmarkData.java
│ │ ├── BenchmarkFromCache.java
│ │ ├── BenchmarkMediaStoreData.java
│ │ ├── BenchmarkModels.java
│ │ ├── GlideBenchmarkRule.java
│ │ └── data/
│ │ └── DataOpener.java
│ └── load/
│ └── resource/
│ └── bitmap/
│ └── BenchmarkDownsampler.java
├── build.gradle
├── checkstyle.xml
├── checkstyle_suppressions.xml
├── gcloud-bumptech.json.enc
├── gcloud-sjudd.json.enc
├── glide/
│ ├── build.gradle
│ └── gradle.properties
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── instrumentation/
│ ├── build.gradle.kts
│ ├── gradle.properties
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ ├── AsBytesTest.java
│ │ ├── AsFileTest.java
│ │ ├── CachingTest.java
│ │ ├── CenterCropRegressionTest.java
│ │ ├── CenterInsideRegressionTest.java
│ │ ├── CircleCropRegressionTest.java
│ │ ├── DarkModeTest.java
│ │ ├── DataUriTest.java
│ │ ├── DownsampleVideoTest.java
│ │ ├── DrawableTransformationTest.java
│ │ ├── ErrorHandlingTest.java
│ │ ├── ExternallyClearedDiskCacheTest.java
│ │ ├── FitCenterRegressionTest.java
│ │ ├── LargeImageTest.java
│ │ ├── LoadAnimatedImageResourceTest.java
│ │ ├── LoadAssetUriTest.java
│ │ ├── LoadBitmapTest.java
│ │ ├── LoadBytesTest.java
│ │ ├── LoadDrawableTest.java
│ │ ├── LoadResourcesWithDownsamplerTest.java
│ │ ├── LoadVideoResourceTest.java
│ │ ├── MultiRequestTest.java
│ │ ├── NonBitmapDrawableResourcesTest.java
│ │ ├── PausedRequestsTest.java
│ │ ├── RequestManagerLifecycleTest.java
│ │ ├── RequestManagerTest.java
│ │ ├── RequestTest.java
│ │ ├── RoundedCornersRegressionTest.java
│ │ ├── WideGamutTest.java
│ │ ├── load/
│ │ │ ├── engine/
│ │ │ │ └── executor/
│ │ │ │ └── IdlingGlideRule.java
│ │ │ └── resource/
│ │ │ ├── bitmap/
│ │ │ │ └── DownsamplerEmulatorTest.java
│ │ │ └── gif/
│ │ │ └── GifDrawableTest.java
│ │ └── test/
│ │ ├── BitmapRegressionTester.java
│ │ ├── CanonicalBitmap.java
│ │ ├── ModelGeneratorRule.java
│ │ ├── RegressionTest.java
│ │ ├── ResourceIds.java
│ │ ├── SplitByCpu.java
│ │ └── SplitBySdk.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── test/
│ │ ├── DefaultFragmentActivity.java
│ │ ├── ForceDarkOrLightModeActivity.java
│ │ ├── GlideWithAsDifferentSupertypesActivity.java
│ │ ├── GlideWithBeforeSuperOnCreateActivity.java
│ │ └── InstrumentationAppGlideModule.java
│ └── res/
│ ├── drawable/
│ │ ├── bitmap_alias.xml
│ │ ├── shape_drawable.xml
│ │ ├── state_list_drawable.xml
│ │ ├── vector_drawable.xml
│ │ ├── vector_drawable_dark.xml
│ │ └── vector_drawable_light.xml
│ ├── layout/
│ │ └── default_fragment_activity.xml
│ ├── raw/
│ │ └── dl_world_anim_avif.avif
│ ├── values/
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-night/
│ └── colors.xml
├── integration/
│ ├── avif/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── avif/
│ │ ├── AvifByteBufferBitmapDecoder.java
│ │ ├── AvifGlideModule.java
│ │ └── AvifStreamBitmapDecoder.java
│ ├── build.gradle.kts
│ ├── compose/
│ │ ├── api/
│ │ │ └── compose.api
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ ├── integration/
│ │ │ │ └── compose/
│ │ │ │ ├── GlideImageCustomDrawableTransformationTest.kt
│ │ │ │ ├── GlideImageDefaultTransformationTest.kt
│ │ │ │ ├── GlideImageErrorTest.kt
│ │ │ │ ├── GlideImagePlaceholderTest.kt
│ │ │ │ ├── GlideImageTest.kt
│ │ │ │ ├── RememberGlidePreloadingDataTest.kt
│ │ │ │ └── test/
│ │ │ │ ├── GlideComposeRule.kt
│ │ │ │ ├── expectations.kt
│ │ │ │ └── nodes.kt
│ │ │ └── load/
│ │ │ └── engine/
│ │ │ └── executor/
│ │ │ └── GlideIdlingResourceInit.kt
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── compose/
│ │ │ ├── ExperimentalGlideComposeApi.kt
│ │ │ ├── GlideImage.kt
│ │ │ ├── GlidePainter.kt
│ │ │ ├── Preload.kt
│ │ │ └── Sizes.kt
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── compose/
│ │ └── GlideImageTest.kt
│ ├── concurrent/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── concurrent/
│ │ │ └── GlideFutures.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── concurrent/
│ │ └── GlideFuturesTest.java
│ ├── cronet/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── cronet/
│ │ │ ├── BufferQueue.java
│ │ │ ├── ByteBufferParser.java
│ │ │ ├── ChromiumRequestSerializer.java
│ │ │ ├── ChromiumUrlFetcher.java
│ │ │ ├── ChromiumUrlLoader.java
│ │ │ ├── CronetEngineSingleton.java
│ │ │ ├── CronetGlideModule.java
│ │ │ ├── CronetLibraryGlideModule.java
│ │ │ ├── CronetRequestFactory.java
│ │ │ ├── CronetRequestFactoryImpl.java
│ │ │ └── DataLogger.java
│ │ └── test/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── cronet/
│ │ └── ChromiumUrlFetcherTest.java
│ ├── gifencoder/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── gifencoder/
│ │ │ └── ReEncodingGifResourceEncoder.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── gifencoder/
│ │ └── ReEncodingGifResourceEncoderTest.java
│ ├── gradle.properties
│ ├── ktx/
│ │ ├── api/
│ │ │ └── ktx.api
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ ├── GlideIntegration.kt
│ │ │ └── integration/
│ │ │ └── ktx/
│ │ │ ├── Flows.kt
│ │ │ └── InternalGlideApi.kt
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ ├── integration/
│ │ │ └── ktx/
│ │ │ └── FlowsTest.kt
│ │ └── load/
│ │ └── engine/
│ │ └── executor/
│ │ └── GlideIdlingResourceInit.kt
│ ├── okhttp/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── okhttp/
│ │ ├── OkHttpGlideModule.java
│ │ ├── OkHttpLibraryGlideModule.java
│ │ ├── OkHttpStreamFetcher.java
│ │ └── OkHttpUrlLoader.java
│ ├── okhttp3/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── okhttp3/
│ │ ├── OkHttpGlideModule.java
│ │ ├── OkHttpLibraryGlideModule.java
│ │ ├── OkHttpStreamFetcher.java
│ │ └── OkHttpUrlLoader.java
│ ├── okhttp4/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── okhttp3/
│ │ ├── OkHttpLibraryGlideModule.java
│ │ ├── OkHttpStreamFetcher.java
│ │ └── OkHttpUrlLoader.java
│ ├── recyclerview/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── recyclerview/
│ │ ├── RecyclerToListViewScrollListener.java
│ │ └── RecyclerViewPreloader.java
│ ├── sqljournaldiskcache/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── sqljournaldiskcache/
│ │ │ ├── Clock.java
│ │ │ ├── DefaultClock.java
│ │ │ ├── DiskCacheDbHelper.java
│ │ │ ├── EntryCache.java
│ │ │ ├── EvictionManager.java
│ │ │ ├── FileSystem.java
│ │ │ ├── GlideJournaledLruDiskCacheWrapper.java
│ │ │ ├── Journal.java
│ │ │ ├── JournalTable.java
│ │ │ ├── JournaledLruDiskCache.java
│ │ │ ├── MessageIds.java
│ │ │ ├── RecoveryManager.java
│ │ │ ├── SizeJournal.java
│ │ │ ├── SizeTable.java
│ │ │ └── SqliteStatementPool.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── sqljournaldiskcache/
│ │ ├── DiskCacheDbHelperUpgradeTest.java
│ │ ├── DiskCacheUtils.java
│ │ ├── JournaledLruDiskCacheTest.java
│ │ └── TestClock.java
│ └── volley/
│ ├── build.gradle.kts
│ ├── gradle.properties
│ ├── lint.xml
│ └── src/
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── volley/
│ │ ├── VolleyGlideModule.java
│ │ ├── VolleyLibraryGlideModule.java
│ │ ├── VolleyRequestFactory.java
│ │ ├── VolleyStreamFetcher.java
│ │ └── VolleyUrlLoader.java
│ └── test/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── integration/
│ └── volley/
│ └── VolleyStreamFetcherServerTest.java
├── library/
│ ├── build.gradle
│ ├── gradle.properties
│ ├── lint.xml
│ ├── pmd/
│ │ └── build.gradle
│ ├── pmd-ruleset.xml
│ ├── proguard-rules.txt
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── bumptech/
│ │ │ │ └── glide/
│ │ │ │ ├── GeneratedAppGlideModule.java
│ │ │ │ ├── GenericTransitionOptions.java
│ │ │ │ ├── Glide.java
│ │ │ │ ├── GlideBuilder.java
│ │ │ │ ├── GlideContext.java
│ │ │ │ ├── GlideExperiments.java
│ │ │ │ ├── ListPreloader.java
│ │ │ │ ├── MemoryCategory.java
│ │ │ │ ├── ModelTypes.java
│ │ │ │ ├── Priority.java
│ │ │ │ ├── Registry.java
│ │ │ │ ├── RegistryFactory.java
│ │ │ │ ├── RequestBuilder.java
│ │ │ │ ├── RequestManager.java
│ │ │ │ ├── TransitionOptions.java
│ │ │ │ ├── load/
│ │ │ │ │ ├── DataSource.java
│ │ │ │ │ ├── DecodeFormat.java
│ │ │ │ │ ├── EncodeStrategy.java
│ │ │ │ │ ├── Encoder.java
│ │ │ │ │ ├── HttpException.java
│ │ │ │ │ ├── ImageHeaderParser.java
│ │ │ │ │ ├── ImageHeaderParserUtils.java
│ │ │ │ │ ├── Key.java
│ │ │ │ │ ├── MultiTransformation.java
│ │ │ │ │ ├── Option.java
│ │ │ │ │ ├── Options.java
│ │ │ │ │ ├── PreferredColorSpace.java
│ │ │ │ │ ├── ResourceDecoder.java
│ │ │ │ │ ├── ResourceEncoder.java
│ │ │ │ │ ├── Transformation.java
│ │ │ │ │ ├── data/
│ │ │ │ │ │ ├── AssetFileDescriptorLocalUriFetcher.java
│ │ │ │ │ │ ├── AssetPathFetcher.java
│ │ │ │ │ │ ├── BufferedOutputStream.java
│ │ │ │ │ │ ├── DataFetcher.java
│ │ │ │ │ │ ├── DataRewinder.java
│ │ │ │ │ │ ├── DataRewinderRegistry.java
│ │ │ │ │ │ ├── ExifOrientationStream.java
│ │ │ │ │ │ ├── FileDescriptorAssetPathFetcher.java
│ │ │ │ │ │ ├── FileDescriptorLocalUriFetcher.java
│ │ │ │ │ │ ├── HttpUrlFetcher.java
│ │ │ │ │ │ ├── InputStreamRewinder.java
│ │ │ │ │ │ ├── LocalUriFetcher.java
│ │ │ │ │ │ ├── ParcelFileDescriptorRewinder.java
│ │ │ │ │ │ ├── StreamAssetPathFetcher.java
│ │ │ │ │ │ ├── StreamLocalUriFetcher.java
│ │ │ │ │ │ └── mediastore/
│ │ │ │ │ │ ├── FileService.java
│ │ │ │ │ │ ├── MediaStoreUtil.java
│ │ │ │ │ │ ├── ThumbFetcher.java
│ │ │ │ │ │ ├── ThumbnailQuery.java
│ │ │ │ │ │ └── ThumbnailStreamOpener.java
│ │ │ │ │ ├── engine/
│ │ │ │ │ │ ├── ActiveResources.java
│ │ │ │ │ │ ├── CallbackException.java
│ │ │ │ │ │ ├── DataCacheGenerator.java
│ │ │ │ │ │ ├── DataCacheKey.java
│ │ │ │ │ │ ├── DataCacheWriter.java
│ │ │ │ │ │ ├── DataFetcherGenerator.java
│ │ │ │ │ │ ├── DecodeHelper.java
│ │ │ │ │ │ ├── DecodeJob.java
│ │ │ │ │ │ ├── DecodePath.java
│ │ │ │ │ │ ├── DiskCacheStrategy.java
│ │ │ │ │ │ ├── Engine.java
│ │ │ │ │ │ ├── EngineJob.java
│ │ │ │ │ │ ├── EngineJobListener.java
│ │ │ │ │ │ ├── EngineKey.java
│ │ │ │ │ │ ├── EngineKeyFactory.java
│ │ │ │ │ │ ├── EngineResource.java
│ │ │ │ │ │ ├── GlideException.java
│ │ │ │ │ │ ├── Initializable.java
│ │ │ │ │ │ ├── Jobs.java
│ │ │ │ │ │ ├── LoadPath.java
│ │ │ │ │ │ ├── LockedResource.java
│ │ │ │ │ │ ├── Resource.java
│ │ │ │ │ │ ├── ResourceCacheGenerator.java
│ │ │ │ │ │ ├── ResourceCacheKey.java
│ │ │ │ │ │ ├── ResourceRecycler.java
│ │ │ │ │ │ ├── SourceGenerator.java
│ │ │ │ │ │ ├── bitmap_recycle/
│ │ │ │ │ │ │ ├── ArrayAdapterInterface.java
│ │ │ │ │ │ │ ├── ArrayPool.java
│ │ │ │ │ │ │ ├── AttributeStrategy.java
│ │ │ │ │ │ │ ├── BaseKeyPool.java
│ │ │ │ │ │ │ ├── BitmapPool.java
│ │ │ │ │ │ │ ├── BitmapPoolAdapter.java
│ │ │ │ │ │ │ ├── ByteArrayAdapter.java
│ │ │ │ │ │ │ ├── GroupedLinkedMap.java
│ │ │ │ │ │ │ ├── IntegerArrayAdapter.java
│ │ │ │ │ │ │ ├── LruArrayPool.java
│ │ │ │ │ │ │ ├── LruBitmapPool.java
│ │ │ │ │ │ │ ├── LruPoolStrategy.java
│ │ │ │ │ │ │ ├── Poolable.java
│ │ │ │ │ │ │ ├── PrettyPrintTreeMap.java
│ │ │ │ │ │ │ ├── SizeConfigStrategy.java
│ │ │ │ │ │ │ └── SizeStrategy.java
│ │ │ │ │ │ ├── cache/
│ │ │ │ │ │ │ ├── DiskCache.java
│ │ │ │ │ │ │ ├── DiskCacheAdapter.java
│ │ │ │ │ │ │ ├── DiskCacheWriteLocker.java
│ │ │ │ │ │ │ ├── DiskLruCacheFactory.java
│ │ │ │ │ │ │ ├── DiskLruCacheWrapper.java
│ │ │ │ │ │ │ ├── ExternalCacheDiskCacheFactory.java
│ │ │ │ │ │ │ ├── ExternalPreferredCacheDiskCacheFactory.java
│ │ │ │ │ │ │ ├── InternalCacheDiskCacheFactory.java
│ │ │ │ │ │ │ ├── LruResourceCache.java
│ │ │ │ │ │ │ ├── MemoryCache.java
│ │ │ │ │ │ │ ├── MemoryCacheAdapter.java
│ │ │ │ │ │ │ ├── MemorySizeCalculator.java
│ │ │ │ │ │ │ └── SafeKeyGenerator.java
│ │ │ │ │ │ ├── executor/
│ │ │ │ │ │ │ ├── GlideExecutor.java
│ │ │ │ │ │ │ └── RuntimeCompat.java
│ │ │ │ │ │ └── prefill/
│ │ │ │ │ │ ├── BitmapPreFillRunner.java
│ │ │ │ │ │ ├── BitmapPreFiller.java
│ │ │ │ │ │ ├── PreFillQueue.java
│ │ │ │ │ │ └── PreFillType.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ ├── AssetUriLoader.java
│ │ │ │ │ │ ├── ByteArrayLoader.java
│ │ │ │ │ │ ├── ByteBufferEncoder.java
│ │ │ │ │ │ ├── ByteBufferFileLoader.java
│ │ │ │ │ │ ├── DataUrlLoader.java
│ │ │ │ │ │ ├── DirectResourceLoader.java
│ │ │ │ │ │ ├── FileLoader.java
│ │ │ │ │ │ ├── GlideUrl.java
│ │ │ │ │ │ ├── Headers.java
│ │ │ │ │ │ ├── LazyHeaderFactory.java
│ │ │ │ │ │ ├── LazyHeaders.java
│ │ │ │ │ │ ├── MediaStoreFileLoader.java
│ │ │ │ │ │ ├── Model.java
│ │ │ │ │ │ ├── ModelCache.java
│ │ │ │ │ │ ├── ModelLoader.java
│ │ │ │ │ │ ├── ModelLoaderFactory.java
│ │ │ │ │ │ ├── ModelLoaderRegistry.java
│ │ │ │ │ │ ├── MultiModelLoader.java
│ │ │ │ │ │ ├── MultiModelLoaderFactory.java
│ │ │ │ │ │ ├── ResourceLoader.java
│ │ │ │ │ │ ├── ResourceUriLoader.java
│ │ │ │ │ │ ├── StreamEncoder.java
│ │ │ │ │ │ ├── StringLoader.java
│ │ │ │ │ │ ├── UnitModelLoader.java
│ │ │ │ │ │ ├── UriLoader.java
│ │ │ │ │ │ ├── UrlUriLoader.java
│ │ │ │ │ │ └── stream/
│ │ │ │ │ │ ├── BaseGlideUrlLoader.java
│ │ │ │ │ │ ├── HttpGlideUrlLoader.java
│ │ │ │ │ │ ├── HttpUriLoader.java
│ │ │ │ │ │ ├── MediaStoreImageThumbLoader.java
│ │ │ │ │ │ ├── MediaStoreVideoThumbLoader.java
│ │ │ │ │ │ ├── QMediaStoreUriLoader.java
│ │ │ │ │ │ └── UrlLoader.java
│ │ │ │ │ └── resource/
│ │ │ │ │ ├── DefaultOnHeaderDecodedListener.java
│ │ │ │ │ ├── SimpleResource.java
│ │ │ │ │ ├── UnitTransformation.java
│ │ │ │ │ ├── bitmap/
│ │ │ │ │ │ ├── BitmapDrawableDecoder.java
│ │ │ │ │ │ ├── BitmapDrawableEncoder.java
│ │ │ │ │ │ ├── BitmapDrawableResource.java
│ │ │ │ │ │ ├── BitmapDrawableTransformation.java
│ │ │ │ │ │ ├── BitmapEncoder.java
│ │ │ │ │ │ ├── BitmapImageDecoderResourceDecoder.java
│ │ │ │ │ │ ├── BitmapResource.java
│ │ │ │ │ │ ├── BitmapTransformation.java
│ │ │ │ │ │ ├── BitmapTransitionOptions.java
│ │ │ │ │ │ ├── ByteBufferBitmapDecoder.java
│ │ │ │ │ │ ├── ByteBufferBitmapImageDecoderResourceDecoder.java
│ │ │ │ │ │ ├── CenterCrop.java
│ │ │ │ │ │ ├── CenterInside.java
│ │ │ │ │ │ ├── CircleCrop.java
│ │ │ │ │ │ ├── DefaultImageHeaderParser.java
│ │ │ │ │ │ ├── DownsampleStrategy.java
│ │ │ │ │ │ ├── Downsampler.java
│ │ │ │ │ │ ├── DrawableToBitmapConverter.java
│ │ │ │ │ │ ├── DrawableTransformation.java
│ │ │ │ │ │ ├── ExifInterfaceImageHeaderParser.java
│ │ │ │ │ │ ├── FitCenter.java
│ │ │ │ │ │ ├── GlideBitmapFactory.java
│ │ │ │ │ │ ├── GranularRoundedCorners.java
│ │ │ │ │ │ ├── HardwareConfigState.java
│ │ │ │ │ │ ├── ImageReader.java
│ │ │ │ │ │ ├── InputStreamBitmapImageDecoderResourceDecoder.java
│ │ │ │ │ │ ├── LazyBitmapDrawableResource.java
│ │ │ │ │ │ ├── ParcelFileDescriptorBitmapDecoder.java
│ │ │ │ │ │ ├── RecyclableBufferedInputStream.java
│ │ │ │ │ │ ├── ResourceBitmapDecoder.java
│ │ │ │ │ │ ├── Rotate.java
│ │ │ │ │ │ ├── RoundedCorners.java
│ │ │ │ │ │ ├── StreamBitmapDecoder.java
│ │ │ │ │ │ ├── TransformationUtils.java
│ │ │ │ │ │ ├── UnitBitmapDecoder.java
│ │ │ │ │ │ ├── VideoBitmapDecoder.java
│ │ │ │ │ │ └── VideoDecoder.java
│ │ │ │ │ ├── bytes/
│ │ │ │ │ │ ├── ByteBufferRewinder.java
│ │ │ │ │ │ └── BytesResource.java
│ │ │ │ │ ├── drawable/
│ │ │ │ │ │ ├── AnimatedImageDecoder.java
│ │ │ │ │ │ ├── AnimatedWebpDecoder.java
│ │ │ │ │ │ ├── DrawableDecoderCompat.java
│ │ │ │ │ │ ├── DrawableResource.java
│ │ │ │ │ │ ├── DrawableTransitionOptions.java
│ │ │ │ │ │ ├── NonOwnedDrawableResource.java
│ │ │ │ │ │ ├── ResourceDrawableDecoder.java
│ │ │ │ │ │ └── UnitDrawableDecoder.java
│ │ │ │ │ ├── file/
│ │ │ │ │ │ ├── FileDecoder.java
│ │ │ │ │ │ └── FileResource.java
│ │ │ │ │ ├── gif/
│ │ │ │ │ │ ├── ByteBufferGifDecoder.java
│ │ │ │ │ │ ├── GifBitmapProvider.java
│ │ │ │ │ │ ├── GifDrawable.java
│ │ │ │ │ │ ├── GifDrawableEncoder.java
│ │ │ │ │ │ ├── GifDrawableResource.java
│ │ │ │ │ │ ├── GifDrawableTransformation.java
│ │ │ │ │ │ ├── GifFrameLoader.java
│ │ │ │ │ │ ├── GifFrameResourceDecoder.java
│ │ │ │ │ │ ├── GifOptions.java
│ │ │ │ │ │ └── StreamGifDecoder.java
│ │ │ │ │ └── transcode/
│ │ │ │ │ ├── BitmapBytesTranscoder.java
│ │ │ │ │ ├── BitmapDrawableTranscoder.java
│ │ │ │ │ ├── DrawableBytesTranscoder.java
│ │ │ │ │ ├── GifDrawableBytesTranscoder.java
│ │ │ │ │ ├── ResourceTranscoder.java
│ │ │ │ │ ├── TranscoderRegistry.java
│ │ │ │ │ └── UnitTranscoder.java
│ │ │ │ ├── manager/
│ │ │ │ │ ├── ApplicationLifecycle.java
│ │ │ │ │ ├── ConnectivityMonitor.java
│ │ │ │ │ ├── ConnectivityMonitorFactory.java
│ │ │ │ │ ├── DefaultConnectivityMonitor.java
│ │ │ │ │ ├── DefaultConnectivityMonitorFactory.java
│ │ │ │ │ ├── DoNothingFirstFrameWaiter.java
│ │ │ │ │ ├── EmptyRequestManagerTreeNode.java
│ │ │ │ │ ├── FirstFrameWaiter.java
│ │ │ │ │ ├── FrameWaiter.java
│ │ │ │ │ ├── Lifecycle.java
│ │ │ │ │ ├── LifecycleLifecycle.java
│ │ │ │ │ ├── LifecycleListener.java
│ │ │ │ │ ├── LifecycleRequestManagerRetriever.java
│ │ │ │ │ ├── NullConnectivityMonitor.java
│ │ │ │ │ ├── RequestManagerFragment.java
│ │ │ │ │ ├── RequestManagerRetriever.java
│ │ │ │ │ ├── RequestManagerTreeNode.java
│ │ │ │ │ ├── RequestTracker.java
│ │ │ │ │ ├── SingletonConnectivityReceiver.java
│ │ │ │ │ ├── SupportRequestManagerFragment.java
│ │ │ │ │ └── TargetTracker.java
│ │ │ │ ├── module/
│ │ │ │ │ ├── AppGlideModule.java
│ │ │ │ │ ├── AppliesOptions.java
│ │ │ │ │ ├── GlideModule.java
│ │ │ │ │ ├── LibraryGlideModule.java
│ │ │ │ │ ├── ManifestParser.java
│ │ │ │ │ └── RegistersComponents.java
│ │ │ │ ├── provider/
│ │ │ │ │ ├── EncoderRegistry.java
│ │ │ │ │ ├── ImageHeaderParserRegistry.java
│ │ │ │ │ ├── LoadPathCache.java
│ │ │ │ │ ├── ModelToResourceClassCache.java
│ │ │ │ │ ├── ResourceDecoderRegistry.java
│ │ │ │ │ └── ResourceEncoderRegistry.java
│ │ │ │ ├── request/
│ │ │ │ │ ├── BaseRequestOptions.java
│ │ │ │ │ ├── ErrorRequestCoordinator.java
│ │ │ │ │ ├── ExperimentalRequestListener.java
│ │ │ │ │ ├── FutureTarget.java
│ │ │ │ │ ├── Request.java
│ │ │ │ │ ├── RequestCoordinator.java
│ │ │ │ │ ├── RequestFutureTarget.java
│ │ │ │ │ ├── RequestListener.java
│ │ │ │ │ ├── RequestOptions.java
│ │ │ │ │ ├── ResourceCallback.java
│ │ │ │ │ ├── SingleRequest.java
│ │ │ │ │ ├── ThumbnailRequestCoordinator.java
│ │ │ │ │ ├── target/
│ │ │ │ │ │ ├── AppWidgetTarget.java
│ │ │ │ │ │ ├── BaseTarget.java
│ │ │ │ │ │ ├── BitmapImageViewTarget.java
│ │ │ │ │ │ ├── BitmapThumbnailImageViewTarget.java
│ │ │ │ │ │ ├── CustomTarget.java
│ │ │ │ │ │ ├── CustomViewTarget.java
│ │ │ │ │ │ ├── DrawableImageViewTarget.java
│ │ │ │ │ │ ├── DrawableThumbnailImageViewTarget.java
│ │ │ │ │ │ ├── FixedSizeDrawable.java
│ │ │ │ │ │ ├── ImageViewTarget.java
│ │ │ │ │ │ ├── ImageViewTargetFactory.java
│ │ │ │ │ │ ├── NotificationTarget.java
│ │ │ │ │ │ ├── PreloadTarget.java
│ │ │ │ │ │ ├── SimpleTarget.java
│ │ │ │ │ │ ├── SizeReadyCallback.java
│ │ │ │ │ │ ├── Target.java
│ │ │ │ │ │ ├── ThumbnailImageViewTarget.java
│ │ │ │ │ │ └── ViewTarget.java
│ │ │ │ │ └── transition/
│ │ │ │ │ ├── BitmapContainerTransitionFactory.java
│ │ │ │ │ ├── BitmapTransitionFactory.java
│ │ │ │ │ ├── DrawableCrossFadeFactory.java
│ │ │ │ │ ├── DrawableCrossFadeTransition.java
│ │ │ │ │ ├── NoTransition.java
│ │ │ │ │ ├── Transition.java
│ │ │ │ │ ├── TransitionFactory.java
│ │ │ │ │ ├── ViewAnimationFactory.java
│ │ │ │ │ ├── ViewPropertyAnimationFactory.java
│ │ │ │ │ ├── ViewPropertyTransition.java
│ │ │ │ │ └── ViewTransition.java
│ │ │ │ ├── signature/
│ │ │ │ │ ├── AndroidResourceSignature.java
│ │ │ │ │ ├── ApplicationVersionSignature.java
│ │ │ │ │ ├── EmptySignature.java
│ │ │ │ │ ├── MediaStoreSignature.java
│ │ │ │ │ └── ObjectKey.java
│ │ │ │ └── util/
│ │ │ │ ├── ByteBufferUtil.java
│ │ │ │ ├── CachedHashCodeArrayMap.java
│ │ │ │ ├── ContentLengthInputStream.java
│ │ │ │ ├── ExceptionCatchingInputStream.java
│ │ │ │ ├── ExceptionPassthroughInputStream.java
│ │ │ │ ├── Executors.java
│ │ │ │ ├── FixedPreloadSizeProvider.java
│ │ │ │ ├── GlideSuppliers.java
│ │ │ │ ├── LogTime.java
│ │ │ │ ├── LruCache.java
│ │ │ │ ├── MarkEnforcingInputStream.java
│ │ │ │ ├── MultiClassKey.java
│ │ │ │ ├── Preconditions.java
│ │ │ │ ├── Synthetic.java
│ │ │ │ ├── Util.java
│ │ │ │ ├── ViewPreloadSizeProvider.java
│ │ │ │ └── pool/
│ │ │ │ ├── FactoryPools.java
│ │ │ │ ├── GlideTrace.java
│ │ │ │ └── StateVerifier.java
│ │ │ └── res/
│ │ │ └── values/
│ │ │ └── ids.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── request/
│ │ └── target/
│ │ └── CustomViewTargetTest.java
│ └── test/
│ ├── build.gradle.kts
│ └── src/
│ └── test/
│ ├── java/
│ │ ├── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ ├── GlideContextTest.java
│ │ │ ├── GlideTest.java
│ │ │ ├── InitializeGlideTest.java
│ │ │ ├── ListPreloaderTest.java
│ │ │ ├── RegistryFactoryTest.java
│ │ │ ├── RegistryTest.java
│ │ │ ├── RequestBuilderTest.java
│ │ │ ├── RequestManagerTest.java
│ │ │ ├── load/
│ │ │ │ ├── ImageHeaderParserUtilsTest.java
│ │ │ │ ├── MultiTransformationTest.java
│ │ │ │ ├── OptionsTest.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BufferedOutputStreamFuzzTest.java
│ │ │ │ │ ├── BufferedOutputStreamTest.java
│ │ │ │ │ ├── ExifOrientationStreamTest.java
│ │ │ │ │ ├── FileDescriptorAssetPathFetcherTest.java
│ │ │ │ │ ├── HttpUrlFetcherServerTest.java
│ │ │ │ │ ├── HttpUrlFetcherTest.java
│ │ │ │ │ ├── LocalUriFetcherTest.java
│ │ │ │ │ ├── StreamAssetPathFetcherTest.java
│ │ │ │ │ ├── mediastore/
│ │ │ │ │ │ ├── MediaStoreUtilTest.java
│ │ │ │ │ │ ├── ThumbFetcherTest.java
│ │ │ │ │ │ └── ThumbnailStreamOpenerTest.java
│ │ │ │ │ └── resource/
│ │ │ │ │ ├── FileDescriptorLocalUriFetcherTest.java
│ │ │ │ │ └── StreamLocalUriFetcherTest.java
│ │ │ │ ├── engine/
│ │ │ │ │ ├── ActiveResourcesTest.java
│ │ │ │ │ ├── DataCacheKeyTest.java
│ │ │ │ │ ├── EngineJobTest.java
│ │ │ │ │ ├── EngineKeyTest.java
│ │ │ │ │ ├── EngineResourceTest.java
│ │ │ │ │ ├── EngineTest.java
│ │ │ │ │ ├── ResourceCacheKeyTest.java
│ │ │ │ │ ├── ResourceRecyclerTest.java
│ │ │ │ │ ├── bitmap_recycle/
│ │ │ │ │ │ ├── AttributeStrategyKeyTest.java
│ │ │ │ │ │ ├── AttributeStrategyTest.java
│ │ │ │ │ │ ├── GroupedLinkedMapTest.java
│ │ │ │ │ │ ├── LruArrayPoolTest.java
│ │ │ │ │ │ ├── LruBitmapPoolTest.java
│ │ │ │ │ │ ├── SizeConfigStrategyTest.java
│ │ │ │ │ │ └── SizeStrategyKeyTest.java
│ │ │ │ │ ├── cache/
│ │ │ │ │ │ ├── DiskLruCacheWrapperTest.java
│ │ │ │ │ │ ├── LruCacheTest.java
│ │ │ │ │ │ ├── LruResourceCacheTest.java
│ │ │ │ │ │ ├── MemorySizeCalculatorTest.java
│ │ │ │ │ │ └── SafeKeyGeneratorTest.java
│ │ │ │ │ ├── executor/
│ │ │ │ │ │ └── GlideExecutorTest.java
│ │ │ │ │ └── prefill/
│ │ │ │ │ ├── BitmapPreFillRunnerTest.java
│ │ │ │ │ ├── BitmapPreFillerTest.java
│ │ │ │ │ └── PreFillTypeTest.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── AssetUriLoaderTest.java
│ │ │ │ │ ├── ByteArrayLoaderTest.java
│ │ │ │ │ ├── DataUrlLoaderTest.java
│ │ │ │ │ ├── GlideUrlTest.java
│ │ │ │ │ ├── LazyHeadersTest.java
│ │ │ │ │ ├── ModelCacheTest.java
│ │ │ │ │ ├── ModelLoaderRegistryTest.java
│ │ │ │ │ ├── MultiModelLoaderFactoryTest.java
│ │ │ │ │ ├── ResourceLoaderTest.java
│ │ │ │ │ ├── StreamEncoderTest.java
│ │ │ │ │ ├── StringLoaderTest.java
│ │ │ │ │ ├── UriLoaderTest.java
│ │ │ │ │ ├── UrlUriLoaderTest.java
│ │ │ │ │ └── stream/
│ │ │ │ │ ├── BaseGlideUrlLoaderTest.java
│ │ │ │ │ └── HttpGlideUrlLoaderTest.java
│ │ │ │ └── resource/
│ │ │ │ ├── SimpleResourceTest.java
│ │ │ │ ├── UnitTransformationTest.java
│ │ │ │ ├── bitmap/
│ │ │ │ │ ├── BitmapDrawableResourceTest.java
│ │ │ │ │ ├── BitmapDrawableTransformationTest.java
│ │ │ │ │ ├── BitmapEncoderTest.java
│ │ │ │ │ ├── BitmapResourceTest.java
│ │ │ │ │ ├── BitmapTransformationTest.java
│ │ │ │ │ ├── CenterCropTest.java
│ │ │ │ │ ├── CenterInsideTest.java
│ │ │ │ │ ├── CircleCropTest.java
│ │ │ │ │ ├── DefaultImageHeaderParserTest.java
│ │ │ │ │ ├── DownsampleStrategyTest.java
│ │ │ │ │ ├── DrawableTransformationTest.java
│ │ │ │ │ ├── FitCenterTest.java
│ │ │ │ │ ├── HardwareConfigStateTest.java
│ │ │ │ │ ├── LazyBitmapDrawableResourceTest.java
│ │ │ │ │ ├── RecyclableBufferedInputStreamTest.java
│ │ │ │ │ ├── TransformationUtilsTest.java
│ │ │ │ │ └── VideoDecoderTest.java
│ │ │ │ ├── bytes/
│ │ │ │ │ └── BytesResourceTest.java
│ │ │ │ ├── drawable/
│ │ │ │ │ └── DrawableResourceTest.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileDecoderTest.java
│ │ │ │ │ └── FileResourceTest.java
│ │ │ │ ├── gif/
│ │ │ │ │ ├── ByteBufferGifDecoderTest.java
│ │ │ │ │ ├── GifDrawableResourceTest.java
│ │ │ │ │ ├── GifDrawableTest.java
│ │ │ │ │ ├── GifDrawableTransformationTest.java
│ │ │ │ │ ├── GifFrameLoaderTest.java
│ │ │ │ │ ├── GifFrameResourceDecoderTest.java
│ │ │ │ │ └── StreamGifDecoderTest.java
│ │ │ │ └── transcode/
│ │ │ │ ├── BitmapBytesTranscoderTest.java
│ │ │ │ ├── BitmapDrawableTranscoderTest.java
│ │ │ │ ├── GifDrawableBytesTranscoderTest.java
│ │ │ │ ├── TranscoderRegistryTest.java
│ │ │ │ └── UnitTranscoderTest.java
│ │ │ ├── manager/
│ │ │ │ ├── DefaultConnectivityMonitorFactoryTest.java
│ │ │ │ ├── DefaultConnectivityMonitorTest.java
│ │ │ │ ├── Issue117Activity.java
│ │ │ │ ├── RequestManagerRetrieverTest.java
│ │ │ │ └── RequestTrackerTest.java
│ │ │ ├── module/
│ │ │ │ └── ManifestParserTest.java
│ │ │ ├── request/
│ │ │ │ ├── ErrorRequestCoordinatorTest.java
│ │ │ │ ├── RequestFutureTargetTest.java
│ │ │ │ ├── RequestOptionsTest.java
│ │ │ │ ├── SingleRequestTest.java
│ │ │ │ ├── ThumbnailRequestCoordinatorTest.java
│ │ │ │ ├── target/
│ │ │ │ │ ├── AppWidgetTargetTest.java
│ │ │ │ │ ├── BitmapImageViewTargetTest.java
│ │ │ │ │ ├── ImageViewTargetFactoryTest.java
│ │ │ │ │ ├── ImageViewTargetTest.java
│ │ │ │ │ ├── NotificationTargetTest.java
│ │ │ │ │ ├── PreloadTargetTest.java
│ │ │ │ │ ├── SimpleTargetTest.java
│ │ │ │ │ └── ViewTargetTest.java
│ │ │ │ └── transition/
│ │ │ │ ├── DrawableCrossFadeFactoryTest.java
│ │ │ │ ├── DrawableCrossFadeViewAnimationTest.java
│ │ │ │ ├── ViewAnimationTest.java
│ │ │ │ ├── ViewPropertyAnimationTest.java
│ │ │ │ ├── ViewPropertyViewTransitionAnimationFactoryTest.java
│ │ │ │ └── ViewTransitionAnimationFactoryTest.java
│ │ │ ├── resize/
│ │ │ │ └── load/
│ │ │ │ └── ExifTest.java
│ │ │ ├── signature/
│ │ │ │ ├── AndroidResourceSignatureTest.java
│ │ │ │ ├── ApplicationVersionSignatureTest.java
│ │ │ │ ├── EmptySignatureTest.java
│ │ │ │ ├── MediaStoreSignatureTest.java
│ │ │ │ └── ObjectKeyTest.java
│ │ │ ├── tests/
│ │ │ │ ├── BackgroundUtil.java
│ │ │ │ ├── ContentResolverShadow.java
│ │ │ │ ├── GlideShadowLog.java
│ │ │ │ ├── KeyTester.java
│ │ │ │ ├── TearDownGlide.java
│ │ │ │ └── Util.java
│ │ │ └── util/
│ │ │ ├── ByteBufferUtilTest.java
│ │ │ ├── ContentLengthInputStreamTest.java
│ │ │ ├── ExceptionPassthroughInputStreamTest.java
│ │ │ ├── FixedPreloadSizeProviderTest.java
│ │ │ ├── MarkEnforcingInputStreamTest.java
│ │ │ ├── UtilTest.java
│ │ │ └── ViewPreloadSizeProviderTest.java
│ │ └── opengles/
│ │ └── GL.java
│ └── resources/
│ ├── animated_avif.avif
│ └── org.robolectric.Config.properties
├── mocks/
│ ├── build.gradle.kts
│ ├── gradle.properties
│ ├── lint.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ ├── load/
│ │ └── engine/
│ │ └── executor/
│ │ └── MockGlideExecutor.java
│ └── mocks/
│ ├── AnswerSelf.java
│ └── MockGlideBuilders.java
├── renovate.json
├── samples/
│ ├── contacturi/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── contacturi/
│ │ │ ├── ContactUriModule.java
│ │ │ └── MainActivity.java
│ │ └── res/
│ │ ├── layout/
│ │ │ └── activity_main.xml
│ │ └── values/
│ │ ├── dimens.xml
│ │ └── strings.xml
│ ├── flickr/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── flickr/
│ │ │ ├── FlickrGlideExtension.java
│ │ │ ├── FlickrGlideModule.java
│ │ │ ├── FlickrModelLoader.java
│ │ │ ├── FlickrPhotoGrid.java
│ │ │ ├── FlickrPhotoList.java
│ │ │ ├── FlickrSearchActivity.java
│ │ │ ├── FullscreenActivity.java
│ │ │ ├── PhotoViewer.java
│ │ │ ├── SquareImageView.java
│ │ │ └── api/
│ │ │ ├── Api.java
│ │ │ ├── FlickrQueryResponseListener.java
│ │ │ ├── Photo.java
│ │ │ ├── PhotoJsonStringParser.java
│ │ │ ├── Query.java
│ │ │ ├── RecentQuery.java
│ │ │ └── SearchQuery.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── flickr_photo_grid.xml
│ │ │ ├── flickr_photo_grid_item.xml
│ │ │ ├── flickr_photo_list.xml
│ │ │ ├── flickr_photo_list_item.xml
│ │ │ ├── flickr_search_activity.xml
│ │ │ └── fullscreen_activity.xml
│ │ ├── menu/
│ │ │ └── search_activity.xml
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ └── strings.xml
│ │ └── xml/
│ │ └── network_security_config.xml
│ ├── gallery/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── gallery/
│ │ │ ├── GalleryModule.kt
│ │ │ ├── GalleryViewModel.kt
│ │ │ ├── HorizontalGalleryFragment.kt
│ │ │ ├── MainActivity.kt
│ │ │ └── MediaStoreDataSource.kt
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── main_activity.xml
│ │ │ ├── recycler_item.xml
│ │ │ └── recycler_view.xml
│ │ └── values/
│ │ ├── ids.xml
│ │ └── strings.xml
│ ├── giphy/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── giphy/
│ │ │ ├── Api.java
│ │ │ ├── FullscreenActivity.java
│ │ │ ├── GiphyGlideModule.java
│ │ │ ├── GiphyModelLoader.java
│ │ │ └── MainActivity.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ ├── fullscreen_activity.xml
│ │ │ └── gif_list_item.xml
│ │ └── values/
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── imgur/
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── imgur/
│ │ │ ├── ApplicationModule.java
│ │ │ ├── ImgurApplication.java
│ │ │ ├── ImgurApplicationComponent.java
│ │ │ ├── ImgurGlideModule.java
│ │ │ ├── MainActivity.java
│ │ │ ├── MainActivityModule.java
│ │ │ └── api/
│ │ │ ├── ApiModule.java
│ │ │ ├── Gallery.java
│ │ │ ├── Image.java
│ │ │ ├── ImgurObservables.java
│ │ │ └── ImgurService.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ └── image_card.xml
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── xml/
│ │ └── network_security_config.xml
│ └── svg/
│ ├── build.gradle.kts
│ ├── lint.xml
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── samples/
│ │ └── svg/
│ │ ├── MainActivity.java
│ │ ├── SvgDecoder.java
│ │ ├── SvgDrawableTranscoder.java
│ │ ├── SvgModule.java
│ │ └── SvgSoftwareLayerSetter.java
│ └── res/
│ ├── drawable/
│ │ ├── dot_dot_dot.xml
│ │ ├── image_error.xml
│ │ └── image_loading.xml
│ ├── layout/
│ │ └── activity_main.xml
│ ├── values/
│ │ ├── dimens.xml
│ │ └── strings.xml
│ └── values-w820dp/
│ └── dimens.xml
├── scripts/
│ ├── run_instrumentation_tests.sh
│ ├── update_javadocs.sh
│ └── upload.gradle.kts
├── settings.gradle.kts
├── static/
│ └── logo-styles.css
├── testutil/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ ├── RobolectricConstants.java
│ └── testutil/
│ ├── BitmapSubject.java
│ ├── ConcurrencyHelper.java
│ ├── MockModelLoader.java
│ ├── TearDownGlide.java
│ ├── TestResourceUtil.java
│ ├── TestUtil.java
│ ├── WaitModelLoader.java
│ └── WaitModelLoaderRule.java
└── third_party/
├── disklrucache/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── LICENSE.txt
│ ├── README.md
│ ├── THIRD_PARTY.md
│ ├── build.gradle.kts
│ ├── checkstyle.xml
│ ├── gradle.properties
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── disklrucache/
│ │ ├── DiskLruCache.java
│ │ ├── StrictLineReader.java
│ │ └── Util.java
│ └── test/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── disklrucache/
│ ├── DiskLruCacheTest.java
│ └── StrictLineReaderTest.java
├── gif_decoder/
│ ├── LICENSE
│ ├── THIRD_PARTY.md
│ ├── build.gradle.kts
│ ├── gradle.properties
│ ├── lint.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── gifdecoder/
│ │ ├── GifDecoder.java
│ │ ├── GifFrame.java
│ │ ├── GifHeader.java
│ │ ├── GifHeaderParser.java
│ │ └── StandardGifDecoder.java
│ └── test/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── gifdecoder/
│ ├── GifDecoderTest.java
│ ├── GifHeaderParserTest.java
│ └── test/
│ ├── GifBytesTestUtil.java
│ └── GifBytesTestUtilTest.java
├── gif_encoder/
│ ├── LICENSE
│ ├── THIRD_PARTY.md
│ ├── lint.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── gifencoder/
│ ├── AnimatedGifEncoder.java
│ ├── LZWEncoder.java
│ └── NeuQuant.java
└── gradle.properties
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 7
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- bug
- enhancement
- feature
- documentation
- build stability
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
activity in the last seven days. It will be closed if no further activity
occurs within the next seven days. Thank you for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
unmarkComment: false
================================================
FILE: .github/workflows/build.yml
================================================
name: Android CI
on:
push:
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: "zulu"
java-version: "17"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Run Gradle Build
run: |
./gradlew build \
-x :library:test:testDebugUnitTest \
:library:test:assembleDebugUnitTest \
-x :library:testDebugUnitTest \
:library:assembleDebugUnitTest \
-x :annotation:ksp:test:testDebugUnitTest \
:annotation:ksp:test:assembleDebugUnitTest \
-x :third_party:disklrucache:testDebugUnitTest \
:third_party:disklrucache:assembleDebugUnitTest \
-x :integration:cronet:testDebugUnitTest \
:integration:cronet:assembleDebugUnitTest \
-x :integration:gifencoder:testDebugUnitTest \
:integration:gifencoder:assembleDebugUnitTest \
-x :integration:ktx:testDebugUnitTest \
:integration:ktx:assembleDebugUnitTest \
-x :integration:concurrent:testDebugUnitTest \
:integration:concurrent:assembleDebugUnitTest \
-x :integration:volley:testDebugUnitTest \
:integration:volley:assembleDebugUnitTest \
-x :integration:sqljournaldiskcache:testDebugUnitTest \
:integration:sqljournaldiskcache:assembleDebugUnitTest \
-x :third_party:gif_decoder:testDebugUnitTest \
:third_party:gif_decoder:assembleDebugUnitTest \
:samples:flickr:build \
:samples:giphy:build \
:samples:contacturi:build \
:samples:gallery:build \
:samples:imgur:build \
:samples:svg:build \
:instrumentation:assembleAndroidTest \
:benchmark:assembleAndroidTest \
:glide:releaseJavadoc \
:annotation:ksp:test:test \
:integration:ktx:apiCheck \
:annotation:ksp:integrationtest:test \
--parallel
================================================
FILE: .github/workflows/publish-manual.yml
================================================
name: Publish to Maven (manual)
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v4
- name: Make Gradle wrapper executable
run: chmod +x ./gradlew
- uses: actions/setup-java@v4
with:
distribution: "zulu"
java-version: "17"
- name: Build and publish everything to Maven Central
# This can be improved in Gradle
run: ./gradlew :mocks:publishToMavenCentral :annotation:publishToMavenCentral :annotation:compiler:publishToMavenCentral :library:publishToMavenCentral :integration:sqljournaldiskcache:publishToMavenCentral :annotation:ksp:publishToMavenCentral :integration:recyclerview:publishToMavenCentral :integration:avif:publishToMavenCentral :integration:okhttp:publishToMavenCentral :integration:gifencoder:publishToMavenCentral :integration:ktx:publishToMavenCentral :integration:okhttp4:publishToMavenCentral :integration:volley:publishToMavenCentral :integration:concurrent:publishToMavenCentral :integration:cronet:publishToMavenCentral :integration:okhttp3:publishToMavenCentral :integration:compose:publishToMavenCentral :third_party:disklrucache:publishToMavenCentral :third_party:gif_decoder:publishToMavenCentral
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.MAVEN_SIGNING_KEY_ID }}
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.MAVEN_SIGNING_PRIVATE_KEY }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.MAVEN_SIGNING_PRIVATE_KEY_PASSWORD }}
ORG_GRADLE_PROJECT_mavenCentralPublishing: true
ORG_GRADLE_PROJECT_mavenCentralAutomaticPublishing: false
================================================
FILE: .gitignore
================================================
# Android
local.properties
*.keystore
*.DS_Store
# Gradle
.gradle
build
jacoco.exec
# gh-pages
doc/**
_site/*
_pages/*
docs/**/*
# Vim
*.swp
*.swo
# sed
*.bak
# Intellij
*.iml
*.ipr
*.iws
.idea/**
!.idea/codeStyleSettings.xml
!.idea/inspectionProfiles
!.idea/inspectionProfiles/Project_Default.xml
================================================
FILE: .gitmodules
================================================
================================================
FILE: .idea/codeStyleSettings.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="false" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</value>
</option>
<option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value />
</option>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="true" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
</value>
</option>
<option name="RIGHT_MARGIN" value="100" />
<option name="JD_P_AT_EMPTY_LINES" value="false" />
<option name="JD_KEEP_EMPTY_PARAMETER" value="false" />
<option name="JD_KEEP_EMPTY_EXCEPTION" value="false" />
<option name="JD_KEEP_EMPTY_RETURN" value="false" />
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="WRAP_COMMENTS" value="true" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
<option name="LAYOUT_SETTINGS">
<value>
<option name="INSERT_BLANK_LINE_BEFORE_TAG" value="false" />
</value>
</option>
</AndroidXmlCodeStyleSettings>
<JSCodeStyleSettings>
<option name="INDENT_CHAINED_CALLS" value="false" />
</JSCodeStyleSettings>
<JavaCodeStyleSettings>
<option name="DO_NOT_WRAP_AFTER_SINGLE_ANNOTATION" value="true" />
</JavaCodeStyleSettings>
<Python>
<option name="USE_CONTINUATION_INDENT_FOR_ARGUMENTS" value="true" />
</Python>
<TypeScriptCodeStyleSettings>
<option name="INDENT_CHAINED_CALLS" value="false" />
</TypeScriptCodeStyleSettings>
<XML>
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
</XML>
<codeStyleSettings language="CSS">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="ECMA Script Level 4">
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
</codeStyleSettings>
<codeStyleSettings language="HTML">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JAVA">
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_RESOURCES" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="KEEP_SIMPLE_BLOCKS_IN_ONE_LINE" value="true" />
<option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="true" />
<option name="KEEP_SIMPLE_LAMBDAS_IN_ONE_LINE" value="true" />
<option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JSON">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JavaScript">
<option name="RIGHT_MARGIN" value="80" />
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="ObjectiveC">
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
<option name="BLANK_LINES_BEFORE_IMPORTS" value="0" />
<option name="BLANK_LINES_AFTER_IMPORTS" value="0" />
<option name="BLANK_LINES_AROUND_CLASS" value="0" />
<option name="BLANK_LINES_AROUND_METHOD" value="0" />
<option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="0" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="false" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ASSIGNMENT_WRAP" value="1" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="PROTO">
<option name="RIGHT_MARGIN" value="80" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="Python">
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="RIGHT_MARGIN" value="80" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="SASS">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="SCSS">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="TypeScript">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:.*Style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_width</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_height</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_weight</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_margin</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginTop</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginBottom</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginStart</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginEnd</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginLeft</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginRight</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:padding</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingTop</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingBottom</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingStart</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingEnd</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingLeft</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingRight</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res-auto</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/tools</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="protobuf">
<option name="RIGHT_MARGIN" value="80" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
</value>
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
</project>
================================================
FILE: .idea/inspectionProfiles/Project_Default.xml
================================================
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="SerializableHasSerialVersionUIDField" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoreAnonymousInnerClasses" value="false" />
<option name="superClassString" value="" />
</inspection_tool>
</profile>
</component>
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Contributions of all types are welcome.
We use GitHub as our bug and feature tracker both for code and for other aspects of the library (documentation, the wiki, etc.).
## Asking Questions
The best way to ask general questions is to send an email to our [mailing list][2], or join [#glide-library on freenode.org][3].
## Filing issues
When in doubt, file an issue. We'd rather close a few duplicate issues than let a problem go unnoticed.
Similarly if you support a particular feature request, feel free to let us know by commenting on the issue or [subscribing][6] to the issue.
To file a new issue, please use our issue template and fill out the template as much as possible (remove irrelevant parts).
The more information you can provide, the more likely we are to be able help.
## Contributing code
Pull requests are welcome for all parts of the codebase, especially the integration libraries.
You can find instructions on building the project in [README.md][5].
Our code style is defined in Intellij project files in the repo and also by our Checkstyle config.
If you'd like to submit code, but can't get the style checks to pass, feel free to put up your pull request anyway and we can help you fix the style issues.
If you'd like to contribute code, you will need to sign [Google's individual contributor license agreement][4] which will be asked when you create the PR by [googlebot](https://github.com/googlebot) should you forget it.
## Labels
Labels on issues are managed by contributors, you don't have to worry about them. Here's a list of what they mean:
* **bug**: feature that should work, but doesn't
* **enhancement**: minor tweak/addition to existing behavior
* **feature**: new behavior, bigger than enhancement, it gives more bang to Glide
* **question**: no need to modify Glide to fix the issue, usually a usage problem
* **reproducible**: has enough information to very easily reproduce, mostly in form of a small project in a GitHub repo
* **repro-needed**: we need some code to be able to reproduce and debug locally, otherwise there's not much we can do
* **duplicate**: there's another issue which already covers/tracks this
* **wontfix**: working as intended, or won't be fixed due to compatibility or other reasons
* **invalid**: there isn't enough information to make a verdict, or unrelated to Glide
* **non-library**: issue is not in the core library code, but rather in documentation, samples, build process, releases
* **v4**: problem originated in v4, or question about v4 (while v3 is in wide use)
*bug + enhancement: feature that doesn't work, but it's an edge case that either has a workaround or doesn't affect many users*
[1]: https://github.com/bumptech/glide/issues/new?body=**Glide%20Version**%3A%0A**Integration%20libraries**%3A%0A**Device/Android%20Version**%3A%0A**Issue%20details%20/%20Repro%20steps%20/%20Use%20case%20background**%3A%0A%0A**Glide%20load%20line**%3A%0A%60%60%60java%0AGlide.with%28...%29.....load%28...%29.....into%28...%29%3B%0A%60%60%60%0A%0A**Layout%20XML**%3A%0A%60%60%60xml%0A%3C...Layout%3E%0A%20%20%20%20%3CImageView%20android%3AscaleType%3D%22...%22%20...%20/%3E%0A%3C/..Layout%3E%0A%60%60%60%0A%0A**Stack%20trace%20/%20LogCat**%3A%0A%60%60%60ruby%0Apaste%20stack%20trace%20here%0A%60%60%60
[2]: https://groups.google.com/forum/#!forum/glidelibrary
[3]: http://webchat.freenode.net/?channels=glide-library
[4]: https://developers.google.com/open-source/cla/individual
[5]: https://github.com/bumptech/glide
[6]: https://help.github.com/articles/subscribing-to-conversations/
================================================
FILE: ISSUE_TEMPLATE.md
================================================
<!--
Please fill in the below fields with some data to help us best diagnose the issue.
The more specific you are, the better! You can help a lot by not making us ask these questions.
Feel free to remove any irrelevant parts that you know are not related to the issue.
Any HTML comment like this will be stripped when rendering markdown, no need to delete them.
-->
<!-- What version of Glide you're running, for example: 3.7.1 | 3.8.0-SNAPSHOT | 4.0.0-SNAPSHOT
It's essentially the version number from your build.gradle: `dependencies { compile '...:x.y.z' }` -->
**Glide Version**:
<!-- Do you use any integration library, like OkHttp3 or Volley? For example:
Fails to display with stock networking, but works with okhttp3-1.4.0 -->
**Integration libraries**:
<!-- What devices you managed to get the issue to come up on? For example:
fails on Galaxy S4/GT-I9500 4.4.2, works fine on Nexus 6P 5.1 and Genymotion Nexus 5 5.0.1 -->
**Device/Android Version**:
<!-- Share the details of your issue in prose, detailing actual and expected behavior. It also helps if you give some info **why** you are trying to do something as opposed to **what** is not working. -->
**Issue details / Repro steps / Use case background**:
<!-- How do you use Glide?
Make sure you include everything as is in your app's code:
Changing a single method parameter can yield totally different results.
Please clarify any magic variables that appear in the code, for example: "// `this` is a Fragment"
-->
**Glide load line / `GlideModule` (if any) / list Adapter code (if any)**:
```java
Glide.with...
```
<!-- How does your app look like?
We're most interested in the layout attributes and the hierarchy around the ImageView -->
**Layout XML**:
```xml
<FrameLayout xmlns:android="...
```
<!--
What is the error message that you got in the log?
You can find some help on diagnosing issues here: https://github.com/bumptech/glide/wiki/Debugging-and-Error-Handling
-->
**Stack trace / LogCat**:
```ruby
paste stack trace and/or log here
```
<!-- Bonus points if you attach a relevant screenshot, screen recording or a small demo project -->
================================================
FILE: LICENSE
================================================
License for everything not in third_party and not otherwise marked:
Copyright 2014 Google, Inc. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE, INC. OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the
authors and should not be interpreted as representing official policies, either expressed
or implied, of Google, Inc.
---------------------------------------------------------------------------------------------
License for third_party/disklrucache:
Copyright 2012 Jake Wharton
Copyright 2011 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
---------------------------------------------------------------------------------------------
License for third_party/gif_decoder:
Copyright (c) 2013 Xcellent Creations, Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---------------------------------------------------------------------------------------------
License for third_party/gif_encoder/AnimatedGifEncoder.java and
third_party/gif_encoder/LZWEncoder.java:
No copyright asserted on the source code of this class. May be used for any
purpose, however, refer to the Unisys LZW patent for restrictions on use of
the associated LZWEncoder class. Please forward any corrections to
kweiner@fmsware.com.
-----------------------------------------------------------------------------
License for third_party/gif_encoder/NeuQuant.java
Copyright (c) 1994 Anthony Dekker
NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994. See
"Kohonen neural networks for optimal colour quantization" in "Network:
Computation in Neural Systems" Vol. 5 (1994) pp 351-367. for a discussion of
the algorithm.
Any party obtaining a copy of these files from the author, directly or
indirectly, is granted, free of charge, a full and unrestricted irrevocable,
world-wide, paid up, royalty-free, nonexclusive right and license to deal in
this software and documentation files (the "Software"), including without
limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons who
receive copies from any such party to do so, with the only requirement being
that this copyright notice remain intact.
================================================
FILE: PULL_REQUEST_TEMPLATE.md
================================================
<!-- Make sure you've run `gradlew clean check jar assemble` before commit. -->
<!-- Don't forget that you can always force push to your private branches to make changes. -->
<!-- Please make sure there are no weird commits in the change set by rebasing to latest upstream. -->
<!-- Please squash typo/checkstyle/review fix commits into the base commit. -->
## Description
<!-- Please describe the changes you made on a high level. -->
<!-- Make sure you reference the GitHub issue here if this change is related to one. -->
## Motivation and Context
<!-- Why is this change required? What problem does it solve? -->
<!-- If it's fixing a bug reference it or provide repro steps. -->
<!-- If you have any issues feel free to create the PR anyway, we'll help to resolve them. -->
================================================
FILE: README.md
================================================
Glide
=====
[](https://maven-badges.herokuapp.com/maven-central/com.github.bumptech.glide/glide)
| [View Glide's documentation][20] | [简体中文文档][22] | [Report an issue with Glide][5]
Glide is a fast and efficient open source media management and image loading framework for Android that wraps media
decoding, memory and disk caching, and resource pooling into a simple and easy to use interface.

Glide supports fetching, decoding, and displaying video stills, images, and animated GIFs. Glide includes a flexible API
that allows developers to plug in to almost any network stack. By default Glide uses a custom `HttpUrlConnection` based
stack, but also includes utility libraries plug in to Google's Volley project or Square's OkHttp library instead.
Glide's primary focus is on making scrolling any kind of a list of images as smooth and fast as possible, but Glide is
also effective for almost any case where you need to fetch, resize, and display a remote image.
Download
--------
For detailed instructions and requirements, see Glide's [download and setup docs page][28].
You can download a jar from GitHub's [releases page][1].
Or use Gradle:
```gradle
repositories {
google()
mavenCentral()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:5.0.5'
}
```
Or Maven:
```xml
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>5.0.5</version>
</dependency>
```
For info on using the bleeding edge, see the [Snapshots][17] docs page.
R8 / Proguard
--------
The specific rules are [already bundled](library/proguard-rules.txt) into the aar which can be interpreted by R8 automatically
How do I use Glide?
-------------------
Check out the [documentation][20] for pages on a variety of topics, and see the [javadocs][3].
For Glide v3, see the [wiki][2].
Simple use cases will look something like this:
```java
// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
...
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("https://goo.gl/gEgYUd").into(imageView);
}
// For a simple image list:
@Override public View getView(int position, View recycled, ViewGroup container) {
final ImageView myImageView;
if (recycled == null) {
myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
} else {
myImageView = (ImageView) recycled;
}
String url = myUrls.get(position);
Glide
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView);
return myImageView;
}
```
Status
------
Version 4 is now released and stable. Updates are released periodically with new features and bug fixes.
Comments/bugs/questions/pull requests are always welcome! Please read [CONTRIBUTING.md][5] on how to report issues.
Compatibility
-------------
* **Minimum Android SDK**: Glide v4 requires a minimum API level of 14.
* **Compile Android SDK**: Glide v4 requires you to compile against API 26 or later.
If you need to support older versions of Android, consider staying on [Glide v3][14], which works on API 10, but is not actively maintained.
* **OkHttp 3.x**: There is an optional dependency available called `okhttp3-integration`, see the [docs page][23].
* **Volley**: There is an optional dependency available called `volley-integration`, see the [docs page][24].
* **Round Pictures**: `CircleImageView`/`CircularImageView`/`RoundedImageView` are known to have [issues][18] with `TransitionDrawable` (`.crossFade()` with `.thumbnail()` or `.placeholder()`) and animated GIFs, use a [`BitmapTransformation`][19] (`.circleCrop()` will be available in v4) or `.dontAnimate()` to fix the issue.
* **Huge Images** (maps, comic strips): Glide can load huge images by downsampling them, but does not support zooming and panning `ImageView`s as they require special resource optimizations (such as tiling) to work without `OutOfMemoryError`s.
Build
-----
Building Glide with gradle is fairly straight forward:
```shell
git clone https://github.com/bumptech/glide.git
cd glide
./gradlew jar
```
**Note**: Make sure your *Android SDK* has the *Android Support Repository* installed, and that your `$ANDROID_HOME` environment
variable is pointing at the SDK or add a `local.properties` file in the root project with a `sdk.dir=...` line.
Samples
-------
Follow the steps in the [Build](#build) section to set up the project and then:
```shell
./gradlew :samples:flickr:run
./gradlew :samples:giphy:run
./gradlew :samples:svg:run
./gradlew :samples:contacturi:run
```
You may also find precompiled APKs on the [releases page][1].
Development
-----------
Follow the steps in the [Build](#build) section to setup the project and then edit the files however you wish.
[Android Studio][26] cleanly imports both Glide's source and tests and is the recommended way to work with Glide.
To open the project in Android Studio:
1. Go to *File* menu or the *Welcome Screen*
2. Click on *Open...*
3. Navigate to Glide's root directory.
4. Select `setting.gradle`
For more details, see the [Contributing docs page][27].
Getting Help
------------
To report a specific problem or feature request, [open a new issue on Github][5]. For questions, suggestions, or
anything else, email [Glide's discussion group][6], or join our IRC channel: [irc.freenode.net#glide-library][13].
Contributing
------------
Before submitting pull requests, contributors must sign Google's [individual contributor license agreement][7].
Thanks
------
* The **Android team** and **Jake Wharton** for the [disk cache implementation][8] Glide's disk cache is based on.
* **Dave Smith** for the [GIF decoder gist][9] Glide's GIF decoder is based on.
* **Chris Banes** for his [gradle-mvn-push][10] script.
* **Corey Hall** for Glide's [amazing logo][11].
* Everyone who has contributed code and reported issues!
Author
------
Sam Judd - @sjudd on GitHub, @samajudd on Twitter
License
-------
BSD, part MIT and Apache 2.0. See the [LICENSE][16] file for details.
Disclaimer
---------
This is not an official Google product.
[1]: https://github.com/bumptech/glide/releases
[2]: https://github.com/bumptech/glide/wiki
[3]: https://bumptech.github.io/glide/ref/javadocs.html
[4]: https://www.jetbrains.com/idea/download/
[5]: https://github.com/bumptech/glide/blob/master/CONTRIBUTING.md
[6]: https://groups.google.com/forum/#!forum/glidelibrary
[7]: https://developers.google.com/open-source/cla/individual
[8]: https://github.com/JakeWharton/DiskLruCache
[9]: https://gist.github.com/devunwired/4479231
[10]: https://github.com/chrisbanes/gradle-mvn-push
[11]: static/glide_logo.png
[12]: https://github.com/bumptech/glide/wiki/Integration-Libraries
[13]: http://webchat.freenode.net/?channels=glide-library
[14]: https://github.com/bumptech/glide/tree/3.0
[15]: https://github.com/bumptech/glide/tree/master
[16]: https://github.com/bumptech/glide/blob/master/LICENSE
[17]: http://bumptech.github.io/glide/dev/snapshots.html
[18]: https://github.com/bumptech/glide/issues?q=is%3Aissue+CircleImageView+OR+CircularImageView+OR+RoundedImageView
[19]: https://github.com/wasabeef/glide-transformations
[20]: https://bumptech.github.io/glide/
[22]: https://muyangmin.github.io/glide-docs-cn/
[23]: http://bumptech.github.io/glide/int/okhttp3.html
[24]: http://bumptech.github.io/glide/int/volley.html
[25]: http://bumptech.github.io/glide/doc/download-setup.html#proguard
[26]: https://developer.android.com/studio/index.html
[27]: http://bumptech.github.io/glide/dev/contributing.html
[28]: http://bumptech.github.io/glide/doc/download-setup.html
================================================
FILE: annotation/.gitignore
================================================
/build
================================================
FILE: annotation/build.gradle.kts
================================================
plugins {
id("java")
}
apply(from = "${rootProject.projectDir}/scripts/upload.gradle.kts")
java {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
================================================
FILE: annotation/compiler/.gitignore
================================================
/build
================================================
FILE: annotation/compiler/build.gradle.kts
================================================
plugins {
id("java")
}
dependencies {
implementation(libs.javapoet)
implementation(libs.guava)
compileOnly(libs.autoservice)
compileOnly(libs.findbugs.jsr305)
implementation(project(":annotation"))
annotationProcessor(libs.autoservice)
}
tasks.withType<Javadoc> {
isFailOnError = false
}
apply(from = "${rootProject.projectDir}/scripts/upload.gradle.kts")
================================================
FILE: annotation/compiler/gradle.properties
================================================
POM_NAME=Glide Annotation processor
POM_ARTIFACT_ID=compiler
POM_PACKAGING=jar
POM_DESCRIPTION=Glide's anntation processor. Should be included in all Applications and in all libraries that use Glide's modules for configuration.
================================================
FILE: annotation/compiler/proguard.pro
================================================
-verbose
# Use ProGuard only to get rid of unused classes
-dontobfuscate
-dontoptimize
-keepattributes *
-keep class !com.bumptech.glide.repackaged.**,com.bumptech.glide.**
# Keep the entry point to this library, see META-INF\services\javax.annotation.processing.Processor
-keep class com.bumptech.glide.annotation.compiler.GlideAnnotationProcessor
# "duplicate definition of library class"
-dontnote sun.applet.**
# "duplicate definition of library class"
-dontnote sun.tools.jar.**
# Reflective accesses in com.google.common.util.concurrent.* and some others
-dontnote com.bumptech.glide.repackaged.com.google.common.**
# com.google.common.collect.* and some others (….common.*.*)
-dontwarn com.google.j2objc.annotations.Weak
# com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
#-dontwarn **
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/AppModuleGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.Excludes;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeSpec.Builder;
import com.squareup.javapoet.WildcardTypeName;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
/**
* Generates a new implementation of a AppGlideModule that calls all included LibraryGlideModules
* and the original AppGlideModule.
*
* <p>The generated class will always call the AppGlideModule last to give it priority over choices
* made or classes registered in LibraryGlideModules.
*
* <p>Android logging is included to allow developers to see exactly which modules are included at
* runtime.
*
* <p>The generated class looks something like this:
*
* <pre>
* <code>
* final class GeneratedAppGlideModuleImpl extends com.bumptech.glide.GeneratedAppGlideModule {
* private final com.bumptech.glide.samples.giphy.GiphyGlideModule appGlideModule;
*
* GeneratedAppGlideModule() {
* appGlideModule = new com.bumptech.glide.samples.giphy.GiphyGlideModule();
* if (android.util.Log.isLoggable("Glide", android.util.Log.DEBUG)) {
* android.util.Log.d("Glide", "Discovered AppGlideModule from annotation:"
* + " com.bumptech.glide.samples.giphy.GiphyGlideModule");
* android.util.Log.d("Glide", "Discovered LibraryGlideModule from annotation:"
* + "com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlideModule");
* }
* }
*
* {@literal @java.lang.Override}
* public void applyOptions(android.content.Context context,
* com.bumptech.glide.GlideBuilder builder) {
* appGlideModule.applyOptions(context, builder);
* }
*
* {@literal @java.lang.Override}
* public void registerComponents(android.content.Context context,
* com.bumptech.glide.Registry registry) {
* new com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlideModule()
* .registerComponents(context, registry);
* appGlideModule.registerComponents(context, registry);
* }
*
* {@literal @java.lang.Override}
* public boolean isManifestParsingEnabled() {
* return appGlideModule.isManifestParsingEnabled();
* }
*
* {@literal @java.lang.Override}
* {@literal @androidx.annotation.NonNull}
* public java.util.Set<java.lang.Class<?>> getExcludedModuleClasses() {
* return appGlideModule.getExcludedModuleClasses();
* }
* }
* </code>
* </pre>
*/
final class AppModuleGenerator {
static final String GENERATED_ROOT_MODULE_PACKAGE_NAME = "com.bumptech.glide";
private static final String GLIDE_LOG_TAG = "Glide";
private static final String GENERATED_APP_MODULE_IMPL_SIMPLE_NAME = "GeneratedAppGlideModuleImpl";
private static final String GENERATED_ROOT_MODULE_SIMPLE_NAME = "GeneratedAppGlideModule";
private final ProcessingEnvironment processingEnv;
private final ProcessorUtil processorUtil;
AppModuleGenerator(ProcessingEnvironment processingEnv, ProcessorUtil processorUtil) {
this.processingEnv = processingEnv;
this.processorUtil = processorUtil;
}
TypeSpec generate(TypeElement appGlideModule, Set<String> libraryGlideModuleClassNames) {
ClassName appGlideModuleClassName = ClassName.get(appGlideModule);
List<String> excludedGlideModuleClassNames = getExcludedGlideModuleClassNames(appGlideModule);
List<String> orderedLibraryGlideModuleClassNames =
new ArrayList<>(libraryGlideModuleClassNames);
Collections.sort(orderedLibraryGlideModuleClassNames);
MethodSpec constructor =
generateConstructor(
appGlideModuleClassName,
orderedLibraryGlideModuleClassNames,
excludedGlideModuleClassNames);
MethodSpec registerComponents =
generateRegisterComponents(
orderedLibraryGlideModuleClassNames, excludedGlideModuleClassNames);
MethodSpec getExcludedModuleClasses =
generateGetExcludedModuleClasses(excludedGlideModuleClassNames);
MethodSpec applyOptions =
MethodSpec.methodBuilder("applyOptions")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addParameter(
ParameterSpec.builder(ClassName.get("android.content", "Context"), "context")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(
ClassName.get("com.bumptech.glide", "GlideBuilder"), "builder")
.addAnnotation(processorUtil.nonNull())
.build())
.addStatement("appGlideModule.applyOptions(context, builder)", appGlideModule)
.build();
MethodSpec isManifestParsingEnabled =
MethodSpec.methodBuilder("isManifestParsingEnabled")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.returns(boolean.class)
.addStatement("return appGlideModule.isManifestParsingEnabled()", appGlideModule)
.build();
Builder builder =
TypeSpec.classBuilder(GENERATED_APP_MODULE_IMPL_SIMPLE_NAME)
.addModifiers(Modifier.FINAL)
.addAnnotation(
AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "$S", "deprecation")
.build())
.superclass(
ClassName.get(
GENERATED_ROOT_MODULE_PACKAGE_NAME, GENERATED_ROOT_MODULE_SIMPLE_NAME))
.addField(appGlideModuleClassName, "appGlideModule", Modifier.PRIVATE, Modifier.FINAL)
.addMethod(constructor)
.addMethod(applyOptions)
.addMethod(registerComponents)
.addMethod(isManifestParsingEnabled)
.addMethod(getExcludedModuleClasses);
ClassName generatedRequestManagerFactoryClassName =
ClassName.get(
RequestManagerFactoryGenerator.GENERATED_REQUEST_MANAGER_FACTORY_PACKAGE_NAME,
RequestManagerFactoryGenerator.GENERATED_REQUEST_MANAGER_FACTORY_SIMPLE_NAME);
builder.addMethod(
MethodSpec.methodBuilder("getRequestManagerFactory")
.addAnnotation(Override.class)
.addAnnotation(processorUtil.nonNull())
.returns(generatedRequestManagerFactoryClassName)
.addStatement("return new $T()", generatedRequestManagerFactoryClassName)
.build());
return builder.build();
}
// TODO: When we drop support for parsing GlideModules from AndroidManifests, remove this method.
private MethodSpec generateGetExcludedModuleClasses(Collection<String> excludedClassNames) {
TypeName wildCardOfObject = WildcardTypeName.subtypeOf(Object.class);
ParameterizedTypeName classOfWildcardOfObjet =
ParameterizedTypeName.get(ClassName.get(Class.class), wildCardOfObject);
ParameterizedTypeName setOfClassOfWildcardOfObject =
ParameterizedTypeName.get(ClassName.get(Set.class), classOfWildcardOfObjet);
ParameterizedTypeName hashSetOfClassOfWildcardOfObject =
ParameterizedTypeName.get(ClassName.get(HashSet.class), classOfWildcardOfObjet);
MethodSpec.Builder builder =
MethodSpec.methodBuilder("getExcludedModuleClasses")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addAnnotation(processorUtil.nonNull())
.returns(setOfClassOfWildcardOfObject);
if (excludedClassNames.isEmpty()) {
builder.addStatement("return $T.emptySet()", Collections.class);
} else {
builder.addStatement(
"$T excludedClasses = new $T()",
setOfClassOfWildcardOfObject,
hashSetOfClassOfWildcardOfObject);
for (String excludedClassName : excludedClassNames) {
// TODO: Remove this when we no longer support manifest parsing.
// Using a Literal ($L) instead of a type ($T) to get a fully qualified import that allows
// us to suppress deprecation warnings. Aimed at deprecated GlideModules.
builder.addStatement("excludedClasses.add($L.class)", excludedClassName);
}
builder.addStatement("return excludedClasses");
}
return builder.build();
}
private MethodSpec generateRegisterComponents(
Collection<String> libraryGlideModuleClassNames,
Collection<String> excludedGlideModuleClassNames) {
MethodSpec.Builder registerComponents =
MethodSpec.methodBuilder("registerComponents")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addParameter(
ParameterSpec.builder(ClassName.get("android.content", "Context"), "context")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(ClassName.get("com.bumptech.glide", "Glide"), "glide")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(ClassName.get("com.bumptech.glide", "Registry"), "registry")
.addAnnotation(processorUtil.nonNull())
.build());
for (String glideModule : libraryGlideModuleClassNames) {
if (excludedGlideModuleClassNames.contains(glideModule)) {
continue;
}
ClassName moduleClassName = ClassName.bestGuess(glideModule);
registerComponents.addStatement(
"new $T().registerComponents(context, glide, registry)", moduleClassName);
}
// Order matters here. The AppGlideModule must be called last.
registerComponents.addStatement("appGlideModule.registerComponents(context, glide, registry)");
return registerComponents.build();
}
private boolean doesAppGlideModuleConstructorAcceptContext(ClassName appGlideModule) {
TypeElement appGlideModuleType =
processingEnv.getElementUtils().getTypeElement(appGlideModule.reflectionName());
for (Element enclosed : appGlideModuleType.getEnclosedElements()) {
if (enclosed.getKind() == ElementKind.CONSTRUCTOR) {
ExecutableElement constructor = (ExecutableElement) enclosed;
List<? extends VariableElement> parameters = constructor.getParameters();
if (parameters.isEmpty()) {
return false;
} else if (parameters.size() > 1) {
throw new IllegalStateException(
"Constructor for "
+ appGlideModule
+ " accepts too many parameters"
+ ", it should accept no parameters, or a single Context");
} else {
VariableElement parameter = parameters.get(0);
TypeMirror parameterType = parameter.asType();
TypeMirror contextType =
processingEnv.getElementUtils().getTypeElement("android.content.Context").asType();
if (!processingEnv.getTypeUtils().isSameType(parameterType, contextType)) {
throw new IllegalStateException("Unrecognized type: " + parameterType);
}
return true;
}
}
}
return false;
}
private MethodSpec generateConstructor(
ClassName appGlideModule,
Collection<String> libraryGlideModuleClassNames,
Collection<String> excludedGlideModuleClassNames) {
MethodSpec.Builder constructorBuilder =
MethodSpec.constructorBuilder()
.addModifiers(Modifier.PUBLIC)
.addParameter(
ParameterSpec.builder(ClassName.get("android.content", "Context"), "context")
.build());
if (doesAppGlideModuleConstructorAcceptContext(appGlideModule)) {
constructorBuilder.addStatement("appGlideModule = new $T(context)", appGlideModule);
} else {
constructorBuilder.addStatement("appGlideModule = new $T()", appGlideModule);
}
ClassName androidLogName = ClassName.get("android.util", "Log");
// Add some log lines to indicate to developers which modules where discovered.
constructorBuilder.beginControlFlow(
"if ($T.isLoggable($S, $T.DEBUG))", androidLogName, GLIDE_LOG_TAG, androidLogName);
constructorBuilder.addStatement(
"$T.d($S, $S)",
androidLogName,
GLIDE_LOG_TAG,
"Discovered AppGlideModule from annotation: " + appGlideModule);
// Excluded GlideModule classes from the manifest are logged in Glide's singleton.
for (String glideModule : libraryGlideModuleClassNames) {
if (excludedGlideModuleClassNames.contains(glideModule)) {
constructorBuilder.addStatement(
"$T.d($S, $S)",
androidLogName,
GLIDE_LOG_TAG,
"AppGlideModule excludes LibraryGlideModule from annotation: " + glideModule);
} else {
constructorBuilder.addStatement(
"$T.d($S, $S)",
androidLogName,
GLIDE_LOG_TAG,
"Discovered LibraryGlideModule from annotation: " + glideModule);
}
}
constructorBuilder.endControlFlow();
return constructorBuilder.build();
}
private List<String> getExcludedGlideModuleClassNames(TypeElement appGlideModule) {
Set<String> names =
processorUtil.findClassValuesFromAnnotationOnClassAsNames(appGlideModule, Excludes.class);
List<String> result = new ArrayList<>(names);
Collections.sort(result);
return result;
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/AppModuleProcessor.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideModule;
import com.squareup.javapoet.TypeSpec;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement;
/**
* Runs the final steps of Glide's annotation process and generates the combined {@code
* AppGlideModule}, {@code com.bumptech.glide.Glide}, {@code com.bumptech.glide.RequestManager}, and
* {@code com.bumptech.glide.request.RequestOptions} classes.
*/
final class AppModuleProcessor {
private static final String COMPILER_PACKAGE_NAME =
GlideAnnotationProcessor.class.getPackage().getName();
private final ProcessingEnvironment processingEnv;
private final ProcessorUtil processorUtil;
private final List<TypeElement> appGlideModules = new ArrayList<>();
private final RequestOptionsGenerator requestOptionsGenerator;
private final RequestManagerGenerator requestManagerGenerator;
private final AppModuleGenerator appModuleGenerator;
private final RequestBuilderGenerator requestBuilderGenerator;
private final RequestManagerFactoryGenerator requestManagerFactoryGenerator;
private final GlideGenerator glideGenerator;
AppModuleProcessor(ProcessingEnvironment processingEnv, ProcessorUtil processorUtil) {
this.processingEnv = processingEnv;
this.processorUtil = processorUtil;
appModuleGenerator = new AppModuleGenerator(processingEnv, processorUtil);
requestOptionsGenerator = new RequestOptionsGenerator(processingEnv, processorUtil);
requestManagerGenerator = new RequestManagerGenerator(processingEnv, processorUtil);
requestManagerFactoryGenerator =
new RequestManagerFactoryGenerator(processingEnv, processorUtil);
glideGenerator = new GlideGenerator(processingEnv, processorUtil);
requestBuilderGenerator = new RequestBuilderGenerator(processingEnv, processorUtil);
}
void processModules(Set<? extends TypeElement> set, RoundEnvironment env) {
for (TypeElement element : processorUtil.getElementsFor(GlideModule.class, env)) {
if (processorUtil.isAppGlideModule(element)) {
appGlideModules.add(element);
}
}
processorUtil.debugLog("got app modules: " + appGlideModules);
if (appGlideModules.size() > 1) {
throw new IllegalStateException(
"You cannot have more than one AppGlideModule, found: " + appGlideModules);
}
}
boolean maybeWriteAppModule() {
// appGlideModules is added to in order to catch errors where multiple AppGlideModules may be
// present for a single application or library. Because we only add to appGlideModules, we use
// isGeneratedAppGlideModuleWritten to make sure the GeneratedAppGlideModule is written at
// most once.
if (appGlideModules.isEmpty()) {
return false;
}
TypeElement appModule = appGlideModules.get(0);
processorUtil.debugLog("Processing app module: " + appModule);
// If this package is null, it means there are no classes with this package name. One way this
// could happen is if we process an annotation and reach this point without writing something
// to the package. We do not error check here because that shouldn't happen with the
// current implementation.
PackageElement glideGenPackage =
processingEnv.getElementUtils().getPackageElement(COMPILER_PACKAGE_NAME);
FoundIndexedClassNames indexedClassNames = getIndexedClassNames(glideGenPackage);
// Write all generated code to the package containing the AppGlideModule. Doing so fixes
// classpath collisions if more than one Application containing a AppGlideModule is included
// in a project.
String generatedCodePackageName = appModule.getEnclosingElement().toString();
TypeSpec generatedRequestOptions =
requestOptionsGenerator.generate(generatedCodePackageName, indexedClassNames.extensions);
writeRequestOptions(generatedCodePackageName, generatedRequestOptions);
TypeSpec generatedRequestBuilder =
requestBuilderGenerator.generate(
generatedCodePackageName, indexedClassNames.extensions, generatedRequestOptions);
writeRequestBuilder(generatedCodePackageName, generatedRequestBuilder);
TypeSpec requestManager =
requestManagerGenerator.generate(
generatedCodePackageName,
generatedRequestOptions,
generatedRequestBuilder,
indexedClassNames.extensions);
writeRequestManager(generatedCodePackageName, requestManager);
TypeSpec requestManagerFactory =
requestManagerFactoryGenerator.generate(generatedCodePackageName, requestManager);
writeRequestManagerFactory(requestManagerFactory);
TypeSpec glide =
glideGenerator.generate(generatedCodePackageName, getGlideName(appModule), requestManager);
writeGlide(generatedCodePackageName, glide);
TypeSpec generatedAppGlideModule =
appModuleGenerator.generate(appModule, indexedClassNames.glideModules);
writeAppModule(generatedAppGlideModule);
processorUtil.infoLog("Wrote GeneratedAppGlideModule with: " + indexedClassNames.glideModules);
return true;
}
private String getGlideName(TypeElement appModule) {
return appModule.getAnnotation(GlideModule.class).glideName();
}
@SuppressWarnings("unchecked")
private FoundIndexedClassNames getIndexedClassNames(PackageElement glideGenPackage) {
Set<String> glideModules = new HashSet<>();
Set<String> extensions = new HashSet<>();
List<? extends Element> glideGeneratedElements = glideGenPackage.getEnclosedElements();
for (Element indexer : glideGeneratedElements) {
Index annotation = indexer.getAnnotation(Index.class);
// If the annotation is null, it means we've come across another class in the same package
// that we can safely ignore.
if (annotation != null) {
Collections.addAll(glideModules, annotation.modules());
Collections.addAll(extensions, annotation.extensions());
}
}
processorUtil.debugLog("Found GlideModules: " + glideModules);
return new FoundIndexedClassNames(glideModules, extensions);
}
private void writeGlide(String packageName, TypeSpec glide) {
processorUtil.writeClass(packageName, glide);
}
private void writeRequestManager(String packageName, TypeSpec requestManager) {
processorUtil.writeClass(packageName, requestManager);
}
// We dont' care about collisions in IDEs since this class isn't an API class.
private void writeRequestManagerFactory(TypeSpec requestManagerFactory) {
processorUtil.writeClass(
AppModuleGenerator.GENERATED_ROOT_MODULE_PACKAGE_NAME, requestManagerFactory);
}
// The app module we generate subclasses a package private class. We don't care about classpath
// collisions in IDEs since this class isn't an API class.
private void writeAppModule(TypeSpec appModule) {
processorUtil.writeClass(AppModuleGenerator.GENERATED_ROOT_MODULE_PACKAGE_NAME, appModule);
}
private void writeRequestOptions(String packageName, TypeSpec requestOptions) {
processorUtil.writeClass(packageName, requestOptions);
}
private void writeRequestBuilder(String packageName, TypeSpec requestBuilder) {
processorUtil.writeClass(packageName, requestBuilder);
}
private static final class FoundIndexedClassNames {
private final Set<String> glideModules;
private final Set<String> extensions;
private FoundIndexedClassNames(Set<String> glideModules, Set<String> extensions) {
this.glideModules = glideModules;
this.extensions = extensions;
}
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/ExtensionProcessor.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideExtension;
import com.squareup.javapoet.TypeSpec;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.TypeElement;
/**
* Writes Indexer classes annotated with {@link Index} for all classes found annotated with {@link
* GlideExtension}.
*/
final class ExtensionProcessor {
private final ProcessorUtil processorUtil;
private final IndexerGenerator indexerGenerator;
private final GlideExtensionValidator extensionValidator;
ExtensionProcessor(
ProcessingEnvironment processingEnvironment,
ProcessorUtil processorUtil,
IndexerGenerator indexerGenerator) {
this.processorUtil = processorUtil;
this.indexerGenerator = indexerGenerator;
extensionValidator = new GlideExtensionValidator(processingEnvironment, processorUtil);
}
boolean processExtensions(RoundEnvironment env) {
List<TypeElement> elements = processorUtil.getElementsFor(GlideExtension.class, env);
processorUtil.debugLog("Processing types : " + elements);
for (TypeElement typeElement : elements) {
extensionValidator.validateExtension(typeElement);
processorUtil.debugLog("Processing elements: " + typeElement.getEnclosedElements());
}
if (elements.isEmpty()) {
return false;
}
TypeSpec spec = indexerGenerator.generate(elements);
processorUtil.writeIndexer(spec);
return true;
}
Set<String> getSupportedAnnotationTypes() {
return Collections.singleton(GlideExtension.class.getName());
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideAnnotationProcessor.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideType;
import com.google.auto.service.AutoService;
import java.util.HashSet;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;
// Links in Javadoc will work due to build setup, even though there is no direct dependency here.
/**
* Generates classes based on Glide's annotations that configure Glide, add support for additional
* resource types, and/or extend Glide's API.
*
* <p>This processor discovers all {@code AppGlideModule} and {@code LibraryGlideModule}
* implementations that are annotated with {@link com.bumptech.glide.annotation.GlideModule}. Any
* implementations missing the annotation will be ignored.
*
* <p>This processor also discovers all {@link com.bumptech.glide.annotation.GlideExtension}
* annotated classes.
*
* <p>Multiple classes are generated by this processor:
*
* <ul>
* <li>For {@code LibraryGlideModule}s - A GlideIndexer class in a specific package that will
* later be used by the processor to discover all {@code LibraryGlideModule} classes.
* <li>For {@code AppGlideModule}s - A single {@code AppGlideModule} implementation ({@code
* com.bumptech.glide.GeneratedAppGlideModule}) that calls all {@code LibraryGlideModule}s and
* the original {@code AppGlideModule} in the correct order when Glide is initialized.
* <li>{@link com.bumptech.glide.annotation.GlideExtension}s -
* <ul>
* <li>A {@code com.bumptech.glide.request.RequestOptions} implementation that contains
* static versions of all builder methods in the base class and both static and instance
* versions of methods in all {@link com.bumptech.glide.annotation.GlideExtension}s.
* <li>If one or more methods in one or more {@link
* com.bumptech.glide.annotation.GlideExtension} annotated classes are annotated with
* {@link GlideType}:
* <ul>
* <li>A {@code com.bumptech.glide.RequestManager} implementation containing a
* generated method for each method annotated with {@link GlideType}.
* <li>A {@code
* com.bumptech.glide.manager.RequestManagerRetriever.RequestManagerFactory}
* implementation that produces the generated {@code
* com.bumptech.glide.RequestManager}s.
* <li>A {@code com.bumptech.glide.Glide} look-alike that implements all static
* methods in the {@code com.bumptech.glide.Glide} singleton and returns the
* generated {@code com.bumptech.glide.RequestManager} implementation when
* appropriate.
* </ul>
* </ul>
* </ul>
*
* <p>{@code AppGlideModule} implementations must only be included in applications, not in
* libraries. There must be exactly one {@code AppGlideModule} implementation per Application. The
* {@code AppGlideModule} class is used as a signal that all modules have been found and that the
* final merged {@code com.bumptech.glide.GeneratedAppGlideModule} impl can be created.
*/
@AutoService(Processor.class)
public final class GlideAnnotationProcessor extends AbstractProcessor {
static final boolean DEBUG = false;
private ProcessorUtil processorUtil;
private LibraryModuleProcessor libraryModuleProcessor;
private AppModuleProcessor appModuleProcessor;
private boolean isGeneratedAppGlideModuleWritten;
private ExtensionProcessor extensionProcessor;
@Override
public synchronized void init(ProcessingEnvironment processingEnvironment) {
super.init(processingEnvironment);
processorUtil = new ProcessorUtil(processingEnvironment);
IndexerGenerator indexerGenerator = new IndexerGenerator(processorUtil);
libraryModuleProcessor = new LibraryModuleProcessor(processorUtil, indexerGenerator);
appModuleProcessor = new AppModuleProcessor(processingEnvironment, processorUtil);
extensionProcessor =
new ExtensionProcessor(processingEnvironment, processorUtil, indexerGenerator);
}
@Override
public Set<String> getSupportedAnnotationTypes() {
Set<String> result = new HashSet<>();
result.addAll(libraryModuleProcessor.getSupportedAnnotationTypes());
result.addAll(extensionProcessor.getSupportedAnnotationTypes());
return result;
}
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latestSupported();
}
/**
* Each round we do the following:
*
* <ol>
* <li>Find all {@code AppGlideModule}s and save them to an instance variable (throw if > 1).
* <li>Find all {@code LibraryGlideModule}s
* <li>For each {@code LibraryGlideModule}, write an {@code Indexer} with an Annotation with the
* class name.
* <li>If we wrote any {@code Indexer}s, return and wait for the next round.
* <li>If we didn't write any {@code Indexer}s and there is a {@code AppGlideModule}, write the
* {@code GeneratedAppGlideModule}. Once the {@code GeneratedAppGlideModule} is written, we
* expect to be finished. Any further generation of related classes will result in errors.
* </ol>
*/
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment env) {
processorUtil.process();
boolean newModulesWritten = libraryModuleProcessor.processModules(env);
boolean newExtensionWritten = extensionProcessor.processExtensions(env);
appModuleProcessor.processModules(set, env);
if (newExtensionWritten || newModulesWritten) {
if (isGeneratedAppGlideModuleWritten) {
throw new IllegalStateException("Cannot process annotations after writing AppGlideModule");
}
return false;
}
if (!isGeneratedAppGlideModuleWritten) {
isGeneratedAppGlideModuleWritten = appModuleProcessor.maybeWriteAppModule();
}
return false;
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideExtensionValidator.java
================================================
package com.bumptech.glide.annotation.compiler;
import static com.bumptech.glide.annotation.compiler.ProcessorUtil.nonNulls;
import com.bumptech.glide.annotation.GlideOption;
import com.bumptech.glide.annotation.GlideType;
import com.google.common.base.Function;
import com.google.common.collect.FluentIterable;
import com.squareup.javapoet.ClassName;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeMirror;
import javax.tools.Diagnostic.Kind;
/**
* Validates that classes annotated with {@link com.bumptech.glide.annotation.GlideExtension}
* contains methods with the expected format.
*
* <p>Validation is performed so that errors can be found when a library is compiled. Without
* validation, an error written in to a library wouldn't be found until Glide tried to generate code
* for an Application.
*/
final class GlideExtensionValidator {
private final ProcessingEnvironment processingEnvironment;
private final ProcessorUtil processorUtil;
GlideExtensionValidator(
ProcessingEnvironment processingEnvironment, ProcessorUtil processorUtil) {
this.processingEnvironment = processingEnvironment;
this.processorUtil = processorUtil;
}
void validateExtension(TypeElement typeElement) {
if (!typeElement.getModifiers().contains(Modifier.PUBLIC)) {
throw new IllegalArgumentException(
"RequestOptionsExtensions must be public, including: " + getName(typeElement));
}
for (Element element : typeElement.getEnclosedElements()) {
if (element.getKind() == ElementKind.CONSTRUCTOR) {
validateExtensionConstructor(element);
} else if (element.getKind() == ElementKind.METHOD) {
ExecutableElement executableElement = (ExecutableElement) element;
if (executableElement.getAnnotation(GlideOption.class) != null) {
validateGlideOption(executableElement);
} else if (executableElement.getAnnotation(GlideType.class) != null) {
validateGlideType(executableElement);
}
}
}
}
private static String getQualifiedMethodName(ExecutableElement executableElement) {
return getEnclosingClassName(executableElement) + "#" + getName(executableElement);
}
private static String getEnclosingClassName(Element element) {
return element.getEnclosingElement().toString();
}
private static String getName(Element element) {
return element.toString();
}
private static void validateExtensionConstructor(Element element) {
if (!element.getModifiers().contains(Modifier.PRIVATE)) {
throw new IllegalArgumentException(
"RequestOptionsExtensions must be public, with private constructors and only static"
+ " methods. Found a non-private constructor in: "
+ getEnclosingClassName(element));
}
ExecutableElement executableElement = (ExecutableElement) element;
if (!executableElement.getParameters().isEmpty()) {
throw new IllegalArgumentException(
"RequestOptionsExtensions must be public, with private constructors and only static"
+ " methods. Found parameters in the constructor of: "
+ getEnclosingClassName(element));
}
}
private void validateGlideOption(ExecutableElement executableElement) {
validateGlideOptionAnnotations(executableElement);
validateGlideOptionParameters(executableElement);
TypeMirror returnType = executableElement.getReturnType();
if (!isBaseRequestOptions(returnType)) {
throw new IllegalArgumentException(
"@GlideOption methods should return a"
+ " BaseRequestOptions<?> object, but "
+ getQualifiedMethodName(executableElement)
+ " returns "
+ returnType
+ ". If you're using old style @GlideOption methods, your"
+ " method may have a void return type, but doing so is deprecated and support will"
+ " be removed in a future version");
}
validateGlideOptionOverride(executableElement);
}
private void validateGlideOptionAnnotations(ExecutableElement executableElement) {
validateAnnotatedNonNull(executableElement);
}
private static void validateGlideOptionParameters(ExecutableElement executableElement) {
if (executableElement.getParameters().isEmpty()) {
throw new IllegalArgumentException(
"@GlideOption methods must take a "
+ "BaseRequestOptions<?> object as their first parameter, but "
+ getQualifiedMethodName(executableElement)
+ " has none");
}
VariableElement first = executableElement.getParameters().get(0);
TypeMirror expected = first.asType();
if (!isBaseRequestOptions(expected)) {
throw new IllegalArgumentException(
"@GlideOption methods must take a"
+ " BaseRequestOptions<?> object as their first parameter, but the first parameter"
+ " in "
+ getQualifiedMethodName(executableElement)
+ " is "
+ expected);
}
}
private static boolean isBaseRequestOptions(TypeMirror typeMirror) {
return typeMirror.toString().equals("com.bumptech.glide.request.BaseRequestOptions<?>");
}
private void validateGlideOptionOverride(ExecutableElement element) {
int overrideType = processorUtil.getOverrideType(element);
boolean isOverridingBaseRequestOptionsMethod = isMethodInBaseRequestOptions(element);
if (isOverridingBaseRequestOptionsMethod && overrideType == GlideOption.OVERRIDE_NONE) {
throw new IllegalArgumentException(
"Accidentally attempting to override a method in"
+ " BaseRequestOptions. Add an 'override' value in the @GlideOption annotation"
+ " if this is intentional. Offending method: "
+ getQualifiedMethodName(element));
} else if (!isOverridingBaseRequestOptionsMethod && overrideType != GlideOption.OVERRIDE_NONE) {
throw new IllegalArgumentException(
"Requested to override an existing method in"
+ " BaseRequestOptions, but no such method was found. Offending method: "
+ getQualifiedMethodName(element));
}
}
private boolean isMethodInBaseRequestOptions(ExecutableElement toFind) {
// toFind is a method in a GlideExtension whose first argument is a BaseRequestOptions<?> type.
// Since we're comparing against methods in BaseRequestOptions itself, we need to drop that
// first type.
TypeElement requestOptionsType =
processingEnvironment
.getElementUtils()
.getTypeElement(RequestOptionsGenerator.BASE_REQUEST_OPTIONS_QUALIFIED_NAME);
List<String> toFindParameterNames = getComparableParameterNames(toFind, true /*skipFirst*/);
String toFindSimpleName = toFind.getSimpleName().toString();
for (Element element : requestOptionsType.getEnclosedElements()) {
if (element.getKind() != ElementKind.METHOD) {
continue;
}
ExecutableElement inBase = (ExecutableElement) element;
if (toFindSimpleName.equals(inBase.getSimpleName().toString())) {
List<String> parameterNamesInBase =
getComparableParameterNames(inBase, false /*skipFirst*/);
if (parameterNamesInBase.equals(toFindParameterNames)) {
return true;
}
}
}
return false;
}
private static List<String> getComparableParameterNames(
ExecutableElement element, boolean skipFirst) {
List<? extends VariableElement> parameters = element.getParameters();
if (skipFirst) {
parameters = parameters.subList(1, parameters.size());
}
List<String> result = new ArrayList<>(parameters.size());
for (VariableElement parameter : parameters) {
result.add(parameter.asType().toString());
}
return result;
}
private void validateGlideType(ExecutableElement executableElement) {
TypeMirror returnType = executableElement.getReturnType();
validateGlideTypeAnnotations(executableElement);
if (!isRequestBuilder(returnType) || !typeMatchesExpected(returnType, executableElement)) {
String expectedClassName = getGlideTypeValue(executableElement);
throw new IllegalArgumentException(
"@GlideType methods should return a RequestBuilder<"
+ expectedClassName
+ "> object, but "
+ getQualifiedMethodName(executableElement)
+ " returns: "
+ returnType
+ ". If you're using old style @GlideType methods, your"
+ " method may have a void return type, but doing so is deprecated and support will"
+ " be removed in a future version");
}
validateGlideTypeParameters(executableElement);
}
private String getGlideTypeValue(ExecutableElement executableElement) {
return processorUtil
.findClassValuesFromAnnotationOnClassAsNames(executableElement, GlideType.class)
.iterator()
.next();
}
private boolean typeMatchesExpected(TypeMirror returnType, ExecutableElement executableElement) {
if (!(returnType instanceof DeclaredType)) {
return false;
}
List<? extends TypeMirror> typeArguments = ((DeclaredType) returnType).getTypeArguments();
if (typeArguments.size() != 1) {
return false;
}
TypeMirror argument = typeArguments.get(0);
String expected = getGlideTypeValue(executableElement);
return argument.toString().equals(expected);
}
private boolean isRequestBuilder(TypeMirror typeMirror) {
TypeMirror toCompare = processingEnvironment.getTypeUtils().erasure(typeMirror);
return toCompare.toString().equals("com.bumptech.glide.RequestBuilder");
}
private static void validateGlideTypeParameters(ExecutableElement executableElement) {
if (executableElement.getParameters().size() != 1) {
throw new IllegalArgumentException(
"@GlideType methods must take a"
+ " RequestBuilder object as their first and only parameter, but given multiple for: "
+ getQualifiedMethodName(executableElement));
}
VariableElement first = executableElement.getParameters().get(0);
TypeMirror argumentType = first.asType();
if (!argumentType.toString().startsWith("com.bumptech.glide.RequestBuilder")) {
throw new IllegalArgumentException(
"@GlideType methods must take a"
+ " RequestBuilder object as their first and only parameter, but given: "
+ argumentType
+ " for: "
+ getQualifiedMethodName(executableElement));
}
}
private void validateGlideTypeAnnotations(ExecutableElement executableElement) {
validateAnnotatedNonNull(executableElement);
}
private void validateAnnotatedNonNull(ExecutableElement executableElement) {
Set<String> annotationNames =
FluentIterable.from(executableElement.getAnnotationMirrors())
.transform(
new Function<AnnotationMirror, String>() {
@Override
public String apply(AnnotationMirror input) {
return input.getAnnotationType().asElement().toString();
}
})
.toSet();
boolean noNonNull = true;
for (ClassName nonNull : nonNulls()) {
if (annotationNames.contains(nonNull.reflectionName())) {
noNonNull = false;
break;
}
}
if (noNonNull) {
processingEnvironment
.getMessager()
.printMessage(
Kind.WARNING,
getQualifiedMethodName(executableElement)
+ " is missing the "
+ processorUtil.nonNull().reflectionName()
+ " annotation,"
+ " please add it to ensure that your extension methods are always returning"
+ " non-null values");
}
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideExtension;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.MethodSpec.Builder;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeSpec;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
/**
* Generates a Glide look-alike that acts as the entry point to the generated API
* (GlideApp.with(...)).
*
* <p>Generated {@code com.bumptech.glide.Glide} look-alikes look like this (note that the name is
* configurable in {@link com.bumptech.glide.annotation.GlideModule}):
*
* <pre>
* <code>
* public final class GlideApp {
* private GiphyGlide() {
* }
*
* public static File getPhotoCacheDir(Context context) {
* return Glide.getPhotoCacheDir(context);
* }
*
* public static File getPhotoCacheDir(Context context, String cacheName) {
* return Glide.getPhotoCacheDir(context, cacheName);
* }
*
* public static Glide get(Context context) {
* return Glide.get(context);
* }
*
* public static void tearDown() {
* Glide.tearDown();
* }
*
* public static GeneratedRequestManager with(Context context) {
* return (GeneratedRequestManager) Glide.with(context);
* }
*
* public static GeneratedRequestManager with(Activity activity) {
* return (GeneratedRequestManager) Glide.with(activity);
* }
*
* public static GeneratedRequestManager with(FragmentActivity activity) {
* return (GeneratedRequestManager) Glide.with(activity);
* }
*
* public static GeneratedRequestManager with(Fragment fragment) {
* return (GeneratedRequestManager) Glide.with(fragment);
* }
*
* public static GeneratedRequestManager with(androidx.fragment.app.Fragment fragment) {
* return (GeneratedRequestManager) Glide.with(fragment);
* }
* </code>
* </pre>
*/
final class GlideGenerator {
private static final String GLIDE_QUALIFIED_NAME = "com.bumptech.glide.Glide";
private static final String REQUEST_MANAGER_QUALIFIED_NAME = "com.bumptech.glide.RequestManager";
private static final String SUPPRESS_LINT_PACKAGE_NAME = "android.annotation";
private static final String SUPPRESS_LINT_CLASS_NAME = "SuppressLint";
private final ProcessingEnvironment processingEnv;
private final ProcessorUtil processorUtil;
private final TypeElement glideType;
private final TypeElement requestManagerType;
GlideGenerator(ProcessingEnvironment processingEnv, ProcessorUtil processorUtil) {
this.processingEnv = processingEnv;
this.processorUtil = processorUtil;
Elements elementUtils = processingEnv.getElementUtils();
requestManagerType = elementUtils.getTypeElement(REQUEST_MANAGER_QUALIFIED_NAME);
glideType = elementUtils.getTypeElement(GLIDE_QUALIFIED_NAME);
}
TypeSpec generate(
String generatedCodePackageName, String glideName, TypeSpec generatedRequestManager) {
return TypeSpec.classBuilder(glideName)
.addJavadoc(
"The entry point for interacting with Glide for Applications\n"
+ "\n"
+ "<p>Includes all generated APIs from all\n"
+ "{@link $T}s in source and dependent libraries.\n"
+ "\n"
+ "<p>This class is generated and should not be modified"
+ "\n"
+ "@see $T\n",
GlideExtension.class,
glideType)
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addMethod(MethodSpec.constructorBuilder().addModifiers(Modifier.PRIVATE).build())
.addMethods(
generateOverridesForGlideMethods(generatedCodePackageName, generatedRequestManager))
.build();
}
private List<MethodSpec> generateOverridesForGlideMethods(
final String generatedCodePackageName, final TypeSpec generatedRequestManager) {
return Lists.transform(
discoverGlideMethodsToOverride(),
new Function<ExecutableElement, MethodSpec>() {
@Override
public MethodSpec apply(ExecutableElement input) {
if (isGlideWithMethod(input)) {
return overrideGlideWithMethod(
generatedCodePackageName, generatedRequestManager, input);
} else {
return overrideGlideStaticMethod(input);
}
}
});
}
private MethodSpec overrideGlideStaticMethod(ExecutableElement methodToOverride) {
List<ParameterSpec> parameters = processorUtil.getParameters(methodToOverride);
TypeElement element =
(TypeElement) processingEnv.getTypeUtils().asElement(methodToOverride.getReturnType());
MethodSpec.Builder builder =
MethodSpec.methodBuilder(methodToOverride.getSimpleName().toString())
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addJavadoc(processorUtil.generateSeeMethodJavadoc(methodToOverride))
.addParameters(parameters);
addReturnAnnotations(builder, methodToOverride);
boolean returnsValue = element != null;
if (returnsValue) {
builder.returns(ClassName.get(element));
}
StringBuilder code = new StringBuilder(returnsValue ? "return " : "");
code.append("$T.$N(");
List<Object> args = new ArrayList<>();
args.add(ClassName.get(glideType));
args.add(methodToOverride.getSimpleName());
if (!parameters.isEmpty()) {
for (ParameterSpec param : parameters) {
code.append("$L, ");
args.add(param.name);
}
code = new StringBuilder(code.substring(0, code.length() - 2));
}
code.append(")");
builder.addStatement(code.toString(), args.toArray(new Object[0]));
return builder.build();
}
private Builder addReturnAnnotations(Builder builder, ExecutableElement methodToOverride) {
Elements elements = processingEnv.getElementUtils();
TypeElement visibleForTestingTypeElement =
elements.getTypeElement(processorUtil.visibleForTesting().reflectionName());
String visibleForTestingTypeQualifiedName = visibleForTestingTypeElement.toString();
for (AnnotationMirror mirror : methodToOverride.getAnnotationMirrors()) {
builder.addAnnotation(AnnotationSpec.get(mirror));
// Suppress a lint warning if we're overriding a VisibleForTesting method.
// See #1977.
String annotationQualifiedName = mirror.getAnnotationType().toString();
if (annotationQualifiedName.equals(visibleForTestingTypeQualifiedName)) {
builder.addAnnotation(
AnnotationSpec.builder(
ClassName.get(SUPPRESS_LINT_PACKAGE_NAME, SUPPRESS_LINT_CLASS_NAME))
.addMember("value", "$S", "VisibleForTests")
.build());
}
}
return builder;
}
private List<ExecutableElement> discoverGlideMethodsToOverride() {
return processorUtil.findStaticMethods(glideType);
}
private boolean isGlideWithMethod(ExecutableElement element) {
return processorUtil.isReturnValueTypeMatching(element, requestManagerType);
}
private MethodSpec overrideGlideWithMethod(
String packageName, TypeSpec generatedRequestManager, ExecutableElement methodToOverride) {
ClassName generatedRequestManagerClassName =
ClassName.get(packageName, generatedRequestManager.name);
List<ParameterSpec> parameters = processorUtil.getParameters(methodToOverride);
Preconditions.checkArgument(
parameters.size() == 1, "Expected size of 1, but got %s", methodToOverride);
ParameterSpec parameter = parameters.iterator().next();
Builder builder =
MethodSpec.methodBuilder(methodToOverride.getSimpleName().toString())
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addJavadoc(processorUtil.generateSeeMethodJavadoc(methodToOverride))
.addParameters(parameters)
.returns(generatedRequestManagerClassName)
.addStatement(
"return ($T) $T.$N($L)",
generatedRequestManagerClassName,
glideType,
methodToOverride.getSimpleName().toString(),
parameter.name);
return addReturnAnnotations(builder, methodToOverride).build();
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/IndexerGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideModule;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeSpec;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
/**
* Generates an empty class with an annotation containing the class names of one or more
* LibraryGlideModules and/or one or more GlideExtensions.
*
* <p>We use a separate class so that LibraryGlideModules and GlideExtensions written in libraries
* can be bundled into an AAR and later retrieved by the annotation processor when it processes the
* AppGlideModule in an application.
*
* <p>The output file generated by this class with a LibraryGlideModule looks like this:
*
* <pre>
* <code>
* {@literal @com.bumptech.glide.annotation.compiler.Index(}
* modules = "com.bumptech.glide.integration.okhttp3.OkHttpLibraryGlideModule"
* )
* public class Indexer_GlideModule_com_bumptech_glide_integration_okhttp3_OkHttpLibraryGlideModule
* {
* }
* </code>
* </pre>
*
* <p>The output file generated by this class with a GlideExtension looks like this:
*
* <pre>
* <code>
* {@literal @com.bumptech.glide.annotation.compiler.Index(}
* extensions = "com.bumptech.glide.integration.gif.GifOptions"
* )
* public class Indexer_GlideExtension_com_bumptech_glide_integration_gif_GifOptions {
* }
* </code>
* </pre>
*/
final class IndexerGenerator {
private static final String INDEXER_NAME_PREFIX = "GlideIndexer_";
private static final int MAXIMUM_FILE_NAME_LENGTH = 255;
private final ProcessorUtil processorUtil;
IndexerGenerator(ProcessorUtil processorUtil) {
this.processorUtil = processorUtil;
}
TypeSpec generate(List<TypeElement> types) {
List<TypeElement> modules = new ArrayList<>();
List<TypeElement> extensions = new ArrayList<>();
for (TypeElement element : types) {
if (processorUtil.isExtension(element)) {
extensions.add(element);
} else if (processorUtil.isLibraryGlideModule(element)) {
modules.add(element);
} else {
throw new IllegalArgumentException("Unrecognized type: " + element);
}
}
if (!modules.isEmpty() && !extensions.isEmpty()) {
throw new IllegalArgumentException(
"Given both modules and extensions, expected one or the "
+ "other. Modules: "
+ modules
+ " Extensions: "
+ extensions);
}
if (!modules.isEmpty()) {
return generate(types, GlideModule.class);
} else {
return generate(types, GlideExtension.class);
}
}
private TypeSpec generate(
List<TypeElement> libraryModules, Class<? extends Annotation> annotation) {
AnnotationSpec.Builder annotationBuilder = AnnotationSpec.builder(Index.class);
String value = getAnnotationValue(annotation);
for (TypeElement childModule : libraryModules) {
annotationBuilder.addMember(value, "$S", ClassName.get(childModule).toString());
}
StringBuilder indexerNameBuilder =
new StringBuilder(INDEXER_NAME_PREFIX + annotation.getSimpleName() + "_");
for (TypeElement element : libraryModules) {
indexerNameBuilder.append(element.getQualifiedName().toString().replace(".", "_"));
indexerNameBuilder.append("_");
}
indexerNameBuilder =
new StringBuilder(indexerNameBuilder.substring(0, indexerNameBuilder.length() - 1));
String indexerName = indexerNameBuilder.toString();
// If the indexer name has too many packages/modules, it can exceed the file name length
// allowed by the file system, which can break compilation. To avoid that, fall back to a
// deterministic UUID.
if (indexerName.length() >= (MAXIMUM_FILE_NAME_LENGTH - INDEXER_NAME_PREFIX.length())) {
indexerName =
INDEXER_NAME_PREFIX
+ UUID.nameUUIDFromBytes(indexerName.getBytes()).toString().replace("-", "_");
}
return TypeSpec.classBuilder(indexerName)
.addAnnotation(annotationBuilder.build())
.addModifiers(Modifier.PUBLIC)
.build();
}
private static String getAnnotationValue(Class<? extends Annotation> annotation) {
if (annotation == GlideModule.class) {
return "modules";
} else if (annotation == GlideExtension.class) {
return "extensions";
} else {
throw new IllegalArgumentException("Unrecognized annotation: " + annotation);
}
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/LibraryModuleProcessor.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideModule;
import com.squareup.javapoet.TypeSpec;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.TypeElement;
/** Generates Indexer classes annotated with {@link Index} for all {@code LibraryGlideModule}s. */
final class LibraryModuleProcessor {
private final ProcessorUtil processorUtil;
private final IndexerGenerator indexerGenerator;
LibraryModuleProcessor(ProcessorUtil processorUtil, IndexerGenerator indexerGenerator) {
this.processorUtil = processorUtil;
this.indexerGenerator = indexerGenerator;
}
boolean processModules(RoundEnvironment env) {
// Order matters here, if we find an Indexer below, we return before writing the root module.
// If we fail to add to appModules before then, we might accidentally skip a valid RootModule.
List<TypeElement> libraryGlideModules = new ArrayList<>();
for (TypeElement element : processorUtil.getElementsFor(GlideModule.class, env)) {
// Root elements are added separately and must be checked separately because they're sub
// classes of LibraryGlideModules.
if (processorUtil.isAppGlideModule(element)) {
continue;
} else if (!processorUtil.isLibraryGlideModule(element)) {
throw new IllegalStateException(
"@GlideModule can only be applied to LibraryGlideModule"
+ " and AppGlideModule implementations, not: "
+ element);
}
libraryGlideModules.add(element);
}
processorUtil.debugLog("got child modules: " + libraryGlideModules);
if (libraryGlideModules.isEmpty()) {
return false;
}
TypeSpec indexer = indexerGenerator.generate(libraryGlideModules);
processorUtil.writeIndexer(indexer);
processorUtil.debugLog(
"Wrote an Indexer this round, skipping the app module to ensure all "
+ "indexers are found");
// If I write an Indexer in a round in the target package, then try to find all classes in
// the target package, my newly written Indexer won't be found. Since we wrote a class with
// an Annotation handled by this processor, we know we will be called again in the next round
// and we can safely wait to write our AppGlideModule until then.
return true;
}
Set<String> getSupportedAnnotationTypes() {
return Collections.singleton(GlideModule.class.getName());
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/ProcessorUtil.java
================================================
package com.bumptech.glide.annotation.compiler;
import static com.bumptech.glide.annotation.compiler.GlideAnnotationProcessor.DEBUG;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideOption;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import javax.annotation.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.Name;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.TypeParameterElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.type.TypeVariable;
import javax.lang.model.util.ElementFilter;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.Diagnostic;
/** Utilities for writing classes and logging. */
final class ProcessorUtil {
private static final String GLIDE_MODULE_PACKAGE_NAME = "com.bumptech.glide.module";
private static final String APP_GLIDE_MODULE_SIMPLE_NAME = "AppGlideModule";
private static final String LIBRARY_GLIDE_MODULE_SIMPLE_NAME = "LibraryGlideModule";
private static final String APP_GLIDE_MODULE_QUALIFIED_NAME =
GLIDE_MODULE_PACKAGE_NAME + "." + APP_GLIDE_MODULE_SIMPLE_NAME;
private static final String LIBRARY_GLIDE_MODULE_QUALIFIED_NAME =
GLIDE_MODULE_PACKAGE_NAME + "." + LIBRARY_GLIDE_MODULE_SIMPLE_NAME;
private static final String COMPILER_PACKAGE_NAME =
GlideAnnotationProcessor.class.getPackage().getName();
private static final ClassName SUPPORT_NONNULL_ANNOTATION =
ClassName.get("android.support.annotation", "NonNull");
private static final ClassName JETBRAINS_NOTNULL_ANNOTATION =
ClassName.get("org.jetbrains.annotations", "NotNull");
private static final ClassName ANDROIDX_NONNULL_ANNOTATION =
ClassName.get("androidx.annotation", "NonNull");
private static final ClassName SUPPORT_CHECK_RESULT_ANNOTATION =
ClassName.get("android.support.annotation", "CheckResult");
private static final ClassName ANDROIDX_CHECK_RESULT_ANNOTATION =
ClassName.get("androidx.annotation", "CheckResult");
private static final ClassName SUPPORT_VISIBLE_FOR_TESTING =
ClassName.get("android.support.annotation", "VisibleForTesting");
private static final ClassName ANDROIDX_VISIBLE_FOR_TESTING =
ClassName.get("androidx.annotation", "VisibleForTesting");
private final ProcessingEnvironment processingEnv;
private final TypeElement appGlideModuleType;
private final TypeElement libraryGlideModuleType;
private int round;
ProcessorUtil(ProcessingEnvironment processingEnv) {
this.processingEnv = processingEnv;
appGlideModuleType =
processingEnv.getElementUtils().getTypeElement(APP_GLIDE_MODULE_QUALIFIED_NAME);
libraryGlideModuleType =
processingEnv.getElementUtils().getTypeElement(LIBRARY_GLIDE_MODULE_QUALIFIED_NAME);
}
void process() {
round++;
}
boolean isAppGlideModule(TypeElement element) {
return processingEnv.getTypeUtils().isAssignable(element.asType(), appGlideModuleType.asType());
}
boolean isLibraryGlideModule(TypeElement element) {
return processingEnv
.getTypeUtils()
.isAssignable(element.asType(), libraryGlideModuleType.asType());
}
boolean isExtension(TypeElement element) {
return element.getAnnotation(GlideExtension.class) != null;
}
int getOverrideType(ExecutableElement element) {
GlideOption glideOption = element.getAnnotation(GlideOption.class);
return glideOption.override();
}
void writeIndexer(TypeSpec indexer) {
writeClass(COMPILER_PACKAGE_NAME, indexer);
}
void writeClass(String packageName, TypeSpec clazz) {
try {
debugLog("Writing class:\n" + clazz);
JavaFile.builder(packageName, clazz)
.skipJavaLangImports(true)
.build()
.writeTo(processingEnv.getFiler());
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
List<ExecutableElement> findAnnotatedElementsInClasses(
Set<String> classNames, Class<? extends Annotation> annotationClass) {
List<ExecutableElement> result = new ArrayList<>();
for (String glideExtensionClassName : classNames) {
TypeElement glideExtension =
processingEnv.getElementUtils().getTypeElement(glideExtensionClassName);
for (Element element : glideExtension.getEnclosedElements()) {
if (element.getAnnotation(annotationClass) != null) {
result.add((ExecutableElement) element);
}
}
}
return result;
}
List<TypeElement> getElementsFor(Class<? extends Annotation> clazz, RoundEnvironment env) {
Collection<? extends Element> annotatedElements = env.getElementsAnnotatedWith(clazz);
return ElementFilter.typesIn(annotatedElements);
}
/**
* Generates a Javadoc code block for generated methods that delegate to methods in {@link
* GlideExtension}s.
*
* <p>The generated block looks something like this:
*
* <pre>
* <code>
* {@literal @see} com.extension.package.name.ExtensionClassName#extensionMethod(arg1, argN)
* </code>
* </pre>
*
* @param method The method from the {@link GlideExtension} annotated class that the generated
* method this Javadoc will be attached to delegates to.
*/
CodeBlock generateSeeMethodJavadoc(ExecutableElement method) {
// Use the simple name of the containing type instead of just the containing type's TypeMirror
// so that we avoid appending <CHILD> or other type arguments to the class and breaking
// Javadoc's linking.
// With this we get @see RequestOptions#methodName().
// With just ClassName.get(element.getEnclosingElement().asType()), we get:
// @see RequestOptions<CHILD>#methodName().
return generateSeeMethodJavadoc(
getJavadocSafeName(method.getEnclosingElement()),
method.getSimpleName().toString(),
method.getParameters());
}
/**
* Generates a Javadoc block for generated methods that delegate to other methods.
*
* <p>The generated block looks something like this:
*
* <pre>
* <code>
* {@literal @see} com.package.ClassContainingMethod.methodSimpleName(
* methodParam1, methodParamN)
* </code>
* </pre>
*
* @param nameOfClassContainingMethod The simple class name of the class containing the method
* without any generic types like {@literal <T>}.
* @param methodSimpleName The name of the method.
* @param methodParameters A maybe empty list of all the parameters for the method in question.
*/
CodeBlock generateSeeMethodJavadoc(
TypeName nameOfClassContainingMethod,
String methodSimpleName,
List<? extends VariableElement> methodParameters) {
return generateSeeMethodJavadocInternal(
nameOfClassContainingMethod,
methodSimpleName,
Lists.transform(
methodParameters,
new Function<VariableElement, Object>() {
@Override
public Object apply(VariableElement input) {
return getJavadocSafeName(input);
}
}));
}
CodeBlock generateSeeMethodJavadoc(TypeName nameOfClassContainingMethod, MethodSpec methodSpec) {
return generateSeeMethodJavadocInternal(
nameOfClassContainingMethod,
methodSpec.name,
Lists.transform(
methodSpec.parameters,
new Function<ParameterSpec, Object>() {
@Override
public Object apply(ParameterSpec input) {
return input.type;
}
}));
}
private CodeBlock generateSeeMethodJavadocInternal(
TypeName nameOfClassContainingMethod, String methodName, List<Object> safeParameterNames) {
StringBuilder javadocString = new StringBuilder("@see $T#$L(");
List<Object> javadocArgs = new ArrayList<>();
javadocArgs.add(nameOfClassContainingMethod);
javadocArgs.add(methodName);
for (Object param : safeParameterNames) {
javadocString.append("$T, ");
javadocArgs.add(param);
}
if (javadocArgs.size() > 2) {
javadocString = new StringBuilder(javadocString.substring(0, javadocString.length() - 2));
}
javadocString.append(")\n");
return CodeBlock.of(javadocString.toString(), javadocArgs.toArray(new Object[0]));
}
/**
* Returns a safe String to use in a Javadoc that will function in a link.
*
* <p>This method exists because by Javadoc doesn't handle type parameters({@literal <T>} in
* {@literal RequestOptions<T>} for example).
*/
private TypeName getJavadocSafeName(Element element) {
Types typeUtils = processingEnv.getTypeUtils();
TypeMirror type = element.asType();
if (typeUtils.asElement(type) == null) {
// If there is no Element, it's a primitive and can't have additional types, so we're done.
return ClassName.get(element.asType());
}
Name simpleName = typeUtils.asElement(type).getSimpleName();
return ClassName.bestGuess(simpleName.toString());
}
void debugLog(String toLog) {
if (DEBUG) {
infoLog(toLog);
}
}
void infoLog(String toLog) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "[" + round + "] " + toLog);
}
static CodeBlock generateCastingSuperCall(TypeName toReturn, MethodSpec method) {
return CodeBlock.builder()
.add("return ($T) super.$N(", toReturn, method.name)
.add(
FluentIterable.from(method.parameters)
.transform(
new Function<ParameterSpec, String>() {
@Override
public String apply(ParameterSpec input) {
return input.name;
}
})
.join(Joiner.on(",")))
.add(");\n")
.build();
}
MethodSpec.Builder overriding(ExecutableElement method) {
String methodName = method.getSimpleName().toString();
MethodSpec.Builder builder = MethodSpec.methodBuilder(methodName).addAnnotation(Override.class);
Set<Modifier> modifiers = method.getModifiers();
modifiers = new LinkedHashSet<>(modifiers);
modifiers.remove(Modifier.ABSTRACT);
Modifier defaultModifier = null;
// Modifier.DEFAULT doesn't exist until Java 8.
try {
defaultModifier = Modifier.valueOf("DEFAULT");
} catch (IllegalArgumentException e) {
// Ignored.
}
modifiers.remove(defaultModifier);
builder = builder.addModifiers(modifiers);
for (TypeParameterElement typeParameterElement : method.getTypeParameters()) {
TypeVariable var = (TypeVariable) typeParameterElement.asType();
builder = builder.addTypeVariable(TypeVariableName.get(var));
}
builder =
builder
.returns(TypeName.get(method.getReturnType()))
.addParameters(getParameters(method))
.varargs(method.isVarArgs());
for (TypeMirror thrownType : method.getThrownTypes()) {
builder = builder.addException(TypeName.get(thrownType));
}
return builder;
}
List<ParameterSpec> getParameters(ExecutableElement method) {
return getParameters(method.getParameters());
}
List<ParameterSpec> getParameters(List<? extends VariableElement> parameters) {
List<ParameterSpec> result = new ArrayList<>();
for (VariableElement parameter : parameters) {
result.add(getParameter(parameter));
}
return dedupedParameters(result);
}
private static List<ParameterSpec> dedupedParameters(List<ParameterSpec> parameters) {
boolean hasDupes = false;
Set<String> names = new HashSet<>();
for (ParameterSpec parameter : parameters) {
String name = parameter.name;
if (names.contains(name)) {
hasDupes = true;
} else {
names.add(name);
}
}
if (hasDupes) {
List<ParameterSpec> copy = parameters;
parameters = new ArrayList<>();
for (int i = 0; i < copy.size(); i++) {
ParameterSpec parameter = copy.get(i);
parameters.add(
ParameterSpec.builder(parameter.type, parameter.name + i)
.addModifiers(parameter.modifiers)
.addAnnotations(parameter.annotations)
.build());
}
}
return parameters;
}
private ParameterSpec getParameter(VariableElement parameter) {
TypeName type = TypeName.get(parameter.asType());
return ParameterSpec.builder(type, computeParameterName(parameter, type))
.addModifiers(parameter.getModifiers())
.addAnnotations(getAnnotations(parameter))
.build();
}
private static String computeParameterName(VariableElement parameter, TypeName type) {
String rawClassName = type.withoutAnnotations().toString();
String name;
if (type.isPrimitive() || type.isBoxedPrimitive()) {
name = getSmartPrimitiveParameterName(parameter);
} else {
if (rawClassName.contains("<") && rawClassName.contains(">")) {
String[] preGenericSplit = rawClassName.split("<");
String preGeneric = preGenericSplit[0];
String[] postGenericSplit = rawClassName.split(">");
String postGeneric = postGenericSplit[postGenericSplit.length - 1];
if (postGenericSplit.length > 1) {
rawClassName = preGeneric + postGeneric;
} else {
rawClassName = preGeneric;
}
}
String[] qualifiers = rawClassName.split("\\.");
rawClassName = qualifiers[qualifiers.length - 1];
rawClassName = applySmartParameterNameReplacements(rawClassName);
boolean allCaps = true;
for (char c : rawClassName.toCharArray()) {
if (Character.isLowerCase(c)) {
allCaps = false;
break;
}
}
if (allCaps) {
name = rawClassName.toLowerCase(Locale.ROOT);
} else {
int indexOfLastWordStart = 0;
char[] chars = rawClassName.toCharArray();
for (int i = 0, charArrayLength = chars.length; i < charArrayLength; i++) {
char c = chars[i];
if (Character.isUpperCase(c)) {
indexOfLastWordStart = i;
}
}
rawClassName = rawClassName.substring(indexOfLastWordStart, rawClassName.length());
name =
Character.toLowerCase(rawClassName.charAt(0))
+ rawClassName.substring(1, rawClassName.length());
}
}
return name;
}
private static String getSmartPrimitiveParameterName(VariableElement parameter) {
for (AnnotationMirror annotation : parameter.getAnnotationMirrors()) {
String annotationName = annotation.getAnnotationType().toString().toUpperCase(Locale.ROOT);
if (annotationName.endsWith("RES")) {
// Catch annotations like StringRes
return "id";
} else if (annotationName.endsWith("RANGE")) {
// Catch annotations like IntRange
return "value";
}
}
return parameter.getSimpleName().toString();
}
private static String applySmartParameterNameReplacements(String name) {
name = name.replace("[]", "s");
name = name.replace(Class.class.getSimpleName(), "clazz");
name = name.replace(Object.class.getSimpleName(), "o");
return name;
}
private List<AnnotationSpec> getAnnotations(VariableElement element) {
List<AnnotationSpec> result = new ArrayList<>();
for (AnnotationMirror mirror : element.getAnnotationMirrors()) {
result.add(maybeConvertSupportLibraryAnnotation(mirror));
}
return result;
}
private AnnotationSpec maybeConvertSupportLibraryAnnotation(AnnotationMirror mirror) {
String annotationName = mirror.getAnnotationType().asElement().toString();
boolean preferAndroidX = visibleForTesting().equals(ANDROIDX_VISIBLE_FOR_TESTING);
ImmutableBiMap<ClassName, ClassName> map =
ImmutableBiMap.<ClassName, ClassName>builder()
.put(SUPPORT_NONNULL_ANNOTATION, ANDROIDX_NONNULL_ANNOTATION)
.put(SUPPORT_CHECK_RESULT_ANNOTATION, ANDROIDX_CHECK_RESULT_ANNOTATION)
.put(SUPPORT_VISIBLE_FOR_TESTING, ANDROIDX_VISIBLE_FOR_TESTING)
.build();
ClassName remapped = null;
if (preferAndroidX && annotationName.startsWith("android.support.annotation")) {
remapped = ClassName.get((TypeElement) mirror.getAnnotationType().asElement());
} else if (!preferAndroidX && annotationName.startsWith("androidx.annotation")) {
remapped = ClassName.get((TypeElement) mirror.getAnnotationType().asElement());
}
if (remapped != null && map.containsKey(remapped)) {
return AnnotationSpec.builder(map.get(remapped)).build();
} else {
return AnnotationSpec.get(mirror);
}
}
ClassName visibleForTesting() {
return findAnnotationClassName(ANDROIDX_VISIBLE_FOR_TESTING, SUPPORT_VISIBLE_FOR_TESTING);
}
ClassName nonNull() {
return findAnnotationClassName(ANDROIDX_NONNULL_ANNOTATION, SUPPORT_NONNULL_ANNOTATION);
}
ClassName checkResult() {
return findAnnotationClassName(
ANDROIDX_CHECK_RESULT_ANNOTATION, SUPPORT_CHECK_RESULT_ANNOTATION);
}
static List<ClassName> nonNulls() {
return ImmutableList.of(
SUPPORT_NONNULL_ANNOTATION, JETBRAINS_NOTNULL_ANNOTATION, ANDROIDX_NONNULL_ANNOTATION);
}
private ClassName findAnnotationClassName(ClassName androidxName, ClassName supportName) {
Elements elements = processingEnv.getElementUtils();
TypeElement visibleForTestingTypeElement =
elements.getTypeElement(androidxName.reflectionName());
if (visibleForTestingTypeElement != null) {
return androidxName;
}
return supportName;
}
List<ExecutableElement> findInstanceMethodsReturning(TypeElement clazz, TypeMirror returnType) {
return FluentIterable.from(clazz.getEnclosedElements())
.filter(new FilterPublicMethods(returnType, MethodType.INSTANCE))
.transform(new ToMethod())
.toList();
}
List<ExecutableElement> findInstanceMethodsReturning(TypeElement clazz, TypeElement returnType) {
return FluentIterable.from(clazz.getEnclosedElements())
.filter(new FilterPublicMethods(returnType, MethodType.INSTANCE))
.transform(new ToMethod())
.toList();
}
List<ExecutableElement> findStaticMethodsReturning(TypeElement clazz, TypeElement returnType) {
return FluentIterable.from(clazz.getEnclosedElements())
.filter(new FilterPublicMethods(returnType, MethodType.STATIC))
.transform(new ToMethod())
.toList();
}
List<ExecutableElement> findStaticMethods(TypeElement clazz) {
return FluentIterable.from(clazz.getEnclosedElements())
.filter(new FilterPublicMethods((TypeMirror) null /*returnType*/, MethodType.STATIC))
.transform(new ToMethod())
.toList();
}
ImmutableSet<String> findClassValuesFromAnnotationOnClassAsNames(
Element clazz, Class<? extends Annotation> annotationClass) {
String annotationClassName = annotationClass.getName();
AnnotationValue excludedModuleAnnotationValue = null;
for (AnnotationMirror annotationMirror : clazz.getAnnotationMirrors()) {
// Two different AnnotationMirrors the same class might not be equal, so compare Strings
// instead. This check is necessary because a given class may have multiple Annotations.
if (!annotationClassName.equals(annotationMirror.getAnnotationType().toString())) {
continue;
}
var entries = annotationMirror.getElementValues().entrySet();
if (entries.size() != 1) {
throw new IllegalArgumentException("Expected single value, but found: " + entries);
}
excludedModuleAnnotationValue = entries.iterator().next().getValue();
if (excludedModuleAnnotationValue == null) {
throw new IllegalArgumentException(
"Failed to find value for: "
+ annotationClass
+ " from mirrors: "
+ clazz.getAnnotationMirrors());
}
}
if (excludedModuleAnnotationValue == null) {
return ImmutableSet.of();
}
Object value = excludedModuleAnnotationValue.getValue();
if (value instanceof List) {
LinkedHashSet<String> out = new LinkedHashSet<>();
for (Object o : (List<?>) value) {
AnnotationValue av = (AnnotationValue) o;
out.add(qualifiedNameFromTypeMirror((TypeMirror) av.getValue()));
}
return ImmutableSet.copyOf(out);
} else {
return ImmutableSet.of(qualifiedNameFromTypeMirror((TypeMirror) value));
}
}
static String qualifiedNameFromTypeMirror(TypeMirror type) {
if (type.getKind() == TypeKind.ERROR) {
throw new IllegalArgumentException("Unresolved class type in annotation: " + type);
}
if (type.getKind() == TypeKind.DECLARED) {
DeclaredType dt = (DeclaredType) type;
TypeElement te = (TypeElement) dt.asElement();
return te.getQualifiedName().toString();
}
return type.toString();
}
private enum MethodType {
STATIC,
INSTANCE
}
private final class FilterPublicMethods implements Predicate<Element> {
@Nullable private final TypeMirror returnType;
private final MethodType methodType;
FilterPublicMethods(@Nullable TypeMirror returnType, MethodType methodType) {
this.returnType = returnType;
this.methodType = methodType;
}
FilterPublicMethods(@Nullable TypeElement returnType, MethodType methodType) {
this(returnType != null ? returnType.asType() : null, methodType);
}
@Override
public boolean apply(@Nullable Element input) {
if (input == null
|| input.getKind() != ElementKind.METHOD
|| !input.getModifiers().contains(Modifier.PUBLIC)) {
return false;
}
boolean isStatic = input.getModifiers().contains(Modifier.STATIC);
if (methodType == MethodType.STATIC && !isStatic) {
return false;
} else if (methodType == MethodType.INSTANCE && isStatic) {
return false;
}
ExecutableElement method = (ExecutableElement) input;
return returnType == null || isReturnValueTypeMatching(method, returnType);
}
}
boolean isReturnValueTypeMatching(ExecutableElement method, TypeElement expectedReturnType) {
return isReturnValueTypeMatching(method, expectedReturnType.asType());
}
private boolean isReturnValueTypeMatching(
ExecutableElement method, TypeMirror expectedReturnType) {
return processingEnv.getTypeUtils().isAssignable(method.getReturnType(), expectedReturnType);
}
private static final class ToMethod implements Function<Element, ExecutableElement> {
@Nullable
@Override
public ExecutableElement apply(@Nullable Element input) {
return (ExecutableElement) input;
}
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestBuilderGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideOption;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
import com.squareup.javapoet.WildcardTypeName;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeMirror;
/**
* Generates a {@code com.bumptech.glide.RequestBuilder} subclass containing all methods from the
* base class, all methods from {@code com.bumptech.glide.request.RequestOptions} and all
* non-override {@link GlideOption} annotated methods in {@link GlideExtension} annotated classes.
*
* <p>Generated code looks like this:
*
* <pre>
* <code>
* public final class GlideRequest<TranscodeType> extends RequestBuilder<TranscodeType> {
* GlideRequest(Class<TranscodeType> transcodeClass, RequestBuilder<?> other) {
* super(transcodeClass, other);
* }
*
* GlideRequest(GlideContext context, RequestManager requestManager,
* Class<TranscodeType> transcodeClass) {
* super(context, requestManager ,transcodeClass);
* }
*
* {@literal @Override}
* protected GlideRequest<File> getDownloadOnlyRequest() {
* return new GlideRequest<>(File.class, this).apply(DOWNLOAD_ONLY_OPTIONS);
* }
*
* /**
* * {@literal @see} GlideOptions#dontAnimate()
* *\/
* public GlideRequest<TranscodeType> dontAnimate() {
* if (getMutableOptions() instanceof GlideOptions) {
* this.requestOptions = ((GlideOptions) getMutableOptions()).dontAnimate();
* } else {
* this.requestOptions = new GlideOptions().apply(this.requestOptions).dontAnimate();
* }
* return this;
* }
*
* /**
* * {@literal @see} RequestOptions#sizeMultiplier(float)
* *\/
* public GlideRequest<TranscodeType> sizeMultiplier(float sizeMultiplier) {
* this.requestOptions = getMutableOptions().sizeMultiplier(sizeMultiplier);
* return this;
* }
*
* ...
* }
* </code>
* </pre>
*/
final class RequestBuilderGenerator {
private static final String REQUEST_OPTIONS_PACKAGE_NAME = "com.bumptech.glide.request";
private static final String REQUEST_OPTIONS_SIMPLE_NAME = "RequestOptions";
private static final String REQUEST_OPTIONS_QUALIFIED_NAME =
REQUEST_OPTIONS_PACKAGE_NAME + "." + REQUEST_OPTIONS_SIMPLE_NAME;
private static final String REQUEST_BUILDER_PACKAGE_NAME = "com.bumptech.glide";
private static final String REQUEST_BUILDER_SIMPLE_NAME = "RequestBuilder";
static final String REQUEST_BUILDER_QUALIFIED_NAME =
REQUEST_BUILDER_PACKAGE_NAME + "." + REQUEST_BUILDER_SIMPLE_NAME;
// Uses package private methods and variables.
private static final String GENERATED_REQUEST_BUILDER_SIMPLE_NAME = "GlideRequest";
/**
* An arbitrary name of the Generic type in the generated RequestBuilder. e.g.
* RequestBuilder<TranscodeType>
*/
private static final String TRANSCODE_TYPE_NAME = "TranscodeType";
/** A set of method names to avoid overriding from RequestOptions. */
private static final ImmutableSet<String> EXCLUDED_METHODS_FROM_BASE_REQUEST_OPTIONS =
ImmutableSet.of("clone", "apply");
private final ProcessingEnvironment processingEnv;
private final ProcessorUtil processorUtil;
private final TypeVariableName transcodeTypeName;
private final TypeElement requestOptionsType;
private final TypeElement requestBuilderType;
private ClassName generatedRequestBuilderClassName;
private ClassName requestOptionsClassName;
private ParameterizedTypeName generatedRequestBuilderOfTranscodeType;
RequestBuilderGenerator(ProcessingEnvironment processingEnv, ProcessorUtil processorUtil) {
this.processingEnv = processingEnv;
this.processorUtil = processorUtil;
requestBuilderType =
processingEnv.getElementUtils().getTypeElement(REQUEST_BUILDER_QUALIFIED_NAME);
transcodeTypeName = TypeVariableName.get(TRANSCODE_TYPE_NAME);
requestOptionsType =
processingEnv.getElementUtils().getTypeElement(REQUEST_OPTIONS_QUALIFIED_NAME);
}
TypeSpec generate(
String generatedCodePackageName,
Set<String> glideExtensionClassNames,
@Nullable TypeSpec generatedOptions) {
if (generatedOptions != null) {
requestOptionsClassName = ClassName.get(generatedCodePackageName, generatedOptions.name);
} else {
requestOptionsClassName =
ClassName.get(
RequestOptionsGenerator.REQUEST_OPTIONS_PACKAGE_NAME,
RequestOptionsGenerator.BASE_REQUEST_OPTIONS_SIMPLE_NAME);
}
generatedRequestBuilderClassName =
ClassName.get(generatedCodePackageName, GENERATED_REQUEST_BUILDER_SIMPLE_NAME);
generatedRequestBuilderOfTranscodeType =
ParameterizedTypeName.get(generatedRequestBuilderClassName, transcodeTypeName);
RequestOptionsExtensionGenerator requestOptionsExtensionGenerator =
new RequestOptionsExtensionGenerator(generatedRequestBuilderOfTranscodeType, processorUtil);
ParameterizedTypeName requestBuilderOfTranscodeType =
ParameterizedTypeName.get(
ClassName.get(REQUEST_BUILDER_PACKAGE_NAME, REQUEST_BUILDER_SIMPLE_NAME),
transcodeTypeName);
List<MethodSpec> requestOptionsExtensionMethods =
requestOptionsExtensionGenerator.generateInstanceMethodsForExtensions(
glideExtensionClassNames);
return TypeSpec.classBuilder(GENERATED_REQUEST_BUILDER_SIMPLE_NAME)
.addJavadoc(
"Contains all public methods from {@link $T}, all options from\n", requestBuilderType)
.addJavadoc("{@link $T} and all generated options from\n", requestOptionsType)
.addJavadoc("{@link $T} in annotated methods in\n", GlideOption.class)
.addJavadoc("{@link $T} annotated classes.\n", GlideExtension.class)
.addJavadoc("\n")
.addJavadoc("<p>Generated code, do not modify.\n")
.addJavadoc("\n")
.addJavadoc("@see $T\n", requestBuilderType)
.addJavadoc("@see $T\n", requestOptionsType)
.addAnnotation(
AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "$S", "unused")
.addMember("value", "$S", "deprecation")
.build())
.addModifiers(Modifier.PUBLIC)
.addTypeVariable(transcodeTypeName)
.superclass(requestBuilderOfTranscodeType)
.addSuperinterface(Cloneable.class)
.addMethods(generateConstructors())
.addMethod(generateDownloadOnlyRequestMethod())
.addMethods(
generateGeneratedRequestOptionsEquivalents(
requestOptionsExtensionMethods, generatedOptions))
.addMethods(generateRequestBuilderOverrides())
.addMethods(requestOptionsExtensionMethods)
.build();
}
/**
* Generates methods with equivalent names and arguments to methods annotated with {@link
* GlideOption} in {@link com.bumptech.glide.annotation.GlideExtension}s that return our generated
* {@code com.bumptech.glide.RequestBuilder} subclass.
*/
private List<MethodSpec> generateGeneratedRequestOptionsEquivalents(
final List<MethodSpec> requestOptionsExtensionMethods,
@Nullable final TypeSpec generatedOptions) {
if (generatedOptions == null) {
return Collections.emptyList();
}
return FluentIterable.from(generatedOptions.methodSpecs)
.filter(
new Predicate<MethodSpec>() {
@Override
public boolean apply(MethodSpec input) {
return isUsefulGeneratedRequestOption(requestOptionsExtensionMethods, input);
}
})
.transform(
new Function<MethodSpec, MethodSpec>() {
@Override
public MethodSpec apply(MethodSpec input) {
return generateGeneratedRequestOptionEquivalent(input);
}
})
.toList();
}
/**
* Returns {@code true} if the given {@link MethodSpec} is a useful method to have in our {@code
* com.bumptech.glide.RequestBuilder} subclass.
*
* <p>Only newly generated methods will be included in the generated {@code
* com.bumptech.glide.request.BaseRequestBuilder} subclass, so we only have to filter out methods
* that override other methods to avoid duplicates.
*/
private boolean isUsefulGeneratedRequestOption(
List<MethodSpec> requestOptionsExtensionMethods, final MethodSpec requestOptionsMethod) {
return !EXCLUDED_METHODS_FROM_BASE_REQUEST_OPTIONS.contains(requestOptionsMethod.name)
&& requestOptionsMethod.hasModifier(Modifier.PUBLIC)
&& !requestOptionsMethod.hasModifier(Modifier.STATIC)
&& requestOptionsMethod.returnType.toString().equals(requestOptionsClassName.toString())
&& !isExtensionMethod(requestOptionsExtensionMethods, requestOptionsMethod);
}
private boolean isExtensionMethod(
List<MethodSpec> requestOptionsExtensionMethods, final MethodSpec requestOptionsMethod) {
return FluentIterable.from(requestOptionsExtensionMethods)
.anyMatch(
new Predicate<MethodSpec>() {
@Override
public boolean apply(MethodSpec input) {
return input.name.equals(requestOptionsMethod.name)
&& input.parameters.equals(requestOptionsMethod.parameters);
}
});
}
/**
* Generates a particular method with an equivalent name and arguments to the given method from
* the generated {@code com.bumptech.glide.request.BaseRequestBuilder} subclass.
*/
private MethodSpec generateGeneratedRequestOptionEquivalent(MethodSpec requestOptionMethod) {
CodeBlock callRequestOptionsMethod =
CodeBlock.builder()
.add(".$N(", requestOptionMethod.name)
.add(
FluentIterable.from(requestOptionMethod.parameters)
.transform(
new Function<ParameterSpec, String>() {
@Override
public String apply(ParameterSpec input) {
return input.name;
}
})
.join(Joiner.on(", ")))
.add(");\n")
.build();
MethodSpec.Builder result =
MethodSpec.methodBuilder(requestOptionMethod.name)
.addJavadoc(
processorUtil.generateSeeMethodJavadoc(
requestOptionsClassName, requestOptionMethod))
.addModifiers(Modifier.PUBLIC)
.varargs(requestOptionMethod.varargs)
.addAnnotations(
FluentIterable.from(requestOptionMethod.annotations)
.filter(
new Predicate<AnnotationSpec>() {
@Override
public boolean apply(AnnotationSpec input) {
return !input.type.equals(TypeName.get(Override.class))
// SafeVarargs can only be applied to final methods. GlideRequest is
// non-final to allow for mocking.
&& !input.type.equals(TypeName.get(SafeVarargs.class))
// We need to combine warnings below.
&& !input.type.equals(TypeName.get(SuppressWarnings.class));
}
})
.toList())
.addTypeVariables(requestOptionMethod.typeVariables)
.addParameters(requestOptionMethod.parameters)
.returns(generatedRequestBuilderOfTranscodeType)
.addCode("return ($T) super", generatedRequestBuilderOfTranscodeType)
.addCode(callRequestOptionsMethod);
AnnotationSpec suppressWarnings = buildSuppressWarnings(requestOptionMethod);
if (suppressWarnings != null) {
result.addAnnotation(suppressWarnings);
}
return result.build();
}
@Nullable
private AnnotationSpec buildSuppressWarnings(MethodSpec requestOptionMethod) {
Set<String> suppressions = new HashSet<>();
if (requestOptionMethod.annotations.contains(
AnnotationSpec.builder(SuppressWarnings.class).build())) {
for (AnnotationSpec annotation : requestOptionMethod.annotations) {
if (annotation.type.equals(TypeName.get(SuppressWarnings.class))) {
List<CodeBlock> codeBlocks = annotation.members.get("value");
suppressions.addAll(
FluentIterable.from(codeBlocks)
.transform(
new Function<CodeBlock, String>() {
@Override
public String apply(CodeBlock input) {
return input.toString();
}
})
.toSet());
}
}
}
if (requestOptionMethod.annotations.contains(
AnnotationSpec.builder(SafeVarargs.class).build())) {
suppressions.add("unchecked");
suppressions.add("varargs");
}
if (suppressions.isEmpty()) {
return null;
}
// Enforce ordering across compilers (Internal and External compilers end up disagreeing on the
// order produced by the Set additions above.)
ArrayList<String> suppressionsList = new ArrayList<>(suppressions);
Collections.sort(suppressionsList);
AnnotationSpec.Builder builder = AnnotationSpec.builder(SuppressWarnings.class);
for (String suppression : suppressionsList) {
builder.addMember("value", "$S", suppression);
}
return builder.build();
}
/**
* Generates overrides of all methods in {@code com.bumptech.glide.RequestBuilder} that return
* {@code com.bumptech.glide.RequestBuilder} so that they return our generated subclass instead.
*/
private List<MethodSpec> generateRequestBuilderOverrides() {
TypeMirror rawRequestBuilderType =
processingEnv.getTypeUtils().erasure(requestBuilderType.asType());
return Lists.transform(
processorUtil.findInstanceMethodsReturning(requestBuilderType, rawRequestBuilderType),
new Function<ExecutableElement, MethodSpec>() {
@Override
public MethodSpec apply(ExecutableElement input) {
return generateRequestBuilderOverride(input);
}
});
}
/**
* Generates an override of a particular method in {@code com.bumptech.glide.RequestBuilder} that
* returns {@code com.bumptech.glide.RequestBuilder} so that it returns our generated subclass
* instead.
*/
private MethodSpec generateRequestBuilderOverride(ExecutableElement methodToOverride) {
// We've already verified that this method returns a RequestBuilder and RequestBuilders have
// exactly one type argument, so this is safe unless those assumptions change.
TypeMirror typeArgument =
((DeclaredType) methodToOverride.getReturnType()).getTypeArguments().get(0);
ParameterizedTypeName generatedRequestBuilderOfType =
ParameterizedTypeName.get(generatedRequestBuilderClassName, ClassName.get(typeArgument));
MethodSpec.Builder builder =
processorUtil.overriding(methodToOverride).returns(generatedRequestBuilderOfType);
builder.addCode(
CodeBlock.builder()
.add(
"return ($T) super.$N(",
generatedRequestBuilderOfType,
methodToOverride.getSimpleName())
.add(
FluentIterable.from(builder.build().parameters)
.transform(
new Function<ParameterSpec, String>() {
@Override
public String apply(ParameterSpec input) {
return input.name;
}
})
.join(Joiner.on(", ")))
.add(");\n")
.build());
for (AnnotationMirror mirror : methodToOverride.getAnnotationMirrors()) {
builder = builder.addAnnotation(AnnotationSpec.get(mirror));
}
if (methodToOverride.isVarArgs()) {
builder =
builder
.addModifiers(Modifier.FINAL)
.addAnnotation(SafeVarargs.class)
.addAnnotation(
AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "$S", "varargs")
.build());
}
return builder.build();
}
private List<MethodSpec> generateConstructors() {
ParameterizedTypeName classOfTranscodeType =
ParameterizedTypeName.get(ClassName.get(Class.class), transcodeTypeName);
TypeName wildcardOfObject = WildcardTypeName.subtypeOf(Object.class);
ParameterizedTypeName requestBuilderOfWildcardOfObject =
ParameterizedTypeName.get(ClassName.get(requestBuilderType), wildcardOfObject);
MethodSpec firstConstructor =
MethodSpec.constructorBuilder()
.addParameter(
ParameterSpec.builder(classOfTranscodeType, "transcodeClass")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(requestBuilderOfWildcardOfObject, "other")
.addAnnotation(processorUtil.nonNull())
.build())
.addStatement("super($N, $N)", "transcodeClass", "other")
.build();
ClassName context = ClassName.get("android.content", "Context");
ClassName glide = ClassName.get("com.bumptech.glide", "Glide");
ClassName requestManager = ClassName.get("com.bumptech.glide", "RequestManager");
MethodSpec secondConstructor =
MethodSpec.constructorBuilder()
.addParameter(
ParameterSpec.builder(glide, "glide")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(requestManager, "requestManager")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(classOfTranscodeType, "transcodeClass")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(context, "context")
.addAnnotation(processorUtil.nonNull())
.build())
.addStatement(
"super($N, $N ,$N, $N)", "glide", "requestManager", "transcodeClass", "context")
.build();
return ImmutableList.of(firstConstructor, secondConstructor);
}
/**
* Overrides the protected downloadOnly method in {@code com.bumptech.glide.RequestBuilder} to
* return our generated subclass instead.
*/
private MethodSpec generateDownloadOnlyRequestMethod() {
ParameterizedTypeName generatedRequestBuilderOfFile =
ParameterizedTypeName.get(generatedRequestBuilderClassName, ClassName.get(File.class));
return MethodSpec.methodBuilder("getDownloadOnlyRequest")
.addAnnotation(Override.class)
.addAnnotation(processorUtil.checkResult())
.addAnnotation(processorUtil.nonNull())
.returns(generatedRequestBuilderOfFile)
.addModifiers(Modifier.PROTECTED)
.addStatement(
"return new $T<>($T.class, $N).apply($N)",
generatedRequestBuilderClassName,
File.class,
"this",
"DOWNLOAD_ONLY_OPTIONS")
.build();
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestManagerFactoryGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeSpec;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
/**
* Generates an implementation of {@code
* com.bumptech.glide.manager.RequestManagerRetriever.RequestManagerFactory} that returns a
* generated {@code com.bumptech.glide.RequestManager} implementation.
*
* <p>Generated {@code com.bumptech.glide.manager.RequestManagerRetriever.RequestManagerFactory}
* classes look like this:
*
* <pre>
* <code>
* public class GeneratedRequestManagerFactory
* implements RequestManagerRetriever.RequestManagerFactory {
* {@literal @Override}
* public RequestManager build(Glide glide, Lifecycle lifecycle,
* RequestManagerTreeNode treeNode) {
* return new GeneratedRequestManager(glide, lifecycle, treeNode);
* }
* }
* </code>
* </pre>
*/
final class RequestManagerFactoryGenerator {
private static final String GLIDE_QUALIFIED_NAME = "com.bumptech.glide.Glide";
private static final String LIFECYCLE_QUALIFIED_NAME = "com.bumptech.glide.manager.Lifecycle";
private static final String REQUEST_MANAGER_TREE_NODE_QUALIFIED_NAME =
"com.bumptech.glide.manager.RequestManagerTreeNode";
private static final String REQUEST_MANAGER_FACTORY_QUALIFIED_NAME =
"com.bumptech.glide.manager.RequestManagerRetriever.RequestManagerFactory";
private static final String REQUEST_MANAGER_QUALIFIED_NAME = "com.bumptech.glide.RequestManager";
private static final ClassName CONTEXT_CLASS_NAME = ClassName.get("android.content", "Context");
static final String GENERATED_REQUEST_MANAGER_FACTORY_PACKAGE_NAME = "com.bumptech.glide";
static final String GENERATED_REQUEST_MANAGER_FACTORY_SIMPLE_NAME =
"GeneratedRequestManagerFactory";
private final TypeElement glideType;
private final TypeElement lifecycleType;
private final TypeElement requestManagerTreeNodeType;
private final TypeElement requestManagerFactoryInterface;
private final ClassName requestManagerClassName;
private final ProcessorUtil processorUtil;
RequestManagerFactoryGenerator(ProcessingEnvironment processingEnv, ProcessorUtil processorUtil) {
this.processorUtil = processorUtil;
Elements elementUtils = processingEnv.getElementUtils();
glideType = elementUtils.getTypeElement(GLIDE_QUALIFIED_NAME);
lifecycleType = elementUtils.getTypeElement(LIFECYCLE_QUALIFIED_NAME);
requestManagerTreeNodeType =
elementUtils.getTypeElement(REQUEST_MANAGER_TREE_NODE_QUALIFIED_NAME);
requestManagerFactoryInterface =
elementUtils.getTypeElement(REQUEST_MANAGER_FACTORY_QUALIFIED_NAME);
TypeElement requestManagerType = elementUtils.getTypeElement(REQUEST_MANAGER_QUALIFIED_NAME);
requestManagerClassName = ClassName.get(requestManagerType);
}
TypeSpec generate(String generatedCodePackageName, TypeSpec generatedRequestManagerSpec) {
return TypeSpec.classBuilder(GENERATED_REQUEST_MANAGER_FACTORY_SIMPLE_NAME)
.addModifiers(Modifier.FINAL)
.addSuperinterface(ClassName.get(requestManagerFactoryInterface))
.addJavadoc("Generated code, do not modify\n")
.addMethod(
MethodSpec.methodBuilder("build")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addAnnotation(processorUtil.nonNull())
.returns(requestManagerClassName)
.addParameter(
ParameterSpec.builder(ClassName.get(glideType), "glide")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(ClassName.get(lifecycleType), "lifecycle")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(ClassName.get(requestManagerTreeNodeType), "treeNode")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(CONTEXT_CLASS_NAME, "context")
.addAnnotation(processorUtil.nonNull())
.build())
.addStatement(
"return new $T(glide, lifecycle, treeNode, context)",
ClassName.get(generatedCodePackageName, generatedRequestManagerSpec.name))
.build())
.build();
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestManagerGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideType;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Lists;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.MethodSpec.Builder;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
/**
* Generates an implementation of {@code com.bumptech.glide.RequestManager} that contains generated
* methods from {@link GlideExtension}s and {@link GlideType}.
*
* <p>Generated {@code com.bumptech.glide.RequestManager} implementations look like this:
*
* <pre>
* <code>
* public final class GeneratedRequestManager extends RequestManager {
* GeneratedRequestManager(Glide glide, Lifecycle lifecycle, RequestManagerTreeNode treeNode) {
* super(glide, lifecycle, treeNode);
* }
*
* public RequestBuilder<GifDrawable> asGif() {
* RequestBuilder<GifDrawable> requestBuilder = this.as(GifDrawable.class);
* GifOptions.asGif(requestBuilder);
* return requestBuilder;
* }
* }
* </code>
* </pre>
*/
final class RequestManagerGenerator {
private static final String GLIDE_QUALIFIED_NAME = "com.bumptech.glide.Glide";
private static final String REQUEST_MANAGER_QUALIFIED_NAME = "com.bumptech.glide.RequestManager";
private static final String LIFECYCLE_QUALIFIED_NAME = "com.bumptech.glide.manager.Lifecycle";
private static final String REQUEST_MANAGER_TREE_NODE_QUALIFIED_NAME =
"com.bumptech.glide.manager.RequestManagerTreeNode";
private static final ClassName CONTEXT_CLASS_NAME = ClassName.get("android.content", "Context");
private static final String GENERATED_REQUEST_MANAGER_SIMPLE_NAME = "GlideRequests";
private ProcessingEnvironment processingEnv;
private final ProcessorUtil processorUtil;
private final ClassName requestManagerClassName;
private final TypeElement lifecycleType;
private final TypeElement requestManagerTreeNodeType;
private final TypeElement glideType;
private final TypeElement requestManagerType;
private final TypeElement requestBuilderType;
private ClassName generatedRequestBuilderClassName;
RequestManagerGenerator(ProcessingEnvironment processingEnv, ProcessorUtil processorUtil) {
this.processingEnv = processingEnv;
this.processorUtil = processorUtil;
Elements elementUtils = processingEnv.getElementUtils();
requestManagerType = elementUtils.getTypeElement(REQUEST_MANAGER_QUALIFIED_NAME);
requestManagerClassName = ClassName.get(requestManagerType);
lifecycleType = elementUtils.getTypeElement(LIFECYCLE_QUALIFIED_NAME);
requestManagerTreeNodeType =
elementUtils.getTypeElement(REQUEST_MANAGER_TREE_NODE_QUALIFIED_NAME);
requestBuilderType =
elementUtils.getTypeElement(RequestBuilderGenerator.REQUEST_BUILDER_QUALIFIED_NAME);
glideType = elementUtils.getTypeElement(GLIDE_QUALIFIED_NAME);
}
TypeSpec generate(
String generatedCodePackageName,
@Nullable TypeSpec requestOptions,
TypeSpec requestBuilder,
Set<String> glideExtensions) {
generatedRequestBuilderClassName = ClassName.get(generatedCodePackageName, requestBuilder.name);
return TypeSpec.classBuilder(GENERATED_REQUEST_MANAGER_SIMPLE_NAME)
.superclass(requestManagerClassName)
.addJavadoc(
"Includes all additions from methods in {@link $T}s\n"
+ "annotated with {@link $T}\n"
+ "\n"
+ "<p>Generated code, do not modify\n",
GlideExtension.class,
GlideType.class)
.addAnnotation(
AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "$S", "deprecation")
.build())
.addModifiers(Modifier.PUBLIC)
.addMethod(generateAsMethod(generatedCodePackageName, requestBuilder))
.addMethod(generateCallSuperConstructor())
.addMethods(generateExtensionRequestManagerMethods(glideExtensions))
.addMethods(generateRequestManagerRequestManagerMethodOverrides(generatedCodePackageName))
.addMethods(generateRequestManagerRequestBuilderMethodOverrides())
.addMethods(
FluentIterable.from(
Collections.singletonList(
generateOverrideSetRequestOptions(
generatedCodePackageName, requestOptions)))
.filter(Predicates.<MethodSpec>notNull()))
.build();
}
private MethodSpec generateCallSuperConstructor() {
return MethodSpec.constructorBuilder()
.addModifiers(Modifier.PUBLIC)
.addParameter(
ParameterSpec.builder(ClassName.get(glideType), "glide")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(ClassName.get(lifecycleType), "lifecycle")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(ClassName.get(requestManagerTreeNodeType), "treeNode")
.addAnnotation(processorUtil.nonNull())
.build())
.addParameter(
ParameterSpec.builder(CONTEXT_CLASS_NAME, "context")
.addAnnotation(processorUtil.nonNull())
.build())
.addStatement("super(glide, lifecycle, treeNode, context)")
.build();
}
private MethodSpec generateAsMethod(String generatedCodePackageName, TypeSpec requestBuilder) {
TypeVariableName resourceType = TypeVariableName.get("ResourceType");
ParameterizedTypeName classOfResouceType =
ParameterizedTypeName.get(ClassName.get(Class.class), resourceType);
ClassName generatedRequestBuilderClassName =
ClassName.get(generatedCodePackageName, requestBuilder.name);
ParameterizedTypeName requestBuilderOfResourceType =
ParameterizedTypeName.get(generatedRequestBuilderClassName, resourceType);
return MethodSpec.methodBuilder("as")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.addAnnotation(processorUtil.checkResult())
.addAnnotation(processorUtil.nonNull())
.addTypeVariable(TypeVariableName.get("ResourceType"))
.returns(requestBuilderOfResourceType)
.addParameter(
classOfResouceType.annotated(AnnotationSpec.builder(processorUtil.nonNull()).build()),
"resourceClass")
.addStatement(
"return new $T<>(glide, this, resourceClass, context)",
this.generatedRequestBuilderClassName)
.build();
}
/** Generates the list of overrides of methods that return {@code RequestManager}. */
private List<MethodSpec> generateRequestManagerRequestManagerMethodOverrides(
final String generatedPackageName) {
return FluentIterable.from(
processorUtil.findInstanceMethodsReturning(requestManagerType, requestManagerType))
.transform(
new Function<ExecutableElement, MethodSpec>() {
@Override
public MethodSpec apply(@Nullable ExecutableElement input) {
return generateRequestManagerRequestManagerMethodOverride(
generatedPackageName, input);
}
})
.toList();
}
private MethodSpec generateRequestManagerRequestManagerMethodOverride(
String generatedPackageName, ExecutableElement method) {
ClassName generatedRequestManagerName =
ClassName.get(generatedPackageName, GENERATED_REQUEST_MANAGER_SIMPLE_NAME);
Builder returns =
processorUtil
.overriding(method)
.addAnnotation(processorUtil.nonNull())
.returns(generatedRequestManagerName);
return returns
.addCode(
ProcessorUtil.generateCastingSuperCall(generatedRequestManagerName, returns.build()))
.build();
}
/** Generates the list of overrides of methods that return {@code RequestBuilder}. */
private List<MethodSpec> generateRequestManagerRequestBuilderMethodOverrides() {
// Without the erasure, this is a RequestBuilder<Y>. A RequestBuilder<X> is not assignable to a
// RequestBuilder<Y>. After type erasure this is a RequestBuilder. A RequestBuilder<X> is
// assignable to the raw RequestBuilder.
TypeMirror rawRequestBuilder =
processingEnv.getTypeUtils().erasure(requestBuilderType.asType());
return FluentIterable.from(
processorUtil.findInstanceMethodsReturning(requestManagerType, rawRequestBuilder))
.filter(
new Predicate<ExecutableElement>() {
@Override
public boolean apply(ExecutableElement input) {
// Skip the <T> as(Class<T>) method.
return !input.getSimpleName().toString().equals("as");
}
})
.transform(
new Function<ExecutableElement, MethodSpec>() {
@Override
public MethodSpec apply(ExecutableElement input) {
return generateRequestManagerRequestBuilderMethodOverride(input);
}
})
.toList();
}
/**
* Generates overrides of existing RequestManager methods so that they return our generated
* RequestBuilder subtype.
*/
private MethodSpec generateRequestManagerRequestBuilderMethodOverride(
ExecutableElement methodToOverride) {
// We've already verified that this method returns a RequestBuilder and RequestBuilders have
// exactly one type argument, so this is safe unless those assumptions change.
TypeMirror typeArgument =
((DeclaredType) methodToOverride.getReturnType()).getTypeArguments().get(0);
ParameterizedTypeName generatedRequestBuilderOfType =
ParameterizedTypeName.get(generatedRequestBuilderClassName, ClassName.get(typeArgument));
MethodSpec.Builder builder =
processorUtil.overriding(methodToOverride).returns(generatedRequestBuilderOfType);
builder.addCode(
ProcessorUtil.generateCastingSuperCall(generatedRequestBuilderOfType, builder.build()));
for (AnnotationMirror mirror : methodToOverride.getAnnotationMirrors()) {
builder.addAnnotation(AnnotationSpec.get(mirror));
}
return builder.build();
}
private List<MethodSpec> generateExtensionRequestManagerMethods(Set<String> glideExtensions) {
List<ExecutableElement> requestManagerExtensionMethods =
processorUtil.findAnnotatedElementsInClasses(glideExtensions, GlideType.class);
return Lists.transform(
requestManagerExtensionMethods,
new Function<ExecutableElement, MethodSpec>() {
@Override
public MethodSpec apply(ExecutableElement input) {
return generateAdditionalRequestManagerMethod(input);
}
});
}
// Generates methods added to RequestManager via GlideExtensions.
private MethodSpec generateAdditionalRequestManagerMethod(ExecutableElement extensionMethod) {
if (extensionMethod.getReturnType().getKind() == TypeKind.VOID) {
return generateAdditionalRequestManagerMethodLegacy(extensionMethod);
} else {
return generateAdditionalRequestManagerMethodNew(extensionMethod);
}
}
private MethodSpec generateAdditionalRequestManagerMethodLegacy(
ExecutableElement extensionMethod) {
String returnType =
processorUtil
.findClassValuesFromAnnotationOnClassAsNames(extensionMethod, GlideType.class)
.iterator()
.next();
ClassName returnTypeClassName = ClassName.bestGuess(returnType);
ParameterizedTypeName parameterizedTypeName =
ParameterizedTypeName.get(generatedRequestBuilderClassName, returnTypeClassName);
return MethodSpec.methodBuilder(extensionMethod.getSimpleName().toString())
.addModifiers(Modifier.PUBLIC)
.returns(parameterizedTypeName)
.addJavadoc(processorUtil.generateSeeMethodJavadoc(extensionMethod))
.addAnnotation(processorUtil.nonNull())
.addAnnotation(processorUtil.checkResult())
.addStatement(
"$T requestBuilder = this.as($T.class)", parameterizedTypeName, returnTypeClassName)
.addStatement(
"$T.$N(requestBuilder)",
extensionMethod.getEnclosingElement(),
extensionMethod.getSimpleName())
.addStatement("return requestBuilder")
.build();
}
private MethodSpec generateAdditionalRequestManagerMethodNew(ExecutableElement extensionMethod) {
String returnType =
processorUtil
.findClassValuesFromAnnotationOnClassAsNames(extensionMethod, GlideType.class)
.iterator()
.next();
ClassName returnTypeClassName = ClassName.bestGuess(returnType);
ParameterizedTypeName parameterizedTypeName =
ParameterizedTypeName.get(generatedRequestBuilderClassName, returnTypeClassName);
return MethodSpec.methodBuilder(extensionMethod.getSimpleName().toString())
.addModifiers(Modifier.PUBLIC)
.returns(parameterizedTypeName)
.addJavadoc(processorUtil.generateSeeMethodJavadoc(extensionMethod))
.addAnnotation(processorUtil.nonNull())
.addAnnotation(processorUtil.checkResult())
.addStatement(
"return ($T) $T.$N(this.as($T.class))",
parameterizedTypeName,
extensionMethod.getEnclosingElement(),
extensionMethod.getSimpleName(),
returnTypeClassName)
.build();
}
/**
* The {@code RequestOptions} subclass should always be our generated subclass type to avoid
* inadvertent errors where a different subclass is applied that accidentally wipes out some logic
* in overidden methods in our generated subclass.
*/
@Nullable
private MethodSpec generateOverrideSetRequestOptions(
String generatedCodePackageName, @Nullable TypeSpec generatedRequestOptions) {
if (generatedRequestOptions == null) {
return null;
}
Elements elementUtils = processingEnv.getElementUtils();
TypeElement requestOptionsType =
elementUtils.getTypeElement(RequestOptionsGenerator.REQUEST_OPTIONS_QUALIFIED_NAME);
// This class may have just been generated and therefore may not be found if we try to obtain
// it via Elements, so use just the String version instead.
String generatedRequestOptionsQualifiedName =
generatedCodePackageName + "." + generatedRequestOptions.name;
String methodName = "setRequestOptions";
String parameterName = "toSet";
return MethodSpec.methodBuilder(methodName)
.addAnnotation(Override.class)
.addModifiers(Modifier.PROTECTED)
.addParameter(
ParameterSpec.builder(ClassName.get(requestOptionsType), parameterName)
.addAnnotation(processorUtil.nonNull())
.build())
.beginControlFlow(
"if ($N instanceof $L)", parameterName, generatedRequestOptionsQualifiedName)
.addStatement("super.$N($N)", methodName, parameterName)
.nextControlFlow("else")
.addStatement(
"super.setRequestOptions(new $L().apply($N))",
generatedRequestOptionsQualifiedName,
parameterName)
.endControlFlow()
.build();
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsExtensionGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import static com.bumptech.glide.annotation.GlideOption.OVERRIDE_EXTEND;
import com.bumptech.glide.annotation.GlideOption;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeName;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeKind;
/**
* Generates method overrides for classes that want to mix in {@link GlideOption} annotated methods
* in Glide extensions.
*/
final class RequestOptionsExtensionGenerator {
private TypeName containingClassName;
private ProcessorUtil processorUtil;
RequestOptionsExtensionGenerator(TypeName containingClassName, ProcessorUtil processorUtil) {
this.containingClassName = containingClassName;
this.processorUtil = processorUtil;
}
/**
* Returns the set of {@link GlideOption} annotated methods in the classes that correspond to the
* given extension class names.
*/
List<ExecutableElement> getRequestOptionExtensionMethods(Set<String> glideExtensionClassNames) {
return processorUtil.findAnnotatedElementsInClasses(
glideExtensionClassNames, GlideOption.class);
}
/**
* Returns a list containing an override {@link MethodSpec} for all {@link GlideOption} annotated
* methods in the classes that correspond to the given extension class names.
*/
List<MethodSpec> generateInstanceMethodsForExtensions(Set<String> glideExtensionClassNames) {
List<ExecutableElement> requestOptionExtensionMethods =
getRequestOptionExtensionMethods(glideExtensionClassNames);
List<MethodSpec> result = new ArrayList<>(requestOptionExtensionMethods.size());
for (ExecutableElement requestOptionsExtensionMethod : requestOptionExtensionMethods) {
result.add(generateMethodsForRequestOptionsExtension(requestOptionsExtensionMethod));
}
return result;
}
private MethodSpec generateMethodsForRequestOptionsExtension(ExecutableElement element) {
// Assert for legacy versions
if (element.getReturnType().getKind() == TypeKind.VOID) {
throw new IllegalArgumentException(
"The "
+ element.getSimpleName()
+ " method annotated with @GlideOption in the "
+ element.getEnclosingElement().getSimpleName()
+ " @GlideExtension is using a legacy"
+ " format that is no longer supported. Please change your method definition so that"
+ " your @GlideModule annotated methods return BaseRequestOptions<?> objects instead"
+ " of null.");
}
int overrideType = processorUtil.getOverrideType(element);
String methodName = element.getSimpleName().toString();
MethodSpec.Builder builder =
MethodSpec.methodBuilder(methodName)
.addModifiers(Modifier.PUBLIC)
.addJavadoc(processorUtil.generateSeeMethodJavadoc(element))
.varargs(element.isVarArgs())
.returns(containingClassName)
.addAnnotation(
AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "$S", "unchecked")
.build());
// The 0th element is expected to be a RequestOptions object.
List<? extends VariableElement> paramElements =
element.getParameters().subList(1, element.getParameters().size());
List<ParameterSpec> parameters = processorUtil.getParameters(paramElements);
builder.addParameters(parameters);
String extensionRequestOptionsArgument;
if (overrideType == OVERRIDE_EXTEND) {
builder
.addJavadoc(
processorUtil.generateSeeMethodJavadoc(
containingClassName, methodName, paramElements))
.addAnnotation(Override.class);
List<Object> methodArgs = new ArrayList<>();
methodArgs.add(element.getSimpleName().toString());
StringBuilder methodLiterals = new StringBuilder();
if (!parameters.isEmpty()) {
for (ParameterSpec parameter : parameters) {
methodLiterals.append("$L, ");
methodArgs.add(parameter.name);
}
methodLiterals =
new StringBuilder(methodLiterals.substring(0, methodLiterals.length() - 2));
}
extensionRequestOptionsArgument =
CodeBlock.builder()
.add("super.$N(" + methodLiterals + ")", methodArgs.toArray(new Object[0]))
.build()
.toString();
} else {
extensionRequestOptionsArgument = "this";
}
List<Object> args = new ArrayList<>();
StringBuilder code = new StringBuilder("return ($T) $T.$L($L, ");
args.add(containingClassName);
args.add(ClassName.get(element.getEnclosingElement().asType()));
args.add(element.getSimpleName().toString());
args.add(extensionRequestOptionsArgument);
if (!parameters.isEmpty()) {
for (ParameterSpec parameter : parameters) {
code.append("$L, ");
args.add(parameter.name);
}
}
code = new StringBuilder(code.substring(0, code.length() - 2));
code.append(")");
builder.addStatement(code.toString(), args.toArray(new Object[0]));
builder.addAnnotation(processorUtil.checkResult()).addAnnotation(processorUtil.nonNull());
return builder.build();
}
}
================================================
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java
================================================
package com.bumptech.glide.annotation.compiler;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideOption;
import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.CodeBlock.Builder;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.TypeParameterElement;
import javax.lang.model.element.VariableElement;
/**
* Generates a new implementation of {@code com.bumptech.glide.request.RequestOptions} containing
* static versions of methods included in the base class and static and instance versions of all
* methods annotated with {@link GlideOption} in classes annotated with {@link GlideExtension}.
*
* <p>The generated class looks something like this:
*
* <pre>
* <code>
* public final class GlideOptions extends com.bumptech.glide.request.RequestOptions {
*
* public static com.google.android.apps.photos.glide.GlideOptions signatureOf(
* com.bumptech.glide.load.Key arg0) {
* return new com.google.android.apps.photos.glide.GlideOptions()
* .apply(com.bumptech.glide.request.RequestOptions.signatureOf(arg0));
* }
*
* ... // The rest of the static versions of methods from RequestOptions go here.
*
* // Now on to methods generated from an extension:
* public com.bumptech.glide.GlideOptions dontAnimate() {
* com.bumptech.glide.integration.gifdecoder.GifOptions.dontAnimate(this);
* return this;
* }
*
* public static com.bumptech.glide.GlideOptions noAnimation() {
* return new com.bumptech.glide.GlideOptions().dontAnimate();
* }
* }
* </code>
* </pre>
*/
final class RequestOptionsGenerator {
private static final String GENERATED_REQUEST_OPTIONS_SIMPLE_NAME = "GlideOptions";
static final String REQUEST_OPTIONS_PACKAGE_NAME = "com.bumptech.glide.request";
private static final String REQUEST_OPTIONS_SIMPLE_NAME = "RequestOptions";
static final String REQUEST_OPTIONS_QUALIFIED_NAME =
REQUEST_OPTIONS_PACKAGE_NAME + "." + REQUEST_OPTIONS_SIMPLE_NAME;
static final String BASE_REQUEST_OPTIONS_SIMPLE_NAME = "BaseRequestOptions";
static final String BASE_REQUEST_OPTIONS_QUALIFIED_NAME =
REQUEST_OPTIONS_PACKAGE_NAME + "." + BASE_REQUEST_OPTIONS_SIMPLE_NAME;
private int nextFieldId;
private final ClassName requestOptionsName;
private final TypeElement requestOptionsType;
private final ProcessorUtil processorUtil;
private final RequestOptionsOverrideGenerator requestOptionsOverrideGenerator;
private ClassName glideOptionsName;
RequestOptionsGenerator(
ProcessingEnvironment processingEnvironment, ProcessorUtil processorUtil) {
this.processorUtil = processorUtil;
requestOptionsName = ClassName.get(REQUEST_OPTIONS_PACKAGE_NAME, REQUEST_OPTIONS_SIMPLE_NAME);
requestOptionsType =
processingEnvironment.getElementUtils().getTypeElement(REQUEST_OPTIONS_QUALIFIED_NAME);
requestOptionsOverrideGenerator =
new RequestOptionsOverrideGenerator(processingEnvironment, processorUtil);
}
TypeSpec generate(String generatedCodePackageName, Set<String> glideExtensionClassNames) {
glideOptionsName =
ClassName.get(generatedCodePackageName, GENERATED_REQUEST_OPTIONS_SIMPLE_NAME);
RequestOptionsExtensionGenerator requestOptionsExtensionGenerator =
new RequestOptionsExtensionGenerator(glideOptionsName, processorUtil);
List<MethodAndStaticVar> instanceMethodsForExtensions =
FluentIterable.from(
requestOptionsExtensionGenerator.generateInstanceMethodsForExtensions(
glideExtensionClassNames))
.transform(
new Function<MethodSpec, MethodAndStaticVar>() {
@Override
public MethodAndStaticVar apply(MethodSpec input) {
return new MethodAndStaticVar(input);
}
})
.toList();
List<MethodAndStaticVar> staticMethodsForExtensions =
FluentIterable.from(
requestOptionsExtensionGenerator.getRequestOptionExtensionMethods(
glideExtensionClassNames))
.filter(
new Predicate<ExecutableElement>() {
@Override
public boolean apply(ExecutableElement input) {
return !skipStaticMethod(input);
}
})
.transform(
new Function<ExecutableElement, MethodAndStaticVar>() {
@Override
public MethodAndStaticVar apply(ExecutableElement input) {
return generateStaticMethodEquivalentForExtensionMethod(input);
}
})
.toList();
List<MethodAndStaticVar> methodsForExtensions = new ArrayList<>();
methodsForExtensions.addAll(instanceMethodsForExtensions);
methodsForExtensions.addAll(staticMethodsForExtensions);
Set<MethodSignature> extensionMethodSignatures =
ImmutableSet.copyOf(
Iterables.transform(
methodsForExtensions,
new Function<MethodAndStaticVar, MethodSignature>() {
@Override
public MethodSignature apply(MethodAndStaticVar f) {
return new MethodSignature(f.method);
}
}));
List<MethodAndStaticVar> staticOverrides = generateStaticMethodOverridesForRequestOptions();
List<MethodSpec> instanceOverrides =
requestOptionsOverrideGenerator.generateInstanceMethodOverridesForRequestOptions(
glideOptionsName);
List<MethodAndStaticVar> allMethodsAndStaticVars = new ArrayList<>();
for (MethodAndStaticVar item : staticOverrides) {
if (extensionMethodSignatures.contains(new MethodSignature(item.method))) {
continue;
}
allMethodsAndStaticVars.add(item);
}
for (MethodSpec methodSpec : instanceOverrides) {
if (extensionMethodSignatures.contains(new MethodSignature(methodSpec))) {
continue;
}
allMethodsAndStaticVars.add(new MethodAndStaticVar(methodSpec));
}
allMethodsAndStaticVars.addAll(methodsForExtensions);
TypeSpec.Builder classBuilder =
TypeSpec.classBuilder(GENERATED_REQUEST_OPTIONS_SIMPLE_NAME)
.addAnnotation(
AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "$S", "deprecation")
.build())
.addJavadoc(generateClassJavadoc(glideExtensionClassNames))
.addModifiers(Modifier.FINAL)
.addModifiers(Modifier.PUBLIC)
.addSuperinterface(Cloneable.class)
.superclass(requestOptionsName);
for (MethodAndStaticVar methodAndStaticVar : allMethodsAndStaticVars) {
if (methodAndStaticVar.method != null) {
classBuilder.addMethod(methodAndStaticVar.method);
}
if (methodAndStaticVar.staticField != null) {
classBuilder.addField(methodAndStaticVar.staticField);
}
}
return classBuilder.build();
}
private CodeBlock generateClassJavadoc(Set<String> glideExtensionClassNames) {
Builder builder =
CodeBlock.builder()
.add(
"Automatically generated from {@link $T} annotated classes.\n",
GlideExtension.class)
.add("\n")
.add("@see $T\n", requestOptionsName);
for (String glideExtensionClass : glideExtensionClassNames) {
builder.add("@see $T\n", ClassName.bestGuess(glideExtensionClass));
}
return builder.build();
}
private List<MethodAndStaticVar> generateStaticMethodOverridesForRequestOptions() {
List<ExecutableElement> staticMethodsThatReturnRequestOptions =
processorUtil.findStaticMethodsReturning(requestOptionsType, requestOptionsType);
List<MethodAndStaticVar> staticMethods = new ArrayList<>();
for (ExecutableElement element : staticMethodsThatReturnRequestOptions) {
if (element.getAnnotation(Deprecated.class) != null) {
continue;
}
staticMethods.add(generateStaticMethodEquivalentForRequestOptionsStaticMethod(element));
}
return staticMethods;
}
/**
* This method is a bit of a hack, but it lets us tie the static version of a method with the
* instance version. In turn that lets us call the instance versions on the generated subclass,
* instead of just delegating to the RequestOptions static methods. Using the instance methods on
* the generated subclass allows our static methods to properly call code that overrides an
* existing method in RequestOptions.
*
* <p>The string names here just map between the static methods in {@code
* com.bumptech.glide.request.RequestOptions} and the instance methods they call.
*/
private static String getInstanceMethodNameFromStaticMethodName(String staticMethodName) {
String equivalentInstanceMethodName;
if ("bitmapTransform".equals(staticMethodName)) {
equivalentInstanceMethodName = "transform";
} else if ("decodeTypeOf".equals(staticMethodName)) {
equivalentInstanceMethodName = "decode";
} else if (staticMethodName.endsWith("Transform")) {
equivalentInstanceMethodName = staticMethodName.substring(0, staticMethodName.length() - 9);
} else if (staticMethodName.endsWith("Of")) {
equivalentInstanceMethodName = staticMethodName.substring(0, staticMethodName.length() - 2);
} else if ("noTransformation".equals(staticMethodName)) {
equivalentInstanceMethodName = "dontTransform";
} else if ("noAnimation".equals(staticMethodName)) {
equivalentInstanceMethodName = "dontAnimate";
} else if (staticMethodName.equals("option")) {
equivalentInstanceMethodName = "set";
} else {
throw new IllegalArgumentException("Unrecognized static method name: " + staticMethodName);
}
return equivalentInstanceMethodName;
}
private MethodAndStaticVar generateStaticMethodEquivalentForRequestOptionsStaticMethod(
ExecutableElement staticMethod) {
boolean memoize = memoizeStaticMethodFromArguments(staticMethod);
String staticMethodName = staticMethod.getSimpleName().toString();
String equivalentInstanceMethodName =
getInstanceMethodNameFromStaticMethodName(staticMethodName);
MethodSpec.Builder methodSpecBuilder =
MethodSpec.methodBuilder(staticMethodName)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addJavadoc(processorUtil.generateSeeMethodJavadoc(staticMethod))
.returns(glideOptionsName);
StringBuilder createNewOptionAndCall =
createNewOptionAndCall(
memoize, methodSpecBuilder, "new $T().$N(", processorUtil.getParameters(staticMethod));
FieldSpec requiredStaticField = null;
if (memoize) {
// Generates code that looks like:
// if (GlideOptions.<methodName> == null) {
// GlideOptions.<methodName> = new GlideOptions().<methodName>().autoClone()
// }
// Mix in an incrementing unique id to handle method overloading.
String staticVariableName = staticMethodName + nextFieldId++;
requiredStaticField =
FieldSpec.builder(glideOptionsName, staticVariableName)
.addModifiers(Modifier.PRIVATE, Modifier.STATIC)
.build();
methodSpecBuilder
.beginControlFlow("if ($T.$N == null)", glideOptionsName, staticVariableName)
.addStatement(
"$T.$N =\n" + createNewOptionAndCall + ".$N",
glideOptionsName,
staticVariableName,
glideOptionsName,
equivalentInstanceMethodName,
"autoClone()")
.endControlFlow()
.addStatement("return $T.$N", glideOptionsName, staticVariableName);
} else {
// Generates code that looks like:
// return new GlideOptions().<methodName>()
methodSpecBuilder.addStatement(
"return " + createNewOptionAndCall, glideOptionsName, equivalentInstanceMethodName);
}
List<? extends TypeParameterElement> typeParameters = staticMethod.getTypeParameters();
for (TypeParameterElement typeParameterElement : typeParameters) {
methodSpecBuilder.addTypeVariable(
TypeVariableName.get(typeParameterElement.getSimpleName().toString()));
}
methodSpecBuilder
.addAnnotation(processorUtil.checkResult())
.addAnnotation(processorUtil.nonNull());
return new MethodAndStaticVar(methodSpecBuilder.build(), requiredStaticField);
}
@SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability
private static boolean memoizeStaticMethodFromArguments(ExecutableElement staticMethod) {
return staticMethod.getParameters().isEmpty()
|| (staticMethod.getParameters().size() == 1
&& staticMethod
.getParameters()
.get(0)
.getSimpleName()
.toString()
.equals("android.content.Context"));
}
private StringBuilder createNewOptionAndCall(
boolean memoize,
MethodSpec.Builder methodSpecBuilder,
String start,
List<ParameterSpec> specs) {
StringBuilder createNewOptionAndCall = new StringBuilder(start);
if (!specs.isEmpty()) {
methodSpecBuilder.addParameters(specs);
for (ParameterSpec parameter : specs) {
createNewOptionAndCall.append(parameter.name);
// use the Application Context to avoid memory leaks.
if (memoize && isAndroidContext(parameter)) {
createNewOptionAndCall.append(".getApplicationContext()");
}
createNewOptionAndCall.append(", ");
}
createNewOptionAndCall =
new StringBuilder(
createNewOptionAndCall.substring(0, createNewOptionAndCall.length() - 2));
}
createNewOptionAndCall.append(")");
return createNewOptionAndCall;
}
private boolean isAndroidContext(ParameterSpec parameter) {
return parameter.type.toString().equals("android.content.Context");
}
private MethodAndStaticVar generateStaticMethodEquivalentForExtensionMethod(
ExecutableElement instanceMethod) {
String staticMethodN
gitextract_c7iyc7lj/
├── .github/
│ ├── stale.yml
│ └── workflows/
│ ├── build.yml
│ └── publish-manual.yml
├── .gitignore
├── .gitmodules
├── .idea/
│ ├── codeStyleSettings.xml
│ └── inspectionProfiles/
│ └── Project_Default.xml
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── annotation/
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── compiler/
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── proguard.pro
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── bumptech/
│ │ │ │ └── glide/
│ │ │ │ └── annotation/
│ │ │ │ └── compiler/
│ │ │ │ ├── AppModuleGenerator.java
│ │ │ │ ├── AppModuleProcessor.java
│ │ │ │ ├── ExtensionProcessor.java
│ │ │ │ ├── GlideAnnotationProcessor.java
│ │ │ │ ├── GlideExtensionValidator.java
│ │ │ │ ├── GlideGenerator.java
│ │ │ │ ├── IndexerGenerator.java
│ │ │ │ ├── LibraryModuleProcessor.java
│ │ │ │ ├── ProcessorUtil.java
│ │ │ │ ├── RequestBuilderGenerator.java
│ │ │ │ ├── RequestManagerFactoryGenerator.java
│ │ │ │ ├── RequestManagerGenerator.java
│ │ │ │ ├── RequestOptionsExtensionGenerator.java
│ │ │ │ ├── RequestOptionsGenerator.java
│ │ │ │ └── RequestOptionsOverrideGenerator.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── gradle/
│ │ │ └── incremental.annotation.processors
│ │ └── test/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── compiler/
│ │ │ ├── AppGlideModuleWithExcludesTest.java
│ │ │ ├── AppGlideModuleWithLibraryInPackageTest.java
│ │ │ ├── AppGlideModuleWithMultipleExcludesTest.java
│ │ │ ├── EmptyAppAndLibraryGlideModulesTest.java
│ │ │ ├── EmptyAppGlideModuleTest.java
│ │ │ ├── EmptyLibraryGlideModuleTest.java
│ │ │ ├── GlideExtensionOptionsTest.java
│ │ │ ├── GlideExtensionWithOptionTest.java
│ │ │ ├── GlideExtensionWithTypeTest.java
│ │ │ ├── InvalidAppGlideModuleWithExcludesTest.java
│ │ │ ├── InvalidGlideExtensionTest.java
│ │ │ ├── InvalidGlideOptionsExtensionTest.java
│ │ │ ├── InvalidGlideTypeExtensionTest.java
│ │ │ ├── MultipleAppGlideModuleTest.java
│ │ │ ├── MultipleEmptyLibraryGlideModuleTest.java
│ │ │ ├── OverlyLongFileNameTest.java
│ │ │ └── test/
│ │ │ ├── CompilationProvider.java
│ │ │ ├── ReferencedResource.java
│ │ │ ├── RegenerateResourcesRule.java
│ │ │ ├── SubDirectory.java
│ │ │ ├── TestDescription.java
│ │ │ └── Util.java
│ │ └── resources/
│ │ ├── AppGlideModuleWithExcludesTest/
│ │ │ ├── AppModuleWithExcludes.java
│ │ │ └── GeneratedAppGlideModuleImpl.java
│ │ ├── AppGlideModuleWithLibraryInPackageTest/
│ │ │ ├── AppModuleWithLibraryInPackage.java
│ │ │ ├── GeneratedAppGlideModuleImpl.java
│ │ │ └── LibraryModuleInPackage.java
│ │ ├── AppGlideModuleWithMultipleExcludesTest/
│ │ │ ├── AppModuleWithMultipleExcludes.java
│ │ │ ├── EmptyLibraryModule1.java
│ │ │ ├── EmptyLibraryModule2.java
│ │ │ └── GeneratedAppGlideModuleImpl.java
│ │ ├── EmptyAppAndLibraryGlideModulesTest/
│ │ │ └── GeneratedAppGlideModuleImpl.java
│ │ ├── EmptyAppGlideModuleTest/
│ │ │ ├── EmptyAppModule.java
│ │ │ ├── GeneratedAppGlideModuleImpl.java
│ │ │ ├── GeneratedRequestManagerFactory.java
│ │ │ ├── GlideApp.java
│ │ │ ├── GlideOptions.java
│ │ │ ├── GlideRequest.java
│ │ │ └── GlideRequests.java
│ │ ├── EmptyLibraryGlideModuleTest/
│ │ │ ├── EmptyLibraryModule.java
│ │ │ └── GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule.java
│ │ ├── GlideExtensionOptionsTest/
│ │ │ ├── MemoizeStaticMethod/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── OverrideExtend/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── OverrideExtendMultipleArguments/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── OverrideReplace/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ ├── SkipStaticMethod/
│ │ │ │ ├── Extension.java
│ │ │ │ ├── GlideOptions.java
│ │ │ │ └── GlideRequest.java
│ │ │ └── StaticMethodName/
│ │ │ ├── Extension.java
│ │ │ ├── GlideOptions.java
│ │ │ └── GlideRequest.java
│ │ ├── GlideExtensionWithOptionTest/
│ │ │ ├── ExtensionWithOption.java
│ │ │ ├── GlideOptions.java
│ │ │ └── GlideRequest.java
│ │ ├── GlideExtensionWithTypeTest/
│ │ │ ├── ExtensionWithType.java
│ │ │ ├── GlideOptions.java
│ │ │ └── GlideRequests.java
│ │ ├── MultipleAppGlideModuleTest/
│ │ │ ├── EmptyAppModule1.java
│ │ │ └── EmptyAppModule2.java
│ │ └── MultipleEmptyLibraryGlideModuleTest/
│ │ ├── EmptyLibraryModule1.java
│ │ ├── EmptyLibraryModule2.java
│ │ └── GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule1_com_bumptech_glide_test_EmptyLibraryModule2.java
│ ├── gradle.properties
│ ├── ksp/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── integrationtest/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── ksp/
│ │ │ └── integrationtest/
│ │ │ └── IntegrationLibraryGlideModuleTests.kt
│ │ ├── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── ksp/
│ │ │ ├── AppGlideModules.kt
│ │ │ ├── GlideSymbolProcessor.kt
│ │ │ ├── GlideSymbolProcessorProvider.kt
│ │ │ ├── LibraryGlideModules.kt
│ │ │ └── ModuleParser.kt
│ │ └── test/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── annotation/
│ │ │ └── ksp/
│ │ │ └── test/
│ │ │ └── SourceTestHelpers.kt
│ │ └── test/
│ │ └── kotlin/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── annotation/
│ │ └── ksp/
│ │ └── test/
│ │ ├── LibraryGlideModuleTests.kt
│ │ └── OnlyAppGlideModuleTests.kt
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── annotation/
│ ├── Excludes.java
│ ├── GlideExtension.java
│ ├── GlideModule.java
│ ├── GlideOption.java
│ ├── GlideType.java
│ ├── compiler/
│ │ └── Index.java
│ └── ksp/
│ └── Index.java
├── benchmark/
│ ├── benchmark-proguard-rules.pro
│ ├── build.gradle.kts
│ ├── gradle.properties
│ └── src/
│ └── androidTest/
│ ├── AndroidManifest.xml
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ ├── benchmark/
│ │ ├── BenchmarkData.java
│ │ ├── BenchmarkFromCache.java
│ │ ├── BenchmarkMediaStoreData.java
│ │ ├── BenchmarkModels.java
│ │ ├── GlideBenchmarkRule.java
│ │ └── data/
│ │ └── DataOpener.java
│ └── load/
│ └── resource/
│ └── bitmap/
│ └── BenchmarkDownsampler.java
├── build.gradle
├── checkstyle.xml
├── checkstyle_suppressions.xml
├── gcloud-bumptech.json.enc
├── gcloud-sjudd.json.enc
├── glide/
│ ├── build.gradle
│ └── gradle.properties
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── instrumentation/
│ ├── build.gradle.kts
│ ├── gradle.properties
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ ├── AsBytesTest.java
│ │ ├── AsFileTest.java
│ │ ├── CachingTest.java
│ │ ├── CenterCropRegressionTest.java
│ │ ├── CenterInsideRegressionTest.java
│ │ ├── CircleCropRegressionTest.java
│ │ ├── DarkModeTest.java
│ │ ├── DataUriTest.java
│ │ ├── DownsampleVideoTest.java
│ │ ├── DrawableTransformationTest.java
│ │ ├── ErrorHandlingTest.java
│ │ ├── ExternallyClearedDiskCacheTest.java
│ │ ├── FitCenterRegressionTest.java
│ │ ├── LargeImageTest.java
│ │ ├── LoadAnimatedImageResourceTest.java
│ │ ├── LoadAssetUriTest.java
│ │ ├── LoadBitmapTest.java
│ │ ├── LoadBytesTest.java
│ │ ├── LoadDrawableTest.java
│ │ ├── LoadResourcesWithDownsamplerTest.java
│ │ ├── LoadVideoResourceTest.java
│ │ ├── MultiRequestTest.java
│ │ ├── NonBitmapDrawableResourcesTest.java
│ │ ├── PausedRequestsTest.java
│ │ ├── RequestManagerLifecycleTest.java
│ │ ├── RequestManagerTest.java
│ │ ├── RequestTest.java
│ │ ├── RoundedCornersRegressionTest.java
│ │ ├── WideGamutTest.java
│ │ ├── load/
│ │ │ ├── engine/
│ │ │ │ └── executor/
│ │ │ │ └── IdlingGlideRule.java
│ │ │ └── resource/
│ │ │ ├── bitmap/
│ │ │ │ └── DownsamplerEmulatorTest.java
│ │ │ └── gif/
│ │ │ └── GifDrawableTest.java
│ │ └── test/
│ │ ├── BitmapRegressionTester.java
│ │ ├── CanonicalBitmap.java
│ │ ├── ModelGeneratorRule.java
│ │ ├── RegressionTest.java
│ │ ├── ResourceIds.java
│ │ ├── SplitByCpu.java
│ │ └── SplitBySdk.java
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── test/
│ │ ├── DefaultFragmentActivity.java
│ │ ├── ForceDarkOrLightModeActivity.java
│ │ ├── GlideWithAsDifferentSupertypesActivity.java
│ │ ├── GlideWithBeforeSuperOnCreateActivity.java
│ │ └── InstrumentationAppGlideModule.java
│ └── res/
│ ├── drawable/
│ │ ├── bitmap_alias.xml
│ │ ├── shape_drawable.xml
│ │ ├── state_list_drawable.xml
│ │ ├── vector_drawable.xml
│ │ ├── vector_drawable_dark.xml
│ │ └── vector_drawable_light.xml
│ ├── layout/
│ │ └── default_fragment_activity.xml
│ ├── raw/
│ │ └── dl_world_anim_avif.avif
│ ├── values/
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── values-night/
│ └── colors.xml
├── integration/
│ ├── avif/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── avif/
│ │ ├── AvifByteBufferBitmapDecoder.java
│ │ ├── AvifGlideModule.java
│ │ └── AvifStreamBitmapDecoder.java
│ ├── build.gradle.kts
│ ├── compose/
│ │ ├── api/
│ │ │ └── compose.api
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ ├── integration/
│ │ │ │ └── compose/
│ │ │ │ ├── GlideImageCustomDrawableTransformationTest.kt
│ │ │ │ ├── GlideImageDefaultTransformationTest.kt
│ │ │ │ ├── GlideImageErrorTest.kt
│ │ │ │ ├── GlideImagePlaceholderTest.kt
│ │ │ │ ├── GlideImageTest.kt
│ │ │ │ ├── RememberGlidePreloadingDataTest.kt
│ │ │ │ └── test/
│ │ │ │ ├── GlideComposeRule.kt
│ │ │ │ ├── expectations.kt
│ │ │ │ └── nodes.kt
│ │ │ └── load/
│ │ │ └── engine/
│ │ │ └── executor/
│ │ │ └── GlideIdlingResourceInit.kt
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── compose/
│ │ │ ├── ExperimentalGlideComposeApi.kt
│ │ │ ├── GlideImage.kt
│ │ │ ├── GlidePainter.kt
│ │ │ ├── Preload.kt
│ │ │ └── Sizes.kt
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── compose/
│ │ └── GlideImageTest.kt
│ ├── concurrent/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── concurrent/
│ │ │ └── GlideFutures.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── concurrent/
│ │ └── GlideFuturesTest.java
│ ├── cronet/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── cronet/
│ │ │ ├── BufferQueue.java
│ │ │ ├── ByteBufferParser.java
│ │ │ ├── ChromiumRequestSerializer.java
│ │ │ ├── ChromiumUrlFetcher.java
│ │ │ ├── ChromiumUrlLoader.java
│ │ │ ├── CronetEngineSingleton.java
│ │ │ ├── CronetGlideModule.java
│ │ │ ├── CronetLibraryGlideModule.java
│ │ │ ├── CronetRequestFactory.java
│ │ │ ├── CronetRequestFactoryImpl.java
│ │ │ └── DataLogger.java
│ │ └── test/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── cronet/
│ │ └── ChromiumUrlFetcherTest.java
│ ├── gifencoder/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── gifencoder/
│ │ │ └── ReEncodingGifResourceEncoder.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── gifencoder/
│ │ └── ReEncodingGifResourceEncoderTest.java
│ ├── gradle.properties
│ ├── ktx/
│ │ ├── api/
│ │ │ └── ktx.api
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ ├── GlideIntegration.kt
│ │ │ └── integration/
│ │ │ └── ktx/
│ │ │ ├── Flows.kt
│ │ │ └── InternalGlideApi.kt
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ ├── integration/
│ │ │ └── ktx/
│ │ │ └── FlowsTest.kt
│ │ └── load/
│ │ └── engine/
│ │ └── executor/
│ │ └── GlideIdlingResourceInit.kt
│ ├── okhttp/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── okhttp/
│ │ ├── OkHttpGlideModule.java
│ │ ├── OkHttpLibraryGlideModule.java
│ │ ├── OkHttpStreamFetcher.java
│ │ └── OkHttpUrlLoader.java
│ ├── okhttp3/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── okhttp3/
│ │ ├── OkHttpGlideModule.java
│ │ ├── OkHttpLibraryGlideModule.java
│ │ ├── OkHttpStreamFetcher.java
│ │ └── OkHttpUrlLoader.java
│ ├── okhttp4/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── okhttp3/
│ │ ├── OkHttpLibraryGlideModule.java
│ │ ├── OkHttpStreamFetcher.java
│ │ └── OkHttpUrlLoader.java
│ ├── recyclerview/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── recyclerview/
│ │ ├── RecyclerToListViewScrollListener.java
│ │ └── RecyclerViewPreloader.java
│ ├── sqljournaldiskcache/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── integration/
│ │ │ └── sqljournaldiskcache/
│ │ │ ├── Clock.java
│ │ │ ├── DefaultClock.java
│ │ │ ├── DiskCacheDbHelper.java
│ │ │ ├── EntryCache.java
│ │ │ ├── EvictionManager.java
│ │ │ ├── FileSystem.java
│ │ │ ├── GlideJournaledLruDiskCacheWrapper.java
│ │ │ ├── Journal.java
│ │ │ ├── JournalTable.java
│ │ │ ├── JournaledLruDiskCache.java
│ │ │ ├── MessageIds.java
│ │ │ ├── RecoveryManager.java
│ │ │ ├── SizeJournal.java
│ │ │ ├── SizeTable.java
│ │ │ └── SqliteStatementPool.java
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── sqljournaldiskcache/
│ │ ├── DiskCacheDbHelperUpgradeTest.java
│ │ ├── DiskCacheUtils.java
│ │ ├── JournaledLruDiskCacheTest.java
│ │ └── TestClock.java
│ └── volley/
│ ├── build.gradle.kts
│ ├── gradle.properties
│ ├── lint.xml
│ └── src/
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── integration/
│ │ └── volley/
│ │ ├── VolleyGlideModule.java
│ │ ├── VolleyLibraryGlideModule.java
│ │ ├── VolleyRequestFactory.java
│ │ ├── VolleyStreamFetcher.java
│ │ └── VolleyUrlLoader.java
│ └── test/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── integration/
│ └── volley/
│ └── VolleyStreamFetcherServerTest.java
├── library/
│ ├── build.gradle
│ ├── gradle.properties
│ ├── lint.xml
│ ├── pmd/
│ │ └── build.gradle
│ ├── pmd-ruleset.xml
│ ├── proguard-rules.txt
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── bumptech/
│ │ │ │ └── glide/
│ │ │ │ ├── GeneratedAppGlideModule.java
│ │ │ │ ├── GenericTransitionOptions.java
│ │ │ │ ├── Glide.java
│ │ │ │ ├── GlideBuilder.java
│ │ │ │ ├── GlideContext.java
│ │ │ │ ├── GlideExperiments.java
│ │ │ │ ├── ListPreloader.java
│ │ │ │ ├── MemoryCategory.java
│ │ │ │ ├── ModelTypes.java
│ │ │ │ ├── Priority.java
│ │ │ │ ├── Registry.java
│ │ │ │ ├── RegistryFactory.java
│ │ │ │ ├── RequestBuilder.java
│ │ │ │ ├── RequestManager.java
│ │ │ │ ├── TransitionOptions.java
│ │ │ │ ├── load/
│ │ │ │ │ ├── DataSource.java
│ │ │ │ │ ├── DecodeFormat.java
│ │ │ │ │ ├── EncodeStrategy.java
│ │ │ │ │ ├── Encoder.java
│ │ │ │ │ ├── HttpException.java
│ │ │ │ │ ├── ImageHeaderParser.java
│ │ │ │ │ ├── ImageHeaderParserUtils.java
│ │ │ │ │ ├── Key.java
│ │ │ │ │ ├── MultiTransformation.java
│ │ │ │ │ ├── Option.java
│ │ │ │ │ ├── Options.java
│ │ │ │ │ ├── PreferredColorSpace.java
│ │ │ │ │ ├── ResourceDecoder.java
│ │ │ │ │ ├── ResourceEncoder.java
│ │ │ │ │ ├── Transformation.java
│ │ │ │ │ ├── data/
│ │ │ │ │ │ ├── AssetFileDescriptorLocalUriFetcher.java
│ │ │ │ │ │ ├── AssetPathFetcher.java
│ │ │ │ │ │ ├── BufferedOutputStream.java
│ │ │ │ │ │ ├── DataFetcher.java
│ │ │ │ │ │ ├── DataRewinder.java
│ │ │ │ │ │ ├── DataRewinderRegistry.java
│ │ │ │ │ │ ├── ExifOrientationStream.java
│ │ │ │ │ │ ├── FileDescriptorAssetPathFetcher.java
│ │ │ │ │ │ ├── FileDescriptorLocalUriFetcher.java
│ │ │ │ │ │ ├── HttpUrlFetcher.java
│ │ │ │ │ │ ├── InputStreamRewinder.java
│ │ │ │ │ │ ├── LocalUriFetcher.java
│ │ │ │ │ │ ├── ParcelFileDescriptorRewinder.java
│ │ │ │ │ │ ├── StreamAssetPathFetcher.java
│ │ │ │ │ │ ├── StreamLocalUriFetcher.java
│ │ │ │ │ │ └── mediastore/
│ │ │ │ │ │ ├── FileService.java
│ │ │ │ │ │ ├── MediaStoreUtil.java
│ │ │ │ │ │ ├── ThumbFetcher.java
│ │ │ │ │ │ ├── ThumbnailQuery.java
│ │ │ │ │ │ └── ThumbnailStreamOpener.java
│ │ │ │ │ ├── engine/
│ │ │ │ │ │ ├── ActiveResources.java
│ │ │ │ │ │ ├── CallbackException.java
│ │ │ │ │ │ ├── DataCacheGenerator.java
│ │ │ │ │ │ ├── DataCacheKey.java
│ │ │ │ │ │ ├── DataCacheWriter.java
│ │ │ │ │ │ ├── DataFetcherGenerator.java
│ │ │ │ │ │ ├── DecodeHelper.java
│ │ │ │ │ │ ├── DecodeJob.java
│ │ │ │ │ │ ├── DecodePath.java
│ │ │ │ │ │ ├── DiskCacheStrategy.java
│ │ │ │ │ │ ├── Engine.java
│ │ │ │ │ │ ├── EngineJob.java
│ │ │ │ │ │ ├── EngineJobListener.java
│ │ │ │ │ │ ├── EngineKey.java
│ │ │ │ │ │ ├── EngineKeyFactory.java
│ │ │ │ │ │ ├── EngineResource.java
│ │ │ │ │ │ ├── GlideException.java
│ │ │ │ │ │ ├── Initializable.java
│ │ │ │ │ │ ├── Jobs.java
│ │ │ │ │ │ ├── LoadPath.java
│ │ │ │ │ │ ├── LockedResource.java
│ │ │ │ │ │ ├── Resource.java
│ │ │ │ │ │ ├── ResourceCacheGenerator.java
│ │ │ │ │ │ ├── ResourceCacheKey.java
│ │ │ │ │ │ ├── ResourceRecycler.java
│ │ │ │ │ │ ├── SourceGenerator.java
│ │ │ │ │ │ ├── bitmap_recycle/
│ │ │ │ │ │ │ ├── ArrayAdapterInterface.java
│ │ │ │ │ │ │ ├── ArrayPool.java
│ │ │ │ │ │ │ ├── AttributeStrategy.java
│ │ │ │ │ │ │ ├── BaseKeyPool.java
│ │ │ │ │ │ │ ├── BitmapPool.java
│ │ │ │ │ │ │ ├── BitmapPoolAdapter.java
│ │ │ │ │ │ │ ├── ByteArrayAdapter.java
│ │ │ │ │ │ │ ├── GroupedLinkedMap.java
│ │ │ │ │ │ │ ├── IntegerArrayAdapter.java
│ │ │ │ │ │ │ ├── LruArrayPool.java
│ │ │ │ │ │ │ ├── LruBitmapPool.java
│ │ │ │ │ │ │ ├── LruPoolStrategy.java
│ │ │ │ │ │ │ ├── Poolable.java
│ │ │ │ │ │ │ ├── PrettyPrintTreeMap.java
│ │ │ │ │ │ │ ├── SizeConfigStrategy.java
│ │ │ │ │ │ │ └── SizeStrategy.java
│ │ │ │ │ │ ├── cache/
│ │ │ │ │ │ │ ├── DiskCache.java
│ │ │ │ │ │ │ ├── DiskCacheAdapter.java
│ │ │ │ │ │ │ ├── DiskCacheWriteLocker.java
│ │ │ │ │ │ │ ├── DiskLruCacheFactory.java
│ │ │ │ │ │ │ ├── DiskLruCacheWrapper.java
│ │ │ │ │ │ │ ├── ExternalCacheDiskCacheFactory.java
│ │ │ │ │ │ │ ├── ExternalPreferredCacheDiskCacheFactory.java
│ │ │ │ │ │ │ ├── InternalCacheDiskCacheFactory.java
│ │ │ │ │ │ │ ├── LruResourceCache.java
│ │ │ │ │ │ │ ├── MemoryCache.java
│ │ │ │ │ │ │ ├── MemoryCacheAdapter.java
│ │ │ │ │ │ │ ├── MemorySizeCalculator.java
│ │ │ │ │ │ │ └── SafeKeyGenerator.java
│ │ │ │ │ │ ├── executor/
│ │ │ │ │ │ │ ├── GlideExecutor.java
│ │ │ │ │ │ │ └── RuntimeCompat.java
│ │ │ │ │ │ └── prefill/
│ │ │ │ │ │ ├── BitmapPreFillRunner.java
│ │ │ │ │ │ ├── BitmapPreFiller.java
│ │ │ │ │ │ ├── PreFillQueue.java
│ │ │ │ │ │ └── PreFillType.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ ├── AssetUriLoader.java
│ │ │ │ │ │ ├── ByteArrayLoader.java
│ │ │ │ │ │ ├── ByteBufferEncoder.java
│ │ │ │ │ │ ├── ByteBufferFileLoader.java
│ │ │ │ │ │ ├── DataUrlLoader.java
│ │ │ │ │ │ ├── DirectResourceLoader.java
│ │ │ │ │ │ ├── FileLoader.java
│ │ │ │ │ │ ├── GlideUrl.java
│ │ │ │ │ │ ├── Headers.java
│ │ │ │ │ │ ├── LazyHeaderFactory.java
│ │ │ │ │ │ ├── LazyHeaders.java
│ │ │ │ │ │ ├── MediaStoreFileLoader.java
│ │ │ │ │ │ ├── Model.java
│ │ │ │ │ │ ├── ModelCache.java
│ │ │ │ │ │ ├── ModelLoader.java
│ │ │ │ │ │ ├── ModelLoaderFactory.java
│ │ │ │ │ │ ├── ModelLoaderRegistry.java
│ │ │ │ │ │ ├── MultiModelLoader.java
│ │ │ │ │ │ ├── MultiModelLoaderFactory.java
│ │ │ │ │ │ ├── ResourceLoader.java
│ │ │ │ │ │ ├── ResourceUriLoader.java
│ │ │ │ │ │ ├── StreamEncoder.java
│ │ │ │ │ │ ├── StringLoader.java
│ │ │ │ │ │ ├── UnitModelLoader.java
│ │ │ │ │ │ ├── UriLoader.java
│ │ │ │ │ │ ├── UrlUriLoader.java
│ │ │ │ │ │ └── stream/
│ │ │ │ │ │ ├── BaseGlideUrlLoader.java
│ │ │ │ │ │ ├── HttpGlideUrlLoader.java
│ │ │ │ │ │ ├── HttpUriLoader.java
│ │ │ │ │ │ ├── MediaStoreImageThumbLoader.java
│ │ │ │ │ │ ├── MediaStoreVideoThumbLoader.java
│ │ │ │ │ │ ├── QMediaStoreUriLoader.java
│ │ │ │ │ │ └── UrlLoader.java
│ │ │ │ │ └── resource/
│ │ │ │ │ ├── DefaultOnHeaderDecodedListener.java
│ │ │ │ │ ├── SimpleResource.java
│ │ │ │ │ ├── UnitTransformation.java
│ │ │ │ │ ├── bitmap/
│ │ │ │ │ │ ├── BitmapDrawableDecoder.java
│ │ │ │ │ │ ├── BitmapDrawableEncoder.java
│ │ │ │ │ │ ├── BitmapDrawableResource.java
│ │ │ │ │ │ ├── BitmapDrawableTransformation.java
│ │ │ │ │ │ ├── BitmapEncoder.java
│ │ │ │ │ │ ├── BitmapImageDecoderResourceDecoder.java
│ │ │ │ │ │ ├── BitmapResource.java
│ │ │ │ │ │ ├── BitmapTransformation.java
│ │ │ │ │ │ ├── BitmapTransitionOptions.java
│ │ │ │ │ │ ├── ByteBufferBitmapDecoder.java
│ │ │ │ │ │ ├── ByteBufferBitmapImageDecoderResourceDecoder.java
│ │ │ │ │ │ ├── CenterCrop.java
│ │ │ │ │ │ ├── CenterInside.java
│ │ │ │ │ │ ├── CircleCrop.java
│ │ │ │ │ │ ├── DefaultImageHeaderParser.java
│ │ │ │ │ │ ├── DownsampleStrategy.java
│ │ │ │ │ │ ├── Downsampler.java
│ │ │ │ │ │ ├── DrawableToBitmapConverter.java
│ │ │ │ │ │ ├── DrawableTransformation.java
│ │ │ │ │ │ ├── ExifInterfaceImageHeaderParser.java
│ │ │ │ │ │ ├── FitCenter.java
│ │ │ │ │ │ ├── GlideBitmapFactory.java
│ │ │ │ │ │ ├── GranularRoundedCorners.java
│ │ │ │ │ │ ├── HardwareConfigState.java
│ │ │ │ │ │ ├── ImageReader.java
│ │ │ │ │ │ ├── InputStreamBitmapImageDecoderResourceDecoder.java
│ │ │ │ │ │ ├── LazyBitmapDrawableResource.java
│ │ │ │ │ │ ├── ParcelFileDescriptorBitmapDecoder.java
│ │ │ │ │ │ ├── RecyclableBufferedInputStream.java
│ │ │ │ │ │ ├── ResourceBitmapDecoder.java
│ │ │ │ │ │ ├── Rotate.java
│ │ │ │ │ │ ├── RoundedCorners.java
│ │ │ │ │ │ ├── StreamBitmapDecoder.java
│ │ │ │ │ │ ├── TransformationUtils.java
│ │ │ │ │ │ ├── UnitBitmapDecoder.java
│ │ │ │ │ │ ├── VideoBitmapDecoder.java
│ │ │ │ │ │ └── VideoDecoder.java
│ │ │ │ │ ├── bytes/
│ │ │ │ │ │ ├── ByteBufferRewinder.java
│ │ │ │ │ │ └── BytesResource.java
│ │ │ │ │ ├── drawable/
│ │ │ │ │ │ ├── AnimatedImageDecoder.java
│ │ │ │ │ │ ├── AnimatedWebpDecoder.java
│ │ │ │ │ │ ├── DrawableDecoderCompat.java
│ │ │ │ │ │ ├── DrawableResource.java
│ │ │ │ │ │ ├── DrawableTransitionOptions.java
│ │ │ │ │ │ ├── NonOwnedDrawableResource.java
│ │ │ │ │ │ ├── ResourceDrawableDecoder.java
│ │ │ │ │ │ └── UnitDrawableDecoder.java
│ │ │ │ │ ├── file/
│ │ │ │ │ │ ├── FileDecoder.java
│ │ │ │ │ │ └── FileResource.java
│ │ │ │ │ ├── gif/
│ │ │ │ │ │ ├── ByteBufferGifDecoder.java
│ │ │ │ │ │ ├── GifBitmapProvider.java
│ │ │ │ │ │ ├── GifDrawable.java
│ │ │ │ │ │ ├── GifDrawableEncoder.java
│ │ │ │ │ │ ├── GifDrawableResource.java
│ │ │ │ │ │ ├── GifDrawableTransformation.java
│ │ │ │ │ │ ├── GifFrameLoader.java
│ │ │ │ │ │ ├── GifFrameResourceDecoder.java
│ │ │ │ │ │ ├── GifOptions.java
│ │ │ │ │ │ └── StreamGifDecoder.java
│ │ │ │ │ └── transcode/
│ │ │ │ │ ├── BitmapBytesTranscoder.java
│ │ │ │ │ ├── BitmapDrawableTranscoder.java
│ │ │ │ │ ├── DrawableBytesTranscoder.java
│ │ │ │ │ ├── GifDrawableBytesTranscoder.java
│ │ │ │ │ ├── ResourceTranscoder.java
│ │ │ │ │ ├── TranscoderRegistry.java
│ │ │ │ │ └── UnitTranscoder.java
│ │ │ │ ├── manager/
│ │ │ │ │ ├── ApplicationLifecycle.java
│ │ │ │ │ ├── ConnectivityMonitor.java
│ │ │ │ │ ├── ConnectivityMonitorFactory.java
│ │ │ │ │ ├── DefaultConnectivityMonitor.java
│ │ │ │ │ ├── DefaultConnectivityMonitorFactory.java
│ │ │ │ │ ├── DoNothingFirstFrameWaiter.java
│ │ │ │ │ ├── EmptyRequestManagerTreeNode.java
│ │ │ │ │ ├── FirstFrameWaiter.java
│ │ │ │ │ ├── FrameWaiter.java
│ │ │ │ │ ├── Lifecycle.java
│ │ │ │ │ ├── LifecycleLifecycle.java
│ │ │ │ │ ├── LifecycleListener.java
│ │ │ │ │ ├── LifecycleRequestManagerRetriever.java
│ │ │ │ │ ├── NullConnectivityMonitor.java
│ │ │ │ │ ├── RequestManagerFragment.java
│ │ │ │ │ ├── RequestManagerRetriever.java
│ │ │ │ │ ├── RequestManagerTreeNode.java
│ │ │ │ │ ├── RequestTracker.java
│ │ │ │ │ ├── SingletonConnectivityReceiver.java
│ │ │ │ │ ├── SupportRequestManagerFragment.java
│ │ │ │ │ └── TargetTracker.java
│ │ │ │ ├── module/
│ │ │ │ │ ├── AppGlideModule.java
│ │ │ │ │ ├── AppliesOptions.java
│ │ │ │ │ ├── GlideModule.java
│ │ │ │ │ ├── LibraryGlideModule.java
│ │ │ │ │ ├── ManifestParser.java
│ │ │ │ │ └── RegistersComponents.java
│ │ │ │ ├── provider/
│ │ │ │ │ ├── EncoderRegistry.java
│ │ │ │ │ ├── ImageHeaderParserRegistry.java
│ │ │ │ │ ├── LoadPathCache.java
│ │ │ │ │ ├── ModelToResourceClassCache.java
│ │ │ │ │ ├── ResourceDecoderRegistry.java
│ │ │ │ │ └── ResourceEncoderRegistry.java
│ │ │ │ ├── request/
│ │ │ │ │ ├── BaseRequestOptions.java
│ │ │ │ │ ├── ErrorRequestCoordinator.java
│ │ │ │ │ ├── ExperimentalRequestListener.java
│ │ │ │ │ ├── FutureTarget.java
│ │ │ │ │ ├── Request.java
│ │ │ │ │ ├── RequestCoordinator.java
│ │ │ │ │ ├── RequestFutureTarget.java
│ │ │ │ │ ├── RequestListener.java
│ │ │ │ │ ├── RequestOptions.java
│ │ │ │ │ ├── ResourceCallback.java
│ │ │ │ │ ├── SingleRequest.java
│ │ │ │ │ ├── ThumbnailRequestCoordinator.java
│ │ │ │ │ ├── target/
│ │ │ │ │ │ ├── AppWidgetTarget.java
│ │ │ │ │ │ ├── BaseTarget.java
│ │ │ │ │ │ ├── BitmapImageViewTarget.java
│ │ │ │ │ │ ├── BitmapThumbnailImageViewTarget.java
│ │ │ │ │ │ ├── CustomTarget.java
│ │ │ │ │ │ ├── CustomViewTarget.java
│ │ │ │ │ │ ├── DrawableImageViewTarget.java
│ │ │ │ │ │ ├── DrawableThumbnailImageViewTarget.java
│ │ │ │ │ │ ├── FixedSizeDrawable.java
│ │ │ │ │ │ ├── ImageViewTarget.java
│ │ │ │ │ │ ├── ImageViewTargetFactory.java
│ │ │ │ │ │ ├── NotificationTarget.java
│ │ │ │ │ │ ├── PreloadTarget.java
│ │ │ │ │ │ ├── SimpleTarget.java
│ │ │ │ │ │ ├── SizeReadyCallback.java
│ │ │ │ │ │ ├── Target.java
│ │ │ │ │ │ ├── ThumbnailImageViewTarget.java
│ │ │ │ │ │ └── ViewTarget.java
│ │ │ │ │ └── transition/
│ │ │ │ │ ├── BitmapContainerTransitionFactory.java
│ │ │ │ │ ├── BitmapTransitionFactory.java
│ │ │ │ │ ├── DrawableCrossFadeFactory.java
│ │ │ │ │ ├── DrawableCrossFadeTransition.java
│ │ │ │ │ ├── NoTransition.java
│ │ │ │ │ ├── Transition.java
│ │ │ │ │ ├── TransitionFactory.java
│ │ │ │ │ ├── ViewAnimationFactory.java
│ │ │ │ │ ├── ViewPropertyAnimationFactory.java
│ │ │ │ │ ├── ViewPropertyTransition.java
│ │ │ │ │ └── ViewTransition.java
│ │ │ │ ├── signature/
│ │ │ │ │ ├── AndroidResourceSignature.java
│ │ │ │ │ ├── ApplicationVersionSignature.java
│ │ │ │ │ ├── EmptySignature.java
│ │ │ │ │ ├── MediaStoreSignature.java
│ │ │ │ │ └── ObjectKey.java
│ │ │ │ └── util/
│ │ │ │ ├── ByteBufferUtil.java
│ │ │ │ ├── CachedHashCodeArrayMap.java
│ │ │ │ ├── ContentLengthInputStream.java
│ │ │ │ ├── ExceptionCatchingInputStream.java
│ │ │ │ ├── ExceptionPassthroughInputStream.java
│ │ │ │ ├── Executors.java
│ │ │ │ ├── FixedPreloadSizeProvider.java
│ │ │ │ ├── GlideSuppliers.java
│ │ │ │ ├── LogTime.java
│ │ │ │ ├── LruCache.java
│ │ │ │ ├── MarkEnforcingInputStream.java
│ │ │ │ ├── MultiClassKey.java
│ │ │ │ ├── Preconditions.java
│ │ │ │ ├── Synthetic.java
│ │ │ │ ├── Util.java
│ │ │ │ ├── ViewPreloadSizeProvider.java
│ │ │ │ └── pool/
│ │ │ │ ├── FactoryPools.java
│ │ │ │ ├── GlideTrace.java
│ │ │ │ └── StateVerifier.java
│ │ │ └── res/
│ │ │ └── values/
│ │ │ └── ids.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── request/
│ │ └── target/
│ │ └── CustomViewTargetTest.java
│ └── test/
│ ├── build.gradle.kts
│ └── src/
│ └── test/
│ ├── java/
│ │ ├── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ ├── GlideContextTest.java
│ │ │ ├── GlideTest.java
│ │ │ ├── InitializeGlideTest.java
│ │ │ ├── ListPreloaderTest.java
│ │ │ ├── RegistryFactoryTest.java
│ │ │ ├── RegistryTest.java
│ │ │ ├── RequestBuilderTest.java
│ │ │ ├── RequestManagerTest.java
│ │ │ ├── load/
│ │ │ │ ├── ImageHeaderParserUtilsTest.java
│ │ │ │ ├── MultiTransformationTest.java
│ │ │ │ ├── OptionsTest.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BufferedOutputStreamFuzzTest.java
│ │ │ │ │ ├── BufferedOutputStreamTest.java
│ │ │ │ │ ├── ExifOrientationStreamTest.java
│ │ │ │ │ ├── FileDescriptorAssetPathFetcherTest.java
│ │ │ │ │ ├── HttpUrlFetcherServerTest.java
│ │ │ │ │ ├── HttpUrlFetcherTest.java
│ │ │ │ │ ├── LocalUriFetcherTest.java
│ │ │ │ │ ├── StreamAssetPathFetcherTest.java
│ │ │ │ │ ├── mediastore/
│ │ │ │ │ │ ├── MediaStoreUtilTest.java
│ │ │ │ │ │ ├── ThumbFetcherTest.java
│ │ │ │ │ │ └── ThumbnailStreamOpenerTest.java
│ │ │ │ │ └── resource/
│ │ │ │ │ ├── FileDescriptorLocalUriFetcherTest.java
│ │ │ │ │ └── StreamLocalUriFetcherTest.java
│ │ │ │ ├── engine/
│ │ │ │ │ ├── ActiveResourcesTest.java
│ │ │ │ │ ├── DataCacheKeyTest.java
│ │ │ │ │ ├── EngineJobTest.java
│ │ │ │ │ ├── EngineKeyTest.java
│ │ │ │ │ ├── EngineResourceTest.java
│ │ │ │ │ ├── EngineTest.java
│ │ │ │ │ ├── ResourceCacheKeyTest.java
│ │ │ │ │ ├── ResourceRecyclerTest.java
│ │ │ │ │ ├── bitmap_recycle/
│ │ │ │ │ │ ├── AttributeStrategyKeyTest.java
│ │ │ │ │ │ ├── AttributeStrategyTest.java
│ │ │ │ │ │ ├── GroupedLinkedMapTest.java
│ │ │ │ │ │ ├── LruArrayPoolTest.java
│ │ │ │ │ │ ├── LruBitmapPoolTest.java
│ │ │ │ │ │ ├── SizeConfigStrategyTest.java
│ │ │ │ │ │ └── SizeStrategyKeyTest.java
│ │ │ │ │ ├── cache/
│ │ │ │ │ │ ├── DiskLruCacheWrapperTest.java
│ │ │ │ │ │ ├── LruCacheTest.java
│ │ │ │ │ │ ├── LruResourceCacheTest.java
│ │ │ │ │ │ ├── MemorySizeCalculatorTest.java
│ │ │ │ │ │ └── SafeKeyGeneratorTest.java
│ │ │ │ │ ├── executor/
│ │ │ │ │ │ └── GlideExecutorTest.java
│ │ │ │ │ └── prefill/
│ │ │ │ │ ├── BitmapPreFillRunnerTest.java
│ │ │ │ │ ├── BitmapPreFillerTest.java
│ │ │ │ │ └── PreFillTypeTest.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── AssetUriLoaderTest.java
│ │ │ │ │ ├── ByteArrayLoaderTest.java
│ │ │ │ │ ├── DataUrlLoaderTest.java
│ │ │ │ │ ├── GlideUrlTest.java
│ │ │ │ │ ├── LazyHeadersTest.java
│ │ │ │ │ ├── ModelCacheTest.java
│ │ │ │ │ ├── ModelLoaderRegistryTest.java
│ │ │ │ │ ├── MultiModelLoaderFactoryTest.java
│ │ │ │ │ ├── ResourceLoaderTest.java
│ │ │ │ │ ├── StreamEncoderTest.java
│ │ │ │ │ ├── StringLoaderTest.java
│ │ │ │ │ ├── UriLoaderTest.java
│ │ │ │ │ ├── UrlUriLoaderTest.java
│ │ │ │ │ └── stream/
│ │ │ │ │ ├── BaseGlideUrlLoaderTest.java
│ │ │ │ │ └── HttpGlideUrlLoaderTest.java
│ │ │ │ └── resource/
│ │ │ │ ├── SimpleResourceTest.java
│ │ │ │ ├── UnitTransformationTest.java
│ │ │ │ ├── bitmap/
│ │ │ │ │ ├── BitmapDrawableResourceTest.java
│ │ │ │ │ ├── BitmapDrawableTransformationTest.java
│ │ │ │ │ ├── BitmapEncoderTest.java
│ │ │ │ │ ├── BitmapResourceTest.java
│ │ │ │ │ ├── BitmapTransformationTest.java
│ │ │ │ │ ├── CenterCropTest.java
│ │ │ │ │ ├── CenterInsideTest.java
│ │ │ │ │ ├── CircleCropTest.java
│ │ │ │ │ ├── DefaultImageHeaderParserTest.java
│ │ │ │ │ ├── DownsampleStrategyTest.java
│ │ │ │ │ ├── DrawableTransformationTest.java
│ │ │ │ │ ├── FitCenterTest.java
│ │ │ │ │ ├── HardwareConfigStateTest.java
│ │ │ │ │ ├── LazyBitmapDrawableResourceTest.java
│ │ │ │ │ ├── RecyclableBufferedInputStreamTest.java
│ │ │ │ │ ├── TransformationUtilsTest.java
│ │ │ │ │ └── VideoDecoderTest.java
│ │ │ │ ├── bytes/
│ │ │ │ │ └── BytesResourceTest.java
│ │ │ │ ├── drawable/
│ │ │ │ │ └── DrawableResourceTest.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileDecoderTest.java
│ │ │ │ │ └── FileResourceTest.java
│ │ │ │ ├── gif/
│ │ │ │ │ ├── ByteBufferGifDecoderTest.java
│ │ │ │ │ ├── GifDrawableResourceTest.java
│ │ │ │ │ ├── GifDrawableTest.java
│ │ │ │ │ ├── GifDrawableTransformationTest.java
│ │ │ │ │ ├── GifFrameLoaderTest.java
│ │ │ │ │ ├── GifFrameResourceDecoderTest.java
│ │ │ │ │ └── StreamGifDecoderTest.java
│ │ │ │ └── transcode/
│ │ │ │ ├── BitmapBytesTranscoderTest.java
│ │ │ │ ├── BitmapDrawableTranscoderTest.java
│ │ │ │ ├── GifDrawableBytesTranscoderTest.java
│ │ │ │ ├── TranscoderRegistryTest.java
│ │ │ │ └── UnitTranscoderTest.java
│ │ │ ├── manager/
│ │ │ │ ├── DefaultConnectivityMonitorFactoryTest.java
│ │ │ │ ├── DefaultConnectivityMonitorTest.java
│ │ │ │ ├── Issue117Activity.java
│ │ │ │ ├── RequestManagerRetrieverTest.java
│ │ │ │ └── RequestTrackerTest.java
│ │ │ ├── module/
│ │ │ │ └── ManifestParserTest.java
│ │ │ ├── request/
│ │ │ │ ├── ErrorRequestCoordinatorTest.java
│ │ │ │ ├── RequestFutureTargetTest.java
│ │ │ │ ├── RequestOptionsTest.java
│ │ │ │ ├── SingleRequestTest.java
│ │ │ │ ├── ThumbnailRequestCoordinatorTest.java
│ │ │ │ ├── target/
│ │ │ │ │ ├── AppWidgetTargetTest.java
│ │ │ │ │ ├── BitmapImageViewTargetTest.java
│ │ │ │ │ ├── ImageViewTargetFactoryTest.java
│ │ │ │ │ ├── ImageViewTargetTest.java
│ │ │ │ │ ├── NotificationTargetTest.java
│ │ │ │ │ ├── PreloadTargetTest.java
│ │ │ │ │ ├── SimpleTargetTest.java
│ │ │ │ │ └── ViewTargetTest.java
│ │ │ │ └── transition/
│ │ │ │ ├── DrawableCrossFadeFactoryTest.java
│ │ │ │ ├── DrawableCrossFadeViewAnimationTest.java
│ │ │ │ ├── ViewAnimationTest.java
│ │ │ │ ├── ViewPropertyAnimationTest.java
│ │ │ │ ├── ViewPropertyViewTransitionAnimationFactoryTest.java
│ │ │ │ └── ViewTransitionAnimationFactoryTest.java
│ │ │ ├── resize/
│ │ │ │ └── load/
│ │ │ │ └── ExifTest.java
│ │ │ ├── signature/
│ │ │ │ ├── AndroidResourceSignatureTest.java
│ │ │ │ ├── ApplicationVersionSignatureTest.java
│ │ │ │ ├── EmptySignatureTest.java
│ │ │ │ ├── MediaStoreSignatureTest.java
│ │ │ │ └── ObjectKeyTest.java
│ │ │ ├── tests/
│ │ │ │ ├── BackgroundUtil.java
│ │ │ │ ├── ContentResolverShadow.java
│ │ │ │ ├── GlideShadowLog.java
│ │ │ │ ├── KeyTester.java
│ │ │ │ ├── TearDownGlide.java
│ │ │ │ └── Util.java
│ │ │ └── util/
│ │ │ ├── ByteBufferUtilTest.java
│ │ │ ├── ContentLengthInputStreamTest.java
│ │ │ ├── ExceptionPassthroughInputStreamTest.java
│ │ │ ├── FixedPreloadSizeProviderTest.java
│ │ │ ├── MarkEnforcingInputStreamTest.java
│ │ │ ├── UtilTest.java
│ │ │ └── ViewPreloadSizeProviderTest.java
│ │ └── opengles/
│ │ └── GL.java
│ └── resources/
│ ├── animated_avif.avif
│ └── org.robolectric.Config.properties
├── mocks/
│ ├── build.gradle.kts
│ ├── gradle.properties
│ ├── lint.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ ├── load/
│ │ └── engine/
│ │ └── executor/
│ │ └── MockGlideExecutor.java
│ └── mocks/
│ ├── AnswerSelf.java
│ └── MockGlideBuilders.java
├── renovate.json
├── samples/
│ ├── contacturi/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── contacturi/
│ │ │ ├── ContactUriModule.java
│ │ │ └── MainActivity.java
│ │ └── res/
│ │ ├── layout/
│ │ │ └── activity_main.xml
│ │ └── values/
│ │ ├── dimens.xml
│ │ └── strings.xml
│ ├── flickr/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── flickr/
│ │ │ ├── FlickrGlideExtension.java
│ │ │ ├── FlickrGlideModule.java
│ │ │ ├── FlickrModelLoader.java
│ │ │ ├── FlickrPhotoGrid.java
│ │ │ ├── FlickrPhotoList.java
│ │ │ ├── FlickrSearchActivity.java
│ │ │ ├── FullscreenActivity.java
│ │ │ ├── PhotoViewer.java
│ │ │ ├── SquareImageView.java
│ │ │ └── api/
│ │ │ ├── Api.java
│ │ │ ├── FlickrQueryResponseListener.java
│ │ │ ├── Photo.java
│ │ │ ├── PhotoJsonStringParser.java
│ │ │ ├── Query.java
│ │ │ ├── RecentQuery.java
│ │ │ └── SearchQuery.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── flickr_photo_grid.xml
│ │ │ ├── flickr_photo_grid_item.xml
│ │ │ ├── flickr_photo_list.xml
│ │ │ ├── flickr_photo_list_item.xml
│ │ │ ├── flickr_search_activity.xml
│ │ │ └── fullscreen_activity.xml
│ │ ├── menu/
│ │ │ └── search_activity.xml
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ └── strings.xml
│ │ └── xml/
│ │ └── network_security_config.xml
│ ├── gallery/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── gallery/
│ │ │ ├── GalleryModule.kt
│ │ │ ├── GalleryViewModel.kt
│ │ │ ├── HorizontalGalleryFragment.kt
│ │ │ ├── MainActivity.kt
│ │ │ └── MediaStoreDataSource.kt
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── main_activity.xml
│ │ │ ├── recycler_item.xml
│ │ │ └── recycler_view.xml
│ │ └── values/
│ │ ├── ids.xml
│ │ └── strings.xml
│ ├── giphy/
│ │ ├── build.gradle.kts
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── giphy/
│ │ │ ├── Api.java
│ │ │ ├── FullscreenActivity.java
│ │ │ ├── GiphyGlideModule.java
│ │ │ ├── GiphyModelLoader.java
│ │ │ └── MainActivity.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ ├── fullscreen_activity.xml
│ │ │ └── gif_list_item.xml
│ │ └── values/
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── imgur/
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── lint.xml
│ │ └── src/
│ │ └── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── bumptech/
│ │ │ └── glide/
│ │ │ └── samples/
│ │ │ └── imgur/
│ │ │ ├── ApplicationModule.java
│ │ │ ├── ImgurApplication.java
│ │ │ ├── ImgurApplicationComponent.java
│ │ │ ├── ImgurGlideModule.java
│ │ │ ├── MainActivity.java
│ │ │ ├── MainActivityModule.java
│ │ │ └── api/
│ │ │ ├── ApiModule.java
│ │ │ ├── Gallery.java
│ │ │ ├── Image.java
│ │ │ ├── ImgurObservables.java
│ │ │ └── ImgurService.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ └── image_card.xml
│ │ ├── values/
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── xml/
│ │ └── network_security_config.xml
│ └── svg/
│ ├── build.gradle.kts
│ ├── lint.xml
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── samples/
│ │ └── svg/
│ │ ├── MainActivity.java
│ │ ├── SvgDecoder.java
│ │ ├── SvgDrawableTranscoder.java
│ │ ├── SvgModule.java
│ │ └── SvgSoftwareLayerSetter.java
│ └── res/
│ ├── drawable/
│ │ ├── dot_dot_dot.xml
│ │ ├── image_error.xml
│ │ └── image_loading.xml
│ ├── layout/
│ │ └── activity_main.xml
│ ├── values/
│ │ ├── dimens.xml
│ │ └── strings.xml
│ └── values-w820dp/
│ └── dimens.xml
├── scripts/
│ ├── run_instrumentation_tests.sh
│ ├── update_javadocs.sh
│ └── upload.gradle.kts
├── settings.gradle.kts
├── static/
│ └── logo-styles.css
├── testutil/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ ├── RobolectricConstants.java
│ └── testutil/
│ ├── BitmapSubject.java
│ ├── ConcurrencyHelper.java
│ ├── MockModelLoader.java
│ ├── TearDownGlide.java
│ ├── TestResourceUtil.java
│ ├── TestUtil.java
│ ├── WaitModelLoader.java
│ └── WaitModelLoaderRule.java
└── third_party/
├── disklrucache/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── LICENSE.txt
│ ├── README.md
│ ├── THIRD_PARTY.md
│ ├── build.gradle.kts
│ ├── checkstyle.xml
│ ├── gradle.properties
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── disklrucache/
│ │ ├── DiskLruCache.java
│ │ ├── StrictLineReader.java
│ │ └── Util.java
│ └── test/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── disklrucache/
│ ├── DiskLruCacheTest.java
│ └── StrictLineReaderTest.java
├── gif_decoder/
│ ├── LICENSE
│ ├── THIRD_PARTY.md
│ ├── build.gradle.kts
│ ├── gradle.properties
│ ├── lint.xml
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── bumptech/
│ │ └── glide/
│ │ └── gifdecoder/
│ │ ├── GifDecoder.java
│ │ ├── GifFrame.java
│ │ ├── GifHeader.java
│ │ ├── GifHeaderParser.java
│ │ └── StandardGifDecoder.java
│ └── test/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── gifdecoder/
│ ├── GifDecoderTest.java
│ ├── GifHeaderParserTest.java
│ └── test/
│ ├── GifBytesTestUtil.java
│ └── GifBytesTestUtilTest.java
├── gif_encoder/
│ ├── LICENSE
│ ├── THIRD_PARTY.md
│ ├── lint.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── bumptech/
│ └── glide/
│ └── gifencoder/
│ ├── AnimatedGifEncoder.java
│ ├── LZWEncoder.java
│ └── NeuQuant.java
└── gradle.properties
Showing preview only (718K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (9336 symbols across 710 files)
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/AppModuleGenerator.java
class AppModuleGenerator (line 83) | final class AppModuleGenerator {
method AppModuleGenerator (line 92) | AppModuleGenerator(ProcessingEnvironment processingEnv, ProcessorUtil ...
method generate (line 97) | TypeSpec generate(TypeElement appGlideModule, Set<String> libraryGlide...
method generateGetExcludedModuleClasses (line 175) | private MethodSpec generateGetExcludedModuleClasses(Collection<String>...
method generateRegisterComponents (line 209) | private MethodSpec generateRegisterComponents(
method doesAppGlideModuleConstructorAcceptContext (line 242) | private boolean doesAppGlideModuleConstructorAcceptContext(ClassName a...
method generateConstructor (line 273) | private MethodSpec generateConstructor(
method getExcludedGlideModuleClassNames (line 320) | private List<String> getExcludedGlideModuleClassNames(TypeElement appG...
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/AppModuleProcessor.java
class AppModuleProcessor (line 21) | final class AppModuleProcessor {
method AppModuleProcessor (line 35) | AppModuleProcessor(ProcessingEnvironment processingEnv, ProcessorUtil ...
method processModules (line 48) | void processModules(Set<? extends TypeElement> set, RoundEnvironment e...
method maybeWriteAppModule (line 63) | boolean maybeWriteAppModule() {
method getGlideName (line 120) | private String getGlideName(TypeElement appModule) {
method getIndexedClassNames (line 124) | @SuppressWarnings("unchecked")
method writeGlide (line 143) | private void writeGlide(String packageName, TypeSpec glide) {
method writeRequestManager (line 147) | private void writeRequestManager(String packageName, TypeSpec requestM...
method writeRequestManagerFactory (line 152) | private void writeRequestManagerFactory(TypeSpec requestManagerFactory) {
method writeAppModule (line 159) | private void writeAppModule(TypeSpec appModule) {
method writeRequestOptions (line 163) | private void writeRequestOptions(String packageName, TypeSpec requestO...
method writeRequestBuilder (line 167) | private void writeRequestBuilder(String packageName, TypeSpec requestB...
class FoundIndexedClassNames (line 171) | private static final class FoundIndexedClassNames {
method FoundIndexedClassNames (line 175) | private FoundIndexedClassNames(Set<String> glideModules, Set<String>...
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/ExtensionProcessor.java
class ExtensionProcessor (line 16) | final class ExtensionProcessor {
method ExtensionProcessor (line 21) | ExtensionProcessor(
method processExtensions (line 30) | boolean processExtensions(RoundEnvironment env) {
method getSupportedAnnotationTypes (line 46) | Set<String> getSupportedAnnotationTypes() {
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideAnnotationProcessor.java
class GlideAnnotationProcessor (line 62) | @AutoService(Processor.class)
method init (line 71) | @Override
method getSupportedAnnotationTypes (line 82) | @Override
method getSupportedSourceVersion (line 90) | @Override
method process (line 109) | @Override
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideExtensionValidator.java
class GlideExtensionValidator (line 33) | final class GlideExtensionValidator {
method GlideExtensionValidator (line 37) | GlideExtensionValidator(
method validateExtension (line 43) | void validateExtension(TypeElement typeElement) {
method getQualifiedMethodName (line 62) | private static String getQualifiedMethodName(ExecutableElement executa...
method getEnclosingClassName (line 66) | private static String getEnclosingClassName(Element element) {
method getName (line 70) | private static String getName(Element element) {
method validateExtensionConstructor (line 74) | private static void validateExtensionConstructor(Element element) {
method validateGlideOption (line 90) | private void validateGlideOption(ExecutableElement executableElement) {
method validateGlideOptionAnnotations (line 108) | private void validateGlideOptionAnnotations(ExecutableElement executab...
method validateGlideOptionParameters (line 112) | private static void validateGlideOptionParameters(ExecutableElement ex...
method isBaseRequestOptions (line 133) | private static boolean isBaseRequestOptions(TypeMirror typeMirror) {
method validateGlideOptionOverride (line 137) | private void validateGlideOptionOverride(ExecutableElement element) {
method isMethodInBaseRequestOptions (line 154) | private boolean isMethodInBaseRequestOptions(ExecutableElement toFind) {
method getComparableParameterNames (line 180) | private static List<String> getComparableParameterNames(
method validateGlideType (line 193) | private void validateGlideType(ExecutableElement executableElement) {
method getGlideTypeValue (line 212) | private String getGlideTypeValue(ExecutableElement executableElement) {
method typeMatchesExpected (line 219) | private boolean typeMatchesExpected(TypeMirror returnType, ExecutableE...
method isRequestBuilder (line 232) | private boolean isRequestBuilder(TypeMirror typeMirror) {
method validateGlideTypeParameters (line 237) | private static void validateGlideTypeParameters(ExecutableElement exec...
method validateGlideTypeAnnotations (line 257) | private void validateGlideTypeAnnotations(ExecutableElement executable...
method validateAnnotatedNonNull (line 261) | private void validateAnnotatedNonNull(ExecutableElement executableElem...
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideGenerator.java
class GlideGenerator (line 73) | final class GlideGenerator {
method GlideGenerator (line 86) | GlideGenerator(ProcessingEnvironment processingEnv, ProcessorUtil proc...
method generate (line 97) | TypeSpec generate(
method generateOverridesForGlideMethods (line 118) | private List<MethodSpec> generateOverridesForGlideMethods(
method overrideGlideStaticMethod (line 135) | private MethodSpec overrideGlideStaticMethod(ExecutableElement methodT...
method addReturnAnnotations (line 171) | private Builder addReturnAnnotations(Builder builder, ExecutableElemen...
method discoverGlideMethodsToOverride (line 195) | private List<ExecutableElement> discoverGlideMethodsToOverride() {
method isGlideWithMethod (line 199) | private boolean isGlideWithMethod(ExecutableElement element) {
method overrideGlideWithMethod (line 203) | private MethodSpec overrideGlideWithMethod(
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/IndexerGenerator.java
class IndexerGenerator (line 48) | final class IndexerGenerator {
method IndexerGenerator (line 53) | IndexerGenerator(ProcessorUtil processorUtil) {
method generate (line 57) | TypeSpec generate(List<TypeElement> types) {
method generate (line 84) | private TypeSpec generate(
method getAnnotationValue (line 117) | private static String getAnnotationValue(Class<? extends Annotation> a...
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/LibraryModuleProcessor.java
class LibraryModuleProcessor (line 13) | final class LibraryModuleProcessor {
method LibraryModuleProcessor (line 17) | LibraryModuleProcessor(ProcessorUtil processorUtil, IndexerGenerator i...
method processModules (line 22) | boolean processModules(RoundEnvironment env) {
method getSupportedAnnotationTypes (line 58) | Set<String> getSupportedAnnotationTypes() {
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/ProcessorUtil.java
class ProcessorUtil (line 55) | final class ProcessorUtil {
method ProcessorUtil (line 85) | ProcessorUtil(ProcessingEnvironment processingEnv) {
method process (line 94) | void process() {
method isAppGlideModule (line 98) | boolean isAppGlideModule(TypeElement element) {
method isLibraryGlideModule (line 102) | boolean isLibraryGlideModule(TypeElement element) {
method isExtension (line 108) | boolean isExtension(TypeElement element) {
method getOverrideType (line 112) | int getOverrideType(ExecutableElement element) {
method writeIndexer (line 117) | void writeIndexer(TypeSpec indexer) {
method writeClass (line 121) | void writeClass(String packageName, TypeSpec clazz) {
method findAnnotatedElementsInClasses (line 133) | List<ExecutableElement> findAnnotatedElementsInClasses(
method getElementsFor (line 148) | List<TypeElement> getElementsFor(Class<? extends Annotation> clazz, Ro...
method generateSeeMethodJavadoc (line 168) | CodeBlock generateSeeMethodJavadoc(ExecutableElement method) {
method generateSeeMethodJavadoc (line 198) | CodeBlock generateSeeMethodJavadoc(
method generateSeeMethodJavadoc (line 215) | CodeBlock generateSeeMethodJavadoc(TypeName nameOfClassContainingMetho...
method generateSeeMethodJavadocInternal (line 229) | private CodeBlock generateSeeMethodJavadocInternal(
method getJavadocSafeName (line 253) | private TypeName getJavadocSafeName(Element element) {
method debugLog (line 264) | void debugLog(String toLog) {
method infoLog (line 270) | void infoLog(String toLog) {
method generateCastingSuperCall (line 274) | static CodeBlock generateCastingSuperCall(TypeName toReturn, MethodSpe...
method overriding (line 291) | MethodSpec.Builder overriding(ExecutableElement method) {
method getParameters (line 328) | List<ParameterSpec> getParameters(ExecutableElement method) {
method getParameters (line 332) | List<ParameterSpec> getParameters(List<? extends VariableElement> para...
method dedupedParameters (line 340) | private static List<ParameterSpec> dedupedParameters(List<ParameterSpe...
method getParameter (line 368) | private ParameterSpec getParameter(VariableElement parameter) {
method computeParameterName (line 376) | private static String computeParameterName(VariableElement parameter, ...
method getSmartPrimitiveParameterName (line 430) | private static String getSmartPrimitiveParameterName(VariableElement p...
method applySmartParameterNameReplacements (line 445) | private static String applySmartParameterNameReplacements(String name) {
method getAnnotations (line 452) | private List<AnnotationSpec> getAnnotations(VariableElement element) {
method maybeConvertSupportLibraryAnnotation (line 460) | private AnnotationSpec maybeConvertSupportLibraryAnnotation(Annotation...
method visibleForTesting (line 483) | ClassName visibleForTesting() {
method nonNull (line 487) | ClassName nonNull() {
method checkResult (line 491) | ClassName checkResult() {
method nonNulls (line 496) | static List<ClassName> nonNulls() {
method findAnnotationClassName (line 501) | private ClassName findAnnotationClassName(ClassName androidxName, Clas...
method findInstanceMethodsReturning (line 512) | List<ExecutableElement> findInstanceMethodsReturning(TypeElement clazz...
method findInstanceMethodsReturning (line 519) | List<ExecutableElement> findInstanceMethodsReturning(TypeElement clazz...
method findStaticMethodsReturning (line 526) | List<ExecutableElement> findStaticMethodsReturning(TypeElement clazz, ...
method findStaticMethods (line 533) | List<ExecutableElement> findStaticMethods(TypeElement clazz) {
method findClassValuesFromAnnotationOnClassAsNames (line 540) | ImmutableSet<String> findClassValuesFromAnnotationOnClassAsNames(
method qualifiedNameFromTypeMirror (line 582) | static String qualifiedNameFromTypeMirror(TypeMirror type) {
type MethodType (line 594) | private enum MethodType {
class FilterPublicMethods (line 599) | private final class FilterPublicMethods implements Predicate<Element> {
method FilterPublicMethods (line 603) | FilterPublicMethods(@Nullable TypeMirror returnType, MethodType meth...
method FilterPublicMethods (line 608) | FilterPublicMethods(@Nullable TypeElement returnType, MethodType met...
method apply (line 612) | @Override
method isReturnValueTypeMatching (line 630) | boolean isReturnValueTypeMatching(ExecutableElement method, TypeElemen...
method isReturnValueTypeMatching (line 634) | private boolean isReturnValueTypeMatching(
class ToMethod (line 639) | private static final class ToMethod implements Function<Element, Execu...
method apply (line 641) | @Nullable
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestBuilderGenerator.java
class RequestBuilderGenerator (line 86) | final class RequestBuilderGenerator {
method RequestBuilderGenerator (line 119) | RequestBuilderGenerator(ProcessingEnvironment processingEnv, Processor...
method generate (line 132) | TypeSpec generate(
method generateGeneratedRequestOptionsEquivalents (line 196) | private List<MethodSpec> generateGeneratedRequestOptionsEquivalents(
method isUsefulGeneratedRequestOption (line 228) | private boolean isUsefulGeneratedRequestOption(
method isExtensionMethod (line 237) | private boolean isExtensionMethod(
method generateGeneratedRequestOptionEquivalent (line 254) | private MethodSpec generateGeneratedRequestOptionEquivalent(MethodSpec...
method buildSuppressWarnings (line 306) | @Nullable
method generateRequestBuilderOverrides (line 354) | private List<MethodSpec> generateRequestBuilderOverrides() {
method generateRequestBuilderOverride (line 372) | private MethodSpec generateRequestBuilderOverride(ExecutableElement me...
method generateConstructors (line 420) | private List<MethodSpec> generateConstructors() {
method generateDownloadOnlyRequestMethod (line 472) | private MethodSpec generateDownloadOnlyRequestMethod() {
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestManagerFactoryGenerator.java
class RequestManagerFactoryGenerator (line 33) | final class RequestManagerFactoryGenerator {
method RequestManagerFactoryGenerator (line 54) | RequestManagerFactoryGenerator(ProcessingEnvironment processingEnv, Pr...
method generate (line 69) | TypeSpec generate(String generatedCodePackageName, TypeSpec generatedR...
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestManagerGenerator.java
class RequestManagerGenerator (line 54) | final class RequestManagerGenerator {
method RequestManagerGenerator (line 74) | RequestManagerGenerator(ProcessingEnvironment processingEnv, Processor...
method generate (line 93) | TypeSpec generate(
method generateCallSuperConstructor (line 127) | private MethodSpec generateCallSuperConstructor() {
method generateAsMethod (line 150) | private MethodSpec generateAsMethod(String generatedCodePackageName, T...
method generateRequestManagerRequestManagerMethodOverrides (line 178) | private List<MethodSpec> generateRequestManagerRequestManagerMethodOve...
method generateRequestManagerRequestManagerMethodOverride (line 193) | private MethodSpec generateRequestManagerRequestManagerMethodOverride(
method generateRequestManagerRequestBuilderMethodOverrides (line 209) | private List<MethodSpec> generateRequestManagerRequestBuilderMethodOve...
method generateRequestManagerRequestBuilderMethodOverride (line 240) | private MethodSpec generateRequestManagerRequestBuilderMethodOverride(
method generateExtensionRequestManagerMethods (line 261) | private List<MethodSpec> generateExtensionRequestManagerMethods(Set<St...
method generateAdditionalRequestManagerMethod (line 276) | private MethodSpec generateAdditionalRequestManagerMethod(ExecutableEl...
method generateAdditionalRequestManagerMethodLegacy (line 284) | private MethodSpec generateAdditionalRequestManagerMethodLegacy(
method generateAdditionalRequestManagerMethodNew (line 311) | private MethodSpec generateAdditionalRequestManagerMethodNew(Executabl...
method generateOverrideSetRequestOptions (line 341) | @Nullable
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsExtensionGenerator.java
class RequestOptionsExtensionGenerator (line 24) | final class RequestOptionsExtensionGenerator {
method RequestOptionsExtensionGenerator (line 28) | RequestOptionsExtensionGenerator(TypeName containingClassName, Process...
method getRequestOptionExtensionMethods (line 37) | List<ExecutableElement> getRequestOptionExtensionMethods(Set<String> g...
method generateInstanceMethodsForExtensions (line 46) | List<MethodSpec> generateInstanceMethodsForExtensions(Set<String> glid...
method generateMethodsForRequestOptionsExtension (line 58) | private MethodSpec generateMethodsForRequestOptionsExtension(Executabl...
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java
class RequestOptionsGenerator (line 67) | final class RequestOptionsGenerator {
method RequestOptionsGenerator (line 87) | RequestOptionsGenerator(
method generate (line 100) | TypeSpec generate(String generatedCodePackageName, Set<String> glideEx...
method generateClassJavadoc (line 197) | private CodeBlock generateClassJavadoc(Set<String> glideExtensionClass...
method generateStaticMethodOverridesForRequestOptions (line 212) | private List<MethodAndStaticVar> generateStaticMethodOverridesForReque...
method getInstanceMethodNameFromStaticMethodName (line 235) | private static String getInstanceMethodNameFromStaticMethodName(String...
method generateStaticMethodEquivalentForRequestOptionsStaticMethod (line 257) | private MethodAndStaticVar generateStaticMethodEquivalentForRequestOpt...
method memoizeStaticMethodFromArguments (line 319) | @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability
method createNewOptionAndCall (line 331) | private StringBuilder createNewOptionAndCall(
method isAndroidContext (line 355) | private boolean isAndroidContext(ParameterSpec parameter) {
method generateStaticMethodEquivalentForExtensionMethod (line 359) | private MethodAndStaticVar generateStaticMethodEquivalentForExtensionM...
method getStaticMethodName (line 438) | @Nullable
method memoizeStaticMethodFromAnnotation (line 445) | private static boolean memoizeStaticMethodFromAnnotation(ExecutableEle...
method skipStaticMethod (line 450) | private static boolean skipStaticMethod(ExecutableElement element) {
class MethodAndStaticVar (line 455) | private static final class MethodAndStaticVar {
method MethodAndStaticVar (line 459) | MethodAndStaticVar(@Nullable MethodSpec method) {
method MethodAndStaticVar (line 463) | MethodAndStaticVar(@Nullable MethodSpec method, @Nullable FieldSpec ...
class MethodSignature (line 469) | private static final class MethodSignature {
method MethodSignature (line 475) | MethodSignature(MethodSpec spec) {
method equals (line 491) | @Override
method hashCode (line 503) | @Override
FILE: annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsOverrideGenerator.java
class RequestOptionsOverrideGenerator (line 27) | final class RequestOptionsOverrideGenerator {
method RequestOptionsOverrideGenerator (line 32) | RequestOptionsOverrideGenerator(
method generateInstanceMethodOverridesForRequestOptions (line 40) | List<MethodSpec> generateInstanceMethodOverridesForRequestOptions(Type...
method generateInstanceMethodOverridesForRequestOptions (line 45) | List<MethodSpec> generateInstanceMethodOverridesForRequestOptions(
method generateRequestOptionOverride (line 67) | private MethodSpec generateRequestOptionOverride(
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/AppGlideModuleWithExcludesTest.java
class AppGlideModuleWithExcludesTest (line 24) | @RunWith(JUnit4.class)
method setUp (line 31) | @Before
method getCompilation (line 40) | @Override
method compilation_generatesExpectedGlideOptionsClass (line 45) | @Test
method compilation_generatesExpectedGlideRequestClass (line 53) | @Test
method compilation_generatesExpectedGlideRequestsClass (line 61) | @Test
method compilationGeneratesExpectedGlideAppClass (line 69) | @Test
method compilation_generatesExpectedGeneratedAppGlideModuleImpl (line 77) | @Test
method compilation_generatesExpectedGeneratedRequestManagerFactory (line 84) | @Test
method forResource (line 92) | private JavaFileObject forResource(String name) {
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/AppGlideModuleWithLibraryInPackageTest.java
class AppGlideModuleWithLibraryInPackageTest (line 26) | @RunWith(JUnit4.class)
method setUp (line 33) | @Before
method getCompilation (line 44) | @Override
method compilation_generatesExpectedGlideOptionsClass (line 49) | @Test
method compilation_generatesExpectedGlideRequestClass (line 57) | @Test
method compilation_generatesExpectedGlideRequestsClass (line 65) | @Test
method compilationGeneratesExpectedGlideAppClass (line 73) | @Test
method compilation_generatesExpectedGeneratedAppGlideModuleImpl (line 81) | @Test
method compilation_generatesExpectedGeneratedRequestManagerFactory (line 88) | @Test
method forResource (line 96) | private JavaFileObject forResource(String name) {
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/AppGlideModuleWithMultipleExcludesTest.java
class AppGlideModuleWithMultipleExcludesTest (line 25) | @RunWith(JUnit4.class)
method setUp (line 32) | @Before
method getCompilation (line 44) | @Override
method compilation_generatesExpectedGlideOptionsClass (line 49) | @Test
method compilation_generatesExpectedGlideRequestClass (line 57) | @Test
method compilation_generatesExpectedGlideRequestsClass (line 65) | @Test
method compilationGeneratesExpectedGlideAppClass (line 73) | @Test
method compilation_generatesExpectedGeneratedAppGlideModuleImpl (line 81) | @Test
method compilation_generatesExpectedGeneratedRequestManagerFactory (line 88) | @Test
method forResource (line 96) | private JavaFileObject forResource(String name) {
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/EmptyAppAndLibraryGlideModulesTest.java
class EmptyAppAndLibraryGlideModulesTest (line 31) | @RunWith(JUnit4.class)
method setUp (line 38) | @Before
method compilation_generatesAllExpectedFiles (line 47) | @Test
method compilation_generatesExpectedGlideOptionsClass (line 52) | @Test
method compilation_generatesExpectedGlideRequestClass (line 60) | @Test
method compilation_generatesExpectedGlideRequestsClass (line 68) | @Test
method compilationGeneratesExpectedGlideAppClass (line 76) | @Test
method compilation_generatesExpectedGeneratedAppGlideModuleImpl (line 84) | @Test
method compilation_generatesExpectedGeneratedRequestManagerFactory (line 91) | @Test
method compilation_generatesExpectedIndexer (line 99) | @Test
method forResource (line 109) | private JavaFileObject forResource(String name) {
method getCompilation (line 113) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/EmptyAppGlideModuleTest.java
class EmptyAppGlideModuleTest (line 22) | @RunWith(JUnit4.class)
method setUp (line 31) | @Before
method compilation_generatesAllExpectedFiles (line 38) | @Test
method compilation_generatesExpectedGlideOptionsClass (line 43) | @Test
method compilation_generatesExpectedGlideRequestClass (line 50) | @Test
method compilation_generatesExpectedGlideRequestsClass (line 57) | @Test
method compilationGeneratesExpectedGlideAppClass (line 64) | @Test
method compilation_generatesExpectedGeneratedAppGlideModuleImpl (line 71) | @Test
method compilation_generatesExpectedGeneratedRequestManagerFactory (line 78) | @Test
method forResource (line 85) | private JavaFileObject forResource(String name) {
method getCompilation (line 89) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/EmptyLibraryGlideModuleTest.java
class EmptyLibraryGlideModuleTest (line 21) | @RunWith(JUnit4.class)
method setUp (line 29) | @Before
method compilation_generatesAllExpectedFiles (line 36) | @Test
method compilation_generatesExpectedIndexer (line 41) | @Test
method forResource (line 50) | private JavaFileObject forResource(String name) {
method getCompilation (line 54) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/GlideExtensionOptionsTest.java
class GlideExtensionOptionsTest (line 24) | @RunWith(JUnit4.class)
method compilation_withOverrideExtend_validOptions (line 33) | @Test
method compilation_withOverrideExtend_validRequest (line 39) | @Test
method compilation_withOverrideReplace_andMultipleArguments_validOptions (line 45) | @Test
method compilation_withOverrideReplace_andMultipleArguments_validRequest (line 52) | @Test
method compilation_withOverrideReplace_validOptions (line 59) | @Test
method compilation_withOverrideReplace_validRequest (line 65) | @Test
method compilation_withStaticMethodName_validOptions (line 71) | @Test
method compilation_withStaticMethodName_validRequest (line 77) | @Test
method compilation_withMemoizeStaticMethod_validOptions (line 83) | @Test
method compilation_withMemoizeStaticMethod_validRequest (line 89) | @Test
method compilation_withSkipStaticMethod_validOptions (line 95) | @Test
method compilation_withSkipStaticMethod_validRequest (line 101) | @Test
method getCompilation (line 107) | @Override
type Subject (line 112) | private enum Subject {
method file (line 116) | String file() {
method runTest (line 121) | private void runTest(Subject subject) {
method getSubDirectoryName (line 134) | private String getSubDirectoryName() {
method extension (line 138) | private JavaFileObject extension(String subdir) {
method forResource (line 142) | private JavaFileObject forResource(String subdir, String name) {
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/GlideExtensionWithOptionTest.java
class GlideExtensionWithOptionTest (line 28) | @RunWith(JUnit4.class)
method setUp (line 35) | @Before
method compilation_generatesAllExpectedFiles (line 44) | @Test
method compilation_generatesExpectedGlideOptionsClass (line 49) | @Test
method compilation_generatesExpectedGlideRequestClass (line 56) | @Test
method compilation_generatesExpectedGlideRequestsClass (line 63) | @Test
method compilationGeneratesExpectedGlideAppClass (line 71) | @Test
method compilation_generatesExpectedGeneratedAppGlideModuleImpl (line 79) | @Test
method compilation_generatesExpectedGeneratedRequestManagerFactory (line 87) | @Test
method forResource (line 95) | private JavaFileObject forResource(String name) {
method getCompilation (line 99) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/GlideExtensionWithTypeTest.java
class GlideExtensionWithTypeTest (line 25) | @RunWith(JUnit4.class)
method setUp (line 32) | @Before
method compilation_generatesAllExpectedFiles (line 41) | @Test
method compilation_generatesExpectedGlideOptionsClass (line 46) | @Test
method compilation_generatesExpectedGlideRequestClass (line 53) | @Test
method compilation_generatesExpectedGlideRequestsClass (line 61) | @Test
method compilationGeneratesExpectedGlideAppClass (line 68) | @Test
method compilation_generatesExpectedGeneratedAppGlideModuleImpl (line 76) | @Test
method compilation_generatesExpectedGeneratedRequestManagerFactory (line 84) | @Test
method forResource (line 92) | private JavaFileObject forResource(String name) {
method getCompilation (line 96) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidAppGlideModuleWithExcludesTest.java
class InvalidAppGlideModuleWithExcludesTest (line 16) | @SuppressWarnings("ResultOfMethodCallIgnored")
method compilation_withMissingExcludedModuleClass_throws (line 19) | @Test
method compilation_withEmptyExcludes_fails (line 43) | @Test
method compilation_withNonGlideModule_throws (line 62) | @Test
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidGlideExtensionTest.java
class InvalidGlideExtensionTest (line 17) | @SuppressWarnings("ResultOfMethodCallIgnored")
method compilation_withPublicConstructor_fails (line 20) | @Test
method compilation_withPackagePrivateExtension_fails (line 41) | @Test
method compilation_withConstructorWithParameters_throws (line 64) | @Test
method compilation_withNonStaticMethod_succeeds (line 88) | @Test
method compilation_withStaticMethod_succeeds (line 107) | @Test
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidGlideOptionsExtensionTest.java
class InvalidGlideOptionsExtensionTest (line 22) | @SuppressWarnings("ResultOfMethodCallIgnored")
method compilation_withAnnotatedNonStaticMethod_fails (line 25) | @Test
method compilation_withAnnotatedStaticMethod_withRequestOptionsArgInWrongOrder_fails (line 51) | @Test
method compilation_withAnnotatedStaticMethod_withRequestOptionsArg_succeeds (line 82) | @Test
method compilation_withAnnotatedStaticMethod_withRequestOptionsArgAndOtherArg_succeeds (line 107) | @Test
method compilation_overridingOptionWithoutAnnotationType_fails (line 132) | @Test
method compilation_withOverrideExtend_butNotOverridingMethod_fails (line 162) | @Test
method compilation_withOverrideExtend_andOverridingMethod_succeeds (line 192) | @Test
method compilation_withOverrideReplace_butNotOverridingMethod_fails (line 217) | @Test
method compilation_withOverrideReplace_andOverridingMethod_succeeds (line 247) | @Test
method compilation_withRequestOptionsReturnValue_succeeds (line 272) | @Test
method compilation_withNonRequestOptionsReturnValue_fails (line 299) | @Test
method compilation_withMissingNonNullAnnotation_warns (line 332) | @Test
method compilation_withNoOptionParameters_fails (line 360) | @Test
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidGlideTypeExtensionTest.java
class InvalidGlideTypeExtensionTest (line 23) | @SuppressWarnings("ResultOfMethodCallIgnored")
method compilation_withAnnotatedNonStaticMethod_fails (line 26) | @Test
method compilation_withAnnotatedStaticMethod_withoutRequestBuilderArg_fails (line 58) | @Test
method compilation_withAnnotatedStaticMethod_withRequestBuilderArg_succeeds (line 89) | @Test
method compilation_withAnnotatedStaticMethod_withNonRequestBuilderArg_fails (line 115) | @Test
method compilation_withAnnotatedStaticMethod_withRequestBuilderArgAndOtherArg_fails (line 146) | @Test
method compilation_withAnnotatedStaticMethod_overridingExistingType_fails (line 183) | @Test
method compilation_withAnnotatedStaticMethod_returningRequestBuilder_succeeds (line 221) | @Test
method compilation_withAnnotatedStaticMethod_returningNonRequestBuilder_fails (line 248) | @Test
method compilation_withAnnotatedStaticMethod_returningBuilderWithIncorrectType_fails (line 281) | @Test
method compilation_withAnnotatedStaticMethod_returningBuilder_andMultipleParams_fails (line 314) | @Test
method compilation_withAnnotatedStaticMethod_returningBuilder_nonBuilderParam_fails (line 350) | @Test
method compilation_withAnnotatedStaticMethod_returningRequestBuilder_missingNonNull_warns (line 386) | @Test
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/MultipleAppGlideModuleTest.java
class MultipleAppGlideModuleTest (line 22) | @RunWith(JUnit4.class)
method compilation_withTwoAppModules_fails (line 33) | @SuppressWarnings("ResultOfMethodCallIgnored")
method compilation_withFirstModuleOnly_succeeds (line 48) | @Test
method compilation_withSecondModuleOnly_succeeds (line 55) | @Test
method forResource (line 62) | private JavaFileObject forResource(String name) {
method getCompilation (line 66) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/MultipleEmptyLibraryGlideModuleTest.java
class MultipleEmptyLibraryGlideModuleTest (line 21) | @RunWith(JUnit4.class)
method setUp (line 28) | @Before
method compilation_generatesAllExpectedFiles (line 38) | @Test
method compilation_generatesExpectedIndexerForModules (line 43) | @Test
method forResource (line 53) | private JavaFileObject forResource(String name) {
method getCompilation (line 57) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/OverlyLongFileNameTest.java
class OverlyLongFileNameTest (line 24) | @RunWith(JUnit4.class)
method setUp (line 34) | @Before
method compilingLongClassAndOrPackageNameShouldSucceed (line 51) | @Test
method getCompilation (line 67) | @Override
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/CompilationProvider.java
type CompilationProvider (line 6) | public interface CompilationProvider {
method getCompilation (line 7) | Compilation getCompilation();
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/RegenerateResourcesRule.java
class RegenerateResourcesRule (line 26) | public final class RegenerateResourcesRule implements TestRule {
method RegenerateResourcesRule (line 30) | public RegenerateResourcesRule(CompilationProvider test) {
method apply (line 34) | @Override
method updateResourceFile (line 52) | private void updateResourceFile(
method parseActual (line 91) | private String parseActual(String fileName) {
method parseFileNameFromMessage (line 105) | private static String parseFileNameFromMessage(AssertionError e) {
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/TestDescription.java
class TestDescription (line 10) | public final class TestDescription extends TestWatcher {
method starting (line 13) | @Override
method getDescription (line 18) | public Description getDescription() {
FILE: annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/Util.java
class Util (line 7) | public final class Util {
method Util (line 24) | private Util() {
method getProjectRootIfRegeneratingTestResources (line 33) | static String getProjectRootIfRegeneratingTestResources() {
method emptyAppModule (line 37) | public static JavaFileObject emptyAppModule() {
method emptyLibraryModule (line 41) | public static JavaFileObject emptyLibraryModule() {
method appResource (line 45) | public static JavaFileObject appResource(String className) {
method libraryResource (line 49) | public static JavaFileObject libraryResource(String className) {
method forResource (line 53) | public static JavaFileObject forResource(String directoryName, String ...
method annotation (line 70) | public static String annotation(String className) {
method subpackage (line 74) | public static String subpackage(String className) {
method glide (line 78) | public static String glide(String className) {
method asUnixChars (line 82) | public static CharSequence asUnixChars(CharSequence chars) {
method qualified (line 86) | private static String qualified(String packageName, String className) {
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithExcludesTest/AppModuleWithExcludes.java
class AppModuleWithExcludes (line 7) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithExcludesTest/GeneratedAppGlideModuleImpl.java
class GeneratedAppGlideModuleImpl (line 10) | @SuppressWarnings("deprecation")
method GeneratedAppGlideModuleImpl (line 14) | public GeneratedAppGlideModuleImpl(Context context) {
method applyOptions (line 22) | @Override
method registerComponents (line 27) | @Override
method isManifestParsingEnabled (line 33) | @Override
method getExcludedModuleClasses (line 38) | @Override
method getRequestManagerFactory (line 46) | @Override
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithLibraryInPackageTest/AppModuleWithLibraryInPackage.java
class AppModuleWithLibraryInPackage (line 8) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithLibraryInPackageTest/GeneratedAppGlideModuleImpl.java
class GeneratedAppGlideModuleImpl (line 10) | @SuppressWarnings("deprecation")
method GeneratedAppGlideModuleImpl (line 14) | public GeneratedAppGlideModuleImpl(Context context) {
method applyOptions (line 22) | @Override
method registerComponents (line 27) | @Override
method isManifestParsingEnabled (line 33) | @Override
method getExcludedModuleClasses (line 38) | @Override
method getRequestManagerFactory (line 46) | @Override
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithLibraryInPackageTest/LibraryModuleInPackage.java
class LibraryModuleInPackage (line 7) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/AppModuleWithMultipleExcludes.java
class AppModuleWithMultipleExcludes (line 7) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/EmptyLibraryModule1.java
class EmptyLibraryModule1 (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/EmptyLibraryModule2.java
class EmptyLibraryModule2 (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/GeneratedAppGlideModuleImpl.java
class GeneratedAppGlideModuleImpl (line 10) | @SuppressWarnings("deprecation")
method GeneratedAppGlideModuleImpl (line 14) | public GeneratedAppGlideModuleImpl(Context context) {
method applyOptions (line 23) | @Override
method registerComponents (line 28) | @Override
method isManifestParsingEnabled (line 34) | @Override
method getExcludedModuleClasses (line 39) | @Override
method getRequestManagerFactory (line 48) | @Override
FILE: annotation/compiler/test/src/test/resources/EmptyAppAndLibraryGlideModulesTest/GeneratedAppGlideModuleImpl.java
class GeneratedAppGlideModuleImpl (line 11) | @SuppressWarnings("deprecation")
method GeneratedAppGlideModuleImpl (line 15) | public GeneratedAppGlideModuleImpl(Context context) {
method applyOptions (line 23) | @Override
method registerComponents (line 28) | @Override
method isManifestParsingEnabled (line 35) | @Override
method getExcludedModuleClasses (line 40) | @Override
method getRequestManagerFactory (line 46) | @Override
FILE: annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/EmptyAppModule.java
class EmptyAppModule (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GeneratedAppGlideModuleImpl.java
class GeneratedAppGlideModuleImpl (line 10) | @SuppressWarnings("deprecation")
method GeneratedAppGlideModuleImpl (line 14) | public GeneratedAppGlideModuleImpl(Context context) {
method applyOptions (line 21) | @Override
method registerComponents (line 26) | @Override
method isManifestParsingEnabled (line 32) | @Override
method getExcludedModuleClasses (line 37) | @Override
method getRequestManagerFactory (line 43) | @Override
FILE: annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GeneratedRequestManagerFactory.java
class GeneratedRequestManagerFactory (line 13) | final class GeneratedRequestManagerFactory implements RequestManagerRetr...
method build (line 14) | @Override
FILE: annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideApp.java
class GlideApp (line 25) | public final class GlideApp {
method GlideApp (line 26) | private GlideApp() {
method getPhotoCacheDir (line 32) | @Nullable
method getPhotoCacheDir (line 40) | @Nullable
method get (line 48) | @NonNull
method init (line 56) | @Deprecated
method init (line 66) | @VisibleForTesting
method enableHardwareBitmaps (line 75) | @VisibleForTesting
method tearDown (line 84) | @VisibleForTesting
method with (line 93) | @NonNull
method with (line 101) | @Deprecated
method with (line 110) | @NonNull
method with (line 118) | @NonNull
method with (line 126) | @Deprecated
method with (line 135) | @NonNull
FILE: annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideOptions.java
class GlideOptions (line 27) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 44) | @CheckResult
method diskCacheStrategyOf (line 53) | @CheckResult
method priorityOf (line 62) | @CheckResult
method placeholderOf (line 71) | @CheckResult
method placeholderOf (line 80) | @CheckResult
method errorOf (line 89) | @CheckResult
method errorOf (line 98) | @CheckResult
method skipMemoryCacheOf (line 107) | @CheckResult
method overrideOf (line 116) | @CheckResult
method overrideOf (line 125) | @CheckResult
method signatureOf (line 134) | @CheckResult
method fitCenterTransform (line 143) | @CheckResult
method centerInsideTransform (line 156) | @CheckResult
method centerCropTransform (line 169) | @CheckResult
method circleCropTransform (line 182) | @CheckResult
method bitmapTransform (line 195) | @CheckResult
method noTransformation (line 204) | @CheckResult
method option (line 217) | @CheckResult
method decodeTypeOf (line 226) | @CheckResult
method formatOf (line 235) | @CheckResult
method frameOf (line 244) | @CheckResult
method downsampleOf (line 253) | @CheckResult
method timeoutOf (line 262) | @CheckResult
method encodeQualityOf (line 271) | @CheckResult
method encodeFormatOf (line 280) | @CheckResult
method noAnimation (line 289) | @CheckResult
method sizeMultiplier (line 299) | @Override
method useUnlimitedSourceGeneratorsPool (line 306) | @Override
method useAnimationPool (line 313) | @Override
method onlyRetrieveFromCache (line 320) | @Override
method diskCacheStrategy (line 327) | @Override
method priority (line 334) | @Override
method placeholder (line 341) | @Override
method placeholder (line 348) | @Override
method fallback (line 355) | @Override
method fallback (line 362) | @Override
method error (line 369) | @Override
method error (line 376) | @Override
method theme (line 383) | @Override
method skipMemoryCache (line 390) | @Override
method override (line 397) | @Override
method override (line 404) | @Override
method signature (line 411) | @Override
method clone (line 418) | @Override
method set (line 424) | @Override
method decode (line 431) | @Override
method encodeFormat (line 438) | @Override
method encodeQuality (line 445) | @Override
method frame (line 452) | @Override
method format (line 459) | @Override
method disallowHardwareConfig (line 466) | @Override
method downsample (line 473) | @Override
method timeout (line 480) | @Override
method optionalCenterCrop (line 487) | @Override
method centerCrop (line 494) | @Override
method optionalFitCenter (line 501) | @Override
method fitCenter (line 508) | @Override
method optionalCenterInside (line 515) | @Override
method centerInside (line 522) | @Override
method optionalCircleCrop (line 529) | @Override
method circleCrop (line 536) | @Override
method transform (line 543) | @Override
method transform (line 550) | @Override
method transforms (line 559) | @Override
method optionalTransform (line 569) | @Override
method optionalTransform (line 576) | @Override
method transform (line 584) | @Override
method dontTransform (line 592) | @Override
method dontAnimate (line 599) | @Override
method apply (line 606) | @Override
method lock (line 613) | @Override
method autoClone (line 619) | @Override
FILE: annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method override (line 202) | @NonNull
method signature (line 211) | @NonNull
method set (line 220) | @NonNull
method decode (line 229) | @NonNull
method encodeFormat (line 238) | @NonNull
method encodeQuality (line 247) | @NonNull
method frame (line 256) | @NonNull
method format (line 265) | @NonNull
method disallowHardwareConfig (line 274) | @NonNull
method downsample (line 283) | @NonNull
method timeout (line 292) | @NonNull
method optionalCenterCrop (line 301) | @NonNull
method centerCrop (line 310) | @NonNull
method optionalFitCenter (line 319) | @NonNull
method fitCenter (line 328) | @NonNull
method optionalCenterInside (line 337) | @NonNull
method centerInside (line 346) | @NonNull
method optionalCircleCrop (line 355) | @NonNull
method circleCrop (line 364) | @NonNull
method transform (line 373) | @NonNull
method transform (line 382) | @NonNull
method transforms (line 395) | @Deprecated
method optionalTransform (line 410) | @NonNull
method optionalTransform (line 420) | @NonNull
method transform (line 430) | @NonNull
method dontTransform (line 440) | @NonNull
method dontAnimate (line 449) | @NonNull
method lock (line 458) | @NonNull
method autoClone (line 466) | @NonNull
method apply (line 471) | @Override
method transition (line 478) | @Override
method listener (line 486) | @Override
method addListener (line 493) | @Override
method error (line 501) | @Override
method error (line 507) | @Override
method thumbnail (line 514) | @Override
method thumbnail (line 521) | @Override
method thumbnail (line 531) | @Override
method thumbnail (line 538) | @Override
method load (line 546) | @Override
method load (line 553) | @Override
method load (line 560) | @Override
method load (line 567) | @Override
method load (line 574) | @Override
method load (line 581) | @Override
method load (line 588) | @Override
method load (line 595) | @Override
method load (line 602) | @Override
method clone (line 609) | @Override
FILE: annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequests.java
class GlideRequests (line 28) | @SuppressWarnings("deprecation")
method GlideRequests (line 30) | public GlideRequests(@NonNull Glide glide, @NonNull Lifecycle lifecycle,
method as (line 35) | @Override
method applyDefaultRequestOptions (line 42) | @Override
method setDefaultRequestOptions (line 48) | @Override
method addDefaultRequestListener (line 54) | @Override
method asBitmap (line 60) | @Override
method asGif (line 67) | @Override
method asDrawable (line 74) | @Override
method load (line 81) | @Override
method load (line 88) | @Override
method load (line 95) | @Override
method load (line 102) | @Override
method load (line 109) | @Override
method load (line 116) | @Override
method load (line 123) | @Override
method load (line 130) | @Override
method load (line 137) | @Override
method downloadOnly (line 144) | @Override
method download (line 151) | @Override
method asFile (line 158) | @Override
method setRequestOptions (line 165) | @Override
FILE: annotation/compiler/test/src/test/resources/EmptyLibraryGlideModuleTest/EmptyLibraryModule.java
class EmptyLibraryModule (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/EmptyLibraryGlideModuleTest/GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule.java
class GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule (line 3) | @Index(
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/Extension.java
class Extension (line 8) | @GlideExtension
method Extension (line 11) | private Extension() {
method test (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 47) | @CheckResult
method diskCacheStrategyOf (line 56) | @CheckResult
method priorityOf (line 65) | @CheckResult
method placeholderOf (line 74) | @CheckResult
method placeholderOf (line 83) | @CheckResult
method errorOf (line 92) | @CheckResult
method errorOf (line 101) | @CheckResult
method skipMemoryCacheOf (line 110) | @CheckResult
method overrideOf (line 119) | @CheckResult
method overrideOf (line 128) | @CheckResult
method signatureOf (line 137) | @CheckResult
method fitCenterTransform (line 146) | @CheckResult
method centerInsideTransform (line 159) | @CheckResult
method centerCropTransform (line 172) | @CheckResult
method circleCropTransform (line 185) | @CheckResult
method bitmapTransform (line 198) | @CheckResult
method noTransformation (line 207) | @CheckResult
method option (line 220) | @CheckResult
method decodeTypeOf (line 229) | @CheckResult
method formatOf (line 238) | @CheckResult
method frameOf (line 247) | @CheckResult
method downsampleOf (line 256) | @CheckResult
method timeoutOf (line 265) | @CheckResult
method encodeQualityOf (line 274) | @CheckResult
method encodeFormatOf (line 283) | @CheckResult
method noAnimation (line 292) | @CheckResult
method sizeMultiplier (line 302) | @Override
method useUnlimitedSourceGeneratorsPool (line 309) | @Override
method useAnimationPool (line 316) | @Override
method onlyRetrieveFromCache (line 323) | @Override
method diskCacheStrategy (line 330) | @Override
method priority (line 337) | @Override
method placeholder (line 344) | @Override
method placeholder (line 351) | @Override
method fallback (line 358) | @Override
method fallback (line 365) | @Override
method error (line 372) | @Override
method error (line 379) | @Override
method theme (line 386) | @Override
method skipMemoryCache (line 393) | @Override
method override (line 400) | @Override
method override (line 407) | @Override
method signature (line 414) | @Override
method clone (line 421) | @Override
method set (line 427) | @Override
method decode (line 434) | @Override
method encodeFormat (line 441) | @Override
method encodeQuality (line 448) | @Override
method frame (line 455) | @Override
method format (line 462) | @Override
method disallowHardwareConfig (line 469) | @Override
method downsample (line 476) | @Override
method timeout (line 483) | @Override
method optionalCenterCrop (line 490) | @Override
method centerCrop (line 497) | @Override
method optionalFitCenter (line 504) | @Override
method fitCenter (line 511) | @Override
method optionalCenterInside (line 518) | @Override
method centerInside (line 525) | @Override
method optionalCircleCrop (line 532) | @Override
method circleCrop (line 539) | @Override
method transform (line 546) | @Override
method transform (line 553) | @Override
method transforms (line 562) | @Override
method optionalTransform (line 572) | @Override
method optionalTransform (line 579) | @Override
method transform (line 587) | @Override
method dontTransform (line 595) | @Override
method dontAnimate (line 602) | @Override
method apply (line 609) | @Override
method lock (line 616) | @Override
method autoClone (line 622) | @Override
method test (line 631) | @SuppressWarnings("unchecked")
method testOf (line 641) | @CheckResult
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method override (line 202) | @NonNull
method signature (line 211) | @NonNull
method set (line 220) | @NonNull
method decode (line 229) | @NonNull
method encodeFormat (line 238) | @NonNull
method encodeQuality (line 247) | @NonNull
method frame (line 256) | @NonNull
method format (line 265) | @NonNull
method disallowHardwareConfig (line 274) | @NonNull
method downsample (line 283) | @NonNull
method timeout (line 292) | @NonNull
method optionalCenterCrop (line 301) | @NonNull
method centerCrop (line 310) | @NonNull
method optionalFitCenter (line 319) | @NonNull
method fitCenter (line 328) | @NonNull
method optionalCenterInside (line 337) | @NonNull
method centerInside (line 346) | @NonNull
method optionalCircleCrop (line 355) | @NonNull
method circleCrop (line 364) | @NonNull
method transform (line 373) | @NonNull
method transform (line 382) | @NonNull
method transforms (line 395) | @Deprecated
method optionalTransform (line 410) | @NonNull
method optionalTransform (line 420) | @NonNull
method transform (line 430) | @NonNull
method dontTransform (line 440) | @NonNull
method dontAnimate (line 449) | @NonNull
method lock (line 458) | @NonNull
method autoClone (line 466) | @NonNull
method apply (line 471) | @Override
method transition (line 478) | @Override
method listener (line 486) | @Override
method addListener (line 493) | @Override
method error (line 501) | @Override
method error (line 507) | @Override
method thumbnail (line 514) | @Override
method thumbnail (line 521) | @Override
method thumbnail (line 531) | @Override
method thumbnail (line 538) | @Override
method load (line 546) | @Override
method load (line 553) | @Override
method load (line 560) | @Override
method load (line 567) | @Override
method load (line 574) | @Override
method load (line 581) | @Override
method load (line 588) | @Override
method load (line 595) | @Override
method load (line 602) | @Override
method clone (line 609) | @Override
method test (line 618) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/Extension.java
class Extension (line 8) | @GlideExtension
method Extension (line 11) | private Extension() {
method centerCrop (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 45) | @CheckResult
method diskCacheStrategyOf (line 54) | @CheckResult
method priorityOf (line 63) | @CheckResult
method placeholderOf (line 72) | @CheckResult
method placeholderOf (line 81) | @CheckResult
method errorOf (line 90) | @CheckResult
method errorOf (line 99) | @CheckResult
method skipMemoryCacheOf (line 108) | @CheckResult
method overrideOf (line 117) | @CheckResult
method overrideOf (line 126) | @CheckResult
method signatureOf (line 135) | @CheckResult
method fitCenterTransform (line 144) | @CheckResult
method centerInsideTransform (line 157) | @CheckResult
method centerCropTransform (line 170) | @CheckResult
method circleCropTransform (line 183) | @CheckResult
method bitmapTransform (line 196) | @CheckResult
method noTransformation (line 205) | @CheckResult
method option (line 218) | @CheckResult
method decodeTypeOf (line 227) | @CheckResult
method formatOf (line 236) | @CheckResult
method frameOf (line 245) | @CheckResult
method downsampleOf (line 254) | @CheckResult
method timeoutOf (line 263) | @CheckResult
method encodeQualityOf (line 272) | @CheckResult
method encodeFormatOf (line 281) | @CheckResult
method noAnimation (line 290) | @CheckResult
method sizeMultiplier (line 300) | @Override
method useUnlimitedSourceGeneratorsPool (line 307) | @Override
method useAnimationPool (line 314) | @Override
method onlyRetrieveFromCache (line 321) | @Override
method diskCacheStrategy (line 328) | @Override
method priority (line 335) | @Override
method placeholder (line 342) | @Override
method placeholder (line 349) | @Override
method fallback (line 356) | @Override
method fallback (line 363) | @Override
method error (line 370) | @Override
method error (line 377) | @Override
method theme (line 384) | @Override
method skipMemoryCache (line 391) | @Override
method override (line 398) | @Override
method override (line 405) | @Override
method signature (line 412) | @Override
method clone (line 419) | @Override
method set (line 425) | @Override
method decode (line 432) | @Override
method encodeFormat (line 439) | @Override
method encodeQuality (line 446) | @Override
method frame (line 453) | @Override
method format (line 460) | @Override
method disallowHardwareConfig (line 467) | @Override
method downsample (line 474) | @Override
method timeout (line 481) | @Override
method optionalCenterCrop (line 488) | @Override
method optionalFitCenter (line 495) | @Override
method fitCenter (line 502) | @Override
method optionalCenterInside (line 509) | @Override
method centerInside (line 516) | @Override
method optionalCircleCrop (line 523) | @Override
method circleCrop (line 530) | @Override
method transform (line 537) | @Override
method transform (line 544) | @Override
method transforms (line 553) | @Override
method optionalTransform (line 563) | @Override
method optionalTransform (line 570) | @Override
method transform (line 578) | @Override
method dontTransform (line 586) | @Override
method dontAnimate (line 593) | @Override
method apply (line 600) | @Override
method lock (line 607) | @Override
method autoClone (line 613) | @Override
method centerCrop (line 623) | @SuppressWarnings("unchecked")
method centerCropOf (line 634) | @CheckResult
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method override (line 202) | @NonNull
method signature (line 211) | @NonNull
method set (line 220) | @NonNull
method decode (line 229) | @NonNull
method encodeFormat (line 238) | @NonNull
method encodeQuality (line 247) | @NonNull
method frame (line 256) | @NonNull
method format (line 265) | @NonNull
method disallowHardwareConfig (line 274) | @NonNull
method downsample (line 283) | @NonNull
method timeout (line 292) | @NonNull
method optionalCenterCrop (line 301) | @NonNull
method optionalFitCenter (line 310) | @NonNull
method fitCenter (line 319) | @NonNull
method optionalCenterInside (line 328) | @NonNull
method centerInside (line 337) | @NonNull
method optionalCircleCrop (line 346) | @NonNull
method circleCrop (line 355) | @NonNull
method transform (line 364) | @NonNull
method transform (line 373) | @NonNull
method transforms (line 386) | @Deprecated
method optionalTransform (line 401) | @NonNull
method optionalTransform (line 411) | @NonNull
method transform (line 421) | @NonNull
method dontTransform (line 431) | @NonNull
method dontAnimate (line 440) | @NonNull
method lock (line 449) | @NonNull
method autoClone (line 457) | @NonNull
method apply (line 462) | @Override
method transition (line 469) | @Override
method listener (line 477) | @Override
method addListener (line 484) | @Override
method error (line 492) | @Override
method error (line 498) | @Override
method thumbnail (line 505) | @Override
method thumbnail (line 512) | @Override
method thumbnail (line 522) | @Override
method thumbnail (line 529) | @Override
method load (line 537) | @Override
method load (line 544) | @Override
method load (line 551) | @Override
method load (line 558) | @Override
method load (line 565) | @Override
method load (line 572) | @Override
method load (line 579) | @Override
method load (line 586) | @Override
method load (line 593) | @Override
method clone (line 600) | @Override
method centerCrop (line 610) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/Extension.java
class Extension (line 8) | @GlideExtension
method Extension (line 11) | private Extension() {
method override (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 45) | @CheckResult
method diskCacheStrategyOf (line 54) | @CheckResult
method priorityOf (line 63) | @CheckResult
method placeholderOf (line 72) | @CheckResult
method placeholderOf (line 81) | @CheckResult
method errorOf (line 90) | @CheckResult
method errorOf (line 99) | @CheckResult
method skipMemoryCacheOf (line 108) | @CheckResult
method overrideOf (line 117) | @CheckResult
method signatureOf (line 126) | @CheckResult
method fitCenterTransform (line 135) | @CheckResult
method centerInsideTransform (line 148) | @CheckResult
method centerCropTransform (line 161) | @CheckResult
method circleCropTransform (line 174) | @CheckResult
method bitmapTransform (line 187) | @CheckResult
method noTransformation (line 196) | @CheckResult
method option (line 209) | @CheckResult
method decodeTypeOf (line 218) | @CheckResult
method formatOf (line 227) | @CheckResult
method frameOf (line 236) | @CheckResult
method downsampleOf (line 245) | @CheckResult
method timeoutOf (line 254) | @CheckResult
method encodeQualityOf (line 263) | @CheckResult
method encodeFormatOf (line 272) | @CheckResult
method noAnimation (line 281) | @CheckResult
method sizeMultiplier (line 291) | @Override
method useUnlimitedSourceGeneratorsPool (line 298) | @Override
method useAnimationPool (line 305) | @Override
method onlyRetrieveFromCache (line 312) | @Override
method diskCacheStrategy (line 319) | @Override
method priority (line 326) | @Override
method placeholder (line 333) | @Override
method placeholder (line 340) | @Override
method fallback (line 347) | @Override
method fallback (line 354) | @Override
method error (line 361) | @Override
method error (line 368) | @Override
method theme (line 375) | @Override
method skipMemoryCache (line 382) | @Override
method override (line 389) | @Override
method signature (line 396) | @Override
method clone (line 403) | @Override
method set (line 409) | @Override
method decode (line 416) | @Override
method encodeFormat (line 423) | @Override
method encodeQuality (line 430) | @Override
method frame (line 437) | @Override
method format (line 444) | @Override
method disallowHardwareConfig (line 451) | @Override
method downsample (line 458) | @Override
method timeout (line 465) | @Override
method optionalCenterCrop (line 472) | @Override
method centerCrop (line 479) | @Override
method optionalFitCenter (line 486) | @Override
method fitCenter (line 493) | @Override
method optionalCenterInside (line 500) | @Override
method centerInside (line 507) | @Override
method optionalCircleCrop (line 514) | @Override
method circleCrop (line 521) | @Override
method transform (line 528) | @Override
method transform (line 535) | @Override
method transforms (line 544) | @Override
method optionalTransform (line 554) | @Override
method optionalTransform (line 561) | @Override
method transform (line 569) | @Override
method dontTransform (line 577) | @Override
method dontAnimate (line 584) | @Override
method apply (line 591) | @Override
method lock (line 598) | @Override
method autoClone (line 604) | @Override
method override (line 614) | @SuppressWarnings("unchecked")
method overrideOf (line 625) | @CheckResult
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method signature (line 202) | @NonNull
method set (line 211) | @NonNull
method decode (line 220) | @NonNull
method encodeFormat (line 229) | @NonNull
method encodeQuality (line 238) | @NonNull
method frame (line 247) | @NonNull
method format (line 256) | @NonNull
method disallowHardwareConfig (line 265) | @NonNull
method downsample (line 274) | @NonNull
method timeout (line 283) | @NonNull
method optionalCenterCrop (line 292) | @NonNull
method centerCrop (line 301) | @NonNull
method optionalFitCenter (line 310) | @NonNull
method fitCenter (line 319) | @NonNull
method optionalCenterInside (line 328) | @NonNull
method centerInside (line 337) | @NonNull
method optionalCircleCrop (line 346) | @NonNull
method circleCrop (line 355) | @NonNull
method transform (line 364) | @NonNull
method transform (line 373) | @NonNull
method transforms (line 386) | @Deprecated
method optionalTransform (line 401) | @NonNull
method optionalTransform (line 411) | @NonNull
method transform (line 421) | @NonNull
method dontTransform (line 431) | @NonNull
method dontAnimate (line 440) | @NonNull
method lock (line 449) | @NonNull
method autoClone (line 457) | @NonNull
method apply (line 462) | @Override
method transition (line 469) | @Override
method listener (line 477) | @Override
method addListener (line 484) | @Override
method error (line 492) | @Override
method error (line 498) | @Override
method thumbnail (line 505) | @Override
method thumbnail (line 512) | @Override
method thumbnail (line 522) | @Override
method thumbnail (line 529) | @Override
method load (line 537) | @Override
method load (line 544) | @Override
method load (line 551) | @Override
method load (line 558) | @Override
method load (line 565) | @Override
method load (line 572) | @Override
method load (line 579) | @Override
method load (line 586) | @Override
method load (line 593) | @Override
method clone (line 600) | @Override
method override (line 610) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/Extension.java
class Extension (line 8) | @GlideExtension
method Extension (line 11) | private Extension() {
method centerCrop (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 45) | @CheckResult
method diskCacheStrategyOf (line 54) | @CheckResult
method priorityOf (line 63) | @CheckResult
method placeholderOf (line 72) | @CheckResult
method placeholderOf (line 81) | @CheckResult
method errorOf (line 90) | @CheckResult
method errorOf (line 99) | @CheckResult
method skipMemoryCacheOf (line 108) | @CheckResult
method overrideOf (line 117) | @CheckResult
method overrideOf (line 126) | @CheckResult
method signatureOf (line 135) | @CheckResult
method fitCenterTransform (line 144) | @CheckResult
method centerInsideTransform (line 157) | @CheckResult
method centerCropTransform (line 170) | @CheckResult
method circleCropTransform (line 183) | @CheckResult
method bitmapTransform (line 196) | @CheckResult
method noTransformation (line 205) | @CheckResult
method option (line 218) | @CheckResult
method decodeTypeOf (line 227) | @CheckResult
method formatOf (line 236) | @CheckResult
method frameOf (line 245) | @CheckResult
method downsampleOf (line 254) | @CheckResult
method timeoutOf (line 263) | @CheckResult
method encodeQualityOf (line 272) | @CheckResult
method encodeFormatOf (line 281) | @CheckResult
method noAnimation (line 290) | @CheckResult
method sizeMultiplier (line 300) | @Override
method useUnlimitedSourceGeneratorsPool (line 307) | @Override
method useAnimationPool (line 314) | @Override
method onlyRetrieveFromCache (line 321) | @Override
method diskCacheStrategy (line 328) | @Override
method priority (line 335) | @Override
method placeholder (line 342) | @Override
method placeholder (line 349) | @Override
method fallback (line 356) | @Override
method fallback (line 363) | @Override
method error (line 370) | @Override
method error (line 377) | @Override
method theme (line 384) | @Override
method skipMemoryCache (line 391) | @Override
method override (line 398) | @Override
method override (line 405) | @Override
method signature (line 412) | @Override
method clone (line 419) | @Override
method set (line 425) | @Override
method decode (line 432) | @Override
method encodeFormat (line 439) | @Override
method encodeQuality (line 446) | @Override
method frame (line 453) | @Override
method format (line 460) | @Override
method disallowHardwareConfig (line 467) | @Override
method downsample (line 474) | @Override
method timeout (line 481) | @Override
method optionalCenterCrop (line 488) | @Override
method optionalFitCenter (line 495) | @Override
method fitCenter (line 502) | @Override
method optionalCenterInside (line 509) | @Override
method centerInside (line 516) | @Override
method optionalCircleCrop (line 523) | @Override
method circleCrop (line 530) | @Override
method transform (line 537) | @Override
method transform (line 544) | @Override
method transforms (line 553) | @Override
method optionalTransform (line 563) | @Override
method optionalTransform (line 570) | @Override
method transform (line 578) | @Override
method dontTransform (line 586) | @Override
method dontAnimate (line 593) | @Override
method apply (line 600) | @Override
method lock (line 607) | @Override
method autoClone (line 613) | @Override
method centerCrop (line 622) | @SuppressWarnings("unchecked")
method centerCropOf (line 632) | @CheckResult
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method override (line 202) | @NonNull
method signature (line 211) | @NonNull
method set (line 220) | @NonNull
method decode (line 229) | @NonNull
method encodeFormat (line 238) | @NonNull
method encodeQuality (line 247) | @NonNull
method frame (line 256) | @NonNull
method format (line 265) | @NonNull
method disallowHardwareConfig (line 274) | @NonNull
method downsample (line 283) | @NonNull
method timeout (line 292) | @NonNull
method optionalCenterCrop (line 301) | @NonNull
method optionalFitCenter (line 310) | @NonNull
method fitCenter (line 319) | @NonNull
method optionalCenterInside (line 328) | @NonNull
method centerInside (line 337) | @NonNull
method optionalCircleCrop (line 346) | @NonNull
method circleCrop (line 355) | @NonNull
method transform (line 364) | @NonNull
method transform (line 373) | @NonNull
method transforms (line 386) | @Deprecated
method optionalTransform (line 401) | @NonNull
method optionalTransform (line 411) | @NonNull
method transform (line 421) | @NonNull
method dontTransform (line 431) | @NonNull
method dontAnimate (line 440) | @NonNull
method lock (line 449) | @NonNull
method autoClone (line 457) | @NonNull
method apply (line 462) | @Override
method transition (line 469) | @Override
method listener (line 477) | @Override
method addListener (line 484) | @Override
method error (line 492) | @Override
method error (line 498) | @Override
method thumbnail (line 505) | @Override
method thumbnail (line 512) | @Override
method thumbnail (line 522) | @Override
method thumbnail (line 529) | @Override
method load (line 537) | @Override
method load (line 544) | @Override
method load (line 551) | @Override
method load (line 558) | @Override
method load (line 565) | @Override
method load (line 572) | @Override
method load (line 579) | @Override
method load (line 586) | @Override
method load (line 593) | @Override
method clone (line 600) | @Override
method centerCrop (line 609) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/Extension.java
class Extension (line 8) | @GlideExtension
method Extension (line 11) | private Extension() {
method test (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 45) | @CheckResult
method diskCacheStrategyOf (line 54) | @CheckResult
method priorityOf (line 63) | @CheckResult
method placeholderOf (line 72) | @CheckResult
method placeholderOf (line 81) | @CheckResult
method errorOf (line 90) | @CheckResult
method errorOf (line 99) | @CheckResult
method skipMemoryCacheOf (line 108) | @CheckResult
method overrideOf (line 117) | @CheckResult
method overrideOf (line 126) | @CheckResult
method signatureOf (line 135) | @CheckResult
method fitCenterTransform (line 144) | @CheckResult
method centerInsideTransform (line 157) | @CheckResult
method centerCropTransform (line 170) | @CheckResult
method circleCropTransform (line 183) | @CheckResult
method bitmapTransform (line 196) | @CheckResult
method noTransformation (line 205) | @CheckResult
method option (line 218) | @CheckResult
method decodeTypeOf (line 227) | @CheckResult
method formatOf (line 236) | @CheckResult
method frameOf (line 245) | @CheckResult
method downsampleOf (line 254) | @CheckResult
method timeoutOf (line 263) | @CheckResult
method encodeQualityOf (line 272) | @CheckResult
method encodeFormatOf (line 281) | @CheckResult
method noAnimation (line 290) | @CheckResult
method sizeMultiplier (line 300) | @Override
method useUnlimitedSourceGeneratorsPool (line 307) | @Override
method useAnimationPool (line 314) | @Override
method onlyRetrieveFromCache (line 321) | @Override
method diskCacheStrategy (line 328) | @Override
method priority (line 335) | @Override
method placeholder (line 342) | @Override
method placeholder (line 349) | @Override
method fallback (line 356) | @Override
method fallback (line 363) | @Override
method error (line 370) | @Override
method error (line 377) | @Override
method theme (line 384) | @Override
method skipMemoryCache (line 391) | @Override
method override (line 398) | @Override
method override (line 405) | @Override
method signature (line 412) | @Override
method clone (line 419) | @Override
method set (line 425) | @Override
method decode (line 432) | @Override
method encodeFormat (line 439) | @Override
method encodeQuality (line 446) | @Override
method frame (line 453) | @Override
method format (line 460) | @Override
method disallowHardwareConfig (line 467) | @Override
method downsample (line 474) | @Override
method timeout (line 481) | @Override
method optionalCenterCrop (line 488) | @Override
method centerCrop (line 495) | @Override
method optionalFitCenter (line 502) | @Override
method fitCenter (line 509) | @Override
method optionalCenterInside (line 516) | @Override
method centerInside (line 523) | @Override
method optionalCircleCrop (line 530) | @Override
method circleCrop (line 537) | @Override
method transform (line 544) | @Override
method transform (line 551) | @Override
method transforms (line 560) | @Override
method optionalTransform (line 570) | @Override
method optionalTransform (line 577) | @Override
method transform (line 585) | @Override
method dontTransform (line 593) | @Override
method dontAnimate (line 600) | @Override
method apply (line 607) | @Override
method lock (line 614) | @Override
method autoClone (line 620) | @Override
method test (line 629) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method override (line 202) | @NonNull
method signature (line 211) | @NonNull
method set (line 220) | @NonNull
method decode (line 229) | @NonNull
method encodeFormat (line 238) | @NonNull
method encodeQuality (line 247) | @NonNull
method frame (line 256) | @NonNull
method format (line 265) | @NonNull
method disallowHardwareConfig (line 274) | @NonNull
method downsample (line 283) | @NonNull
method timeout (line 292) | @NonNull
method optionalCenterCrop (line 301) | @NonNull
method centerCrop (line 310) | @NonNull
method optionalFitCenter (line 319) | @NonNull
method fitCenter (line 328) | @NonNull
method optionalCenterInside (line 337) | @NonNull
method centerInside (line 346) | @NonNull
method optionalCircleCrop (line 355) | @NonNull
method circleCrop (line 364) | @NonNull
method transform (line 373) | @NonNull
method transform (line 382) | @NonNull
method transforms (line 395) | @Deprecated
method optionalTransform (line 410) | @NonNull
method optionalTransform (line 420) | @NonNull
method transform (line 430) | @NonNull
method dontTransform (line 440) | @NonNull
method dontAnimate (line 449) | @NonNull
method lock (line 458) | @NonNull
method autoClone (line 466) | @NonNull
method apply (line 471) | @Override
method transition (line 478) | @Override
method listener (line 486) | @Override
method addListener (line 493) | @Override
method error (line 501) | @Override
method error (line 507) | @Override
method thumbnail (line 514) | @Override
method thumbnail (line 521) | @Override
method thumbnail (line 531) | @Override
method thumbnail (line 538) | @Override
method load (line 546) | @Override
method load (line 553) | @Override
method load (line 560) | @Override
method load (line 567) | @Override
method load (line 574) | @Override
method load (line 581) | @Override
method load (line 588) | @Override
method load (line 595) | @Override
method load (line 602) | @Override
method clone (line 609) | @Override
method test (line 618) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/Extension.java
class Extension (line 8) | @GlideExtension
method Extension (line 11) | private Extension() {
method test (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 45) | @CheckResult
method diskCacheStrategyOf (line 54) | @CheckResult
method priorityOf (line 63) | @CheckResult
method placeholderOf (line 72) | @CheckResult
method placeholderOf (line 81) | @CheckResult
method errorOf (line 90) | @CheckResult
method errorOf (line 99) | @CheckResult
method skipMemoryCacheOf (line 108) | @CheckResult
method overrideOf (line 117) | @CheckResult
method overrideOf (line 126) | @CheckResult
method signatureOf (line 135) | @CheckResult
method fitCenterTransform (line 144) | @CheckResult
method centerInsideTransform (line 157) | @CheckResult
method centerCropTransform (line 170) | @CheckResult
method circleCropTransform (line 183) | @CheckResult
method bitmapTransform (line 196) | @CheckResult
method noTransformation (line 205) | @CheckResult
method option (line 218) | @CheckResult
method decodeTypeOf (line 227) | @CheckResult
method formatOf (line 236) | @CheckResult
method frameOf (line 245) | @CheckResult
method downsampleOf (line 254) | @CheckResult
method timeoutOf (line 263) | @CheckResult
method encodeQualityOf (line 272) | @CheckResult
method encodeFormatOf (line 281) | @CheckResult
method noAnimation (line 290) | @CheckResult
method sizeMultiplier (line 300) | @Override
method useUnlimitedSourceGeneratorsPool (line 307) | @Override
method useAnimationPool (line 314) | @Override
method onlyRetrieveFromCache (line 321) | @Override
method diskCacheStrategy (line 328) | @Override
method priority (line 335) | @Override
method placeholder (line 342) | @Override
method placeholder (line 349) | @Override
method fallback (line 356) | @Override
method fallback (line 363) | @Override
method error (line 370) | @Override
method error (line 377) | @Override
method theme (line 384) | @Override
method skipMemoryCache (line 391) | @Override
method override (line 398) | @Override
method override (line 405) | @Override
method signature (line 412) | @Override
method clone (line 419) | @Override
method set (line 425) | @Override
method decode (line 432) | @Override
method encodeFormat (line 439) | @Override
method encodeQuality (line 446) | @Override
method frame (line 453) | @Override
method format (line 460) | @Override
method disallowHardwareConfig (line 467) | @Override
method downsample (line 474) | @Override
method timeout (line 481) | @Override
method optionalCenterCrop (line 488) | @Override
method centerCrop (line 495) | @Override
method optionalFitCenter (line 502) | @Override
method fitCenter (line 509) | @Override
method optionalCenterInside (line 516) | @Override
method centerInside (line 523) | @Override
method optionalCircleCrop (line 530) | @Override
method circleCrop (line 537) | @Override
method transform (line 544) | @Override
method transform (line 551) | @Override
method transforms (line 560) | @Override
method optionalTransform (line 570) | @Override
method optionalTransform (line 577) | @Override
method transform (line 585) | @Override
method dontTransform (line 593) | @Override
method dontAnimate (line 600) | @Override
method apply (line 607) | @Override
method lock (line 614) | @Override
method autoClone (line 620) | @Override
method test (line 629) | @SuppressWarnings("unchecked")
method testSomething (line 639) | @CheckResult
FILE: annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method override (line 202) | @NonNull
method signature (line 211) | @NonNull
method set (line 220) | @NonNull
method decode (line 229) | @NonNull
method encodeFormat (line 238) | @NonNull
method encodeQuality (line 247) | @NonNull
method frame (line 256) | @NonNull
method format (line 265) | @NonNull
method disallowHardwareConfig (line 274) | @NonNull
method downsample (line 283) | @NonNull
method timeout (line 292) | @NonNull
method optionalCenterCrop (line 301) | @NonNull
method centerCrop (line 310) | @NonNull
method optionalFitCenter (line 319) | @NonNull
method fitCenter (line 328) | @NonNull
method optionalCenterInside (line 337) | @NonNull
method centerInside (line 346) | @NonNull
method optionalCircleCrop (line 355) | @NonNull
method circleCrop (line 364) | @NonNull
method transform (line 373) | @NonNull
method transform (line 382) | @NonNull
method transforms (line 395) | @Deprecated
method optionalTransform (line 410) | @NonNull
method optionalTransform (line 420) | @NonNull
method transform (line 430) | @NonNull
method dontTransform (line 440) | @NonNull
method dontAnimate (line 449) | @NonNull
method lock (line 458) | @NonNull
method autoClone (line 466) | @NonNull
method apply (line 471) | @Override
method transition (line 478) | @Override
method listener (line 486) | @Override
method addListener (line 493) | @Override
method error (line 501) | @Override
method error (line 507) | @Override
method thumbnail (line 514) | @Override
method thumbnail (line 521) | @Override
method thumbnail (line 531) | @Override
method thumbnail (line 538) | @Override
method load (line 546) | @Override
method load (line 553) | @Override
method load (line 560) | @Override
method load (line 567) | @Override
method load (line 574) | @Override
method load (line 581) | @Override
method load (line 588) | @Override
method load (line 595) | @Override
method load (line 602) | @Override
method clone (line 609) | @Override
method test (line 618) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/ExtensionWithOption.java
class ExtensionWithOption (line 8) | @GlideExtension
method ExtensionWithOption (line 11) | private ExtensionWithOption() {
method squareThumb (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 45) | @CheckResult
method diskCacheStrategyOf (line 54) | @CheckResult
method priorityOf (line 63) | @CheckResult
method placeholderOf (line 72) | @CheckResult
method placeholderOf (line 81) | @CheckResult
method errorOf (line 90) | @CheckResult
method errorOf (line 99) | @CheckResult
method skipMemoryCacheOf (line 108) | @CheckResult
method overrideOf (line 117) | @CheckResult
method overrideOf (line 126) | @CheckResult
method signatureOf (line 135) | @CheckResult
method fitCenterTransform (line 144) | @CheckResult
method centerInsideTransform (line 157) | @CheckResult
method centerCropTransform (line 170) | @CheckResult
method circleCropTransform (line 183) | @CheckResult
method bitmapTransform (line 196) | @CheckResult
method noTransformation (line 205) | @CheckResult
method option (line 218) | @CheckResult
method decodeTypeOf (line 227) | @CheckResult
method formatOf (line 236) | @CheckResult
method frameOf (line 245) | @CheckResult
method downsampleOf (line 254) | @CheckResult
method timeoutOf (line 263) | @CheckResult
method encodeQualityOf (line 272) | @CheckResult
method encodeFormatOf (line 281) | @CheckResult
method noAnimation (line 290) | @CheckResult
method sizeMultiplier (line 300) | @Override
method useUnlimitedSourceGeneratorsPool (line 307) | @Override
method useAnimationPool (line 314) | @Override
method onlyRetrieveFromCache (line 321) | @Override
method diskCacheStrategy (line 328) | @Override
method priority (line 335) | @Override
method placeholder (line 342) | @Override
method placeholder (line 349) | @Override
method fallback (line 356) | @Override
method fallback (line 363) | @Override
method error (line 370) | @Override
method error (line 377) | @Override
method theme (line 384) | @Override
method skipMemoryCache (line 391) | @Override
method override (line 398) | @Override
method override (line 405) | @Override
method signature (line 412) | @Override
method clone (line 419) | @Override
method set (line 425) | @Override
method decode (line 432) | @Override
method encodeFormat (line 439) | @Override
method encodeQuality (line 446) | @Override
method frame (line 453) | @Override
method format (line 460) | @Override
method disallowHardwareConfig (line 467) | @Override
method downsample (line 474) | @Override
method timeout (line 481) | @Override
method optionalCenterCrop (line 488) | @Override
method centerCrop (line 495) | @Override
method optionalFitCenter (line 502) | @Override
method fitCenter (line 509) | @Override
method optionalCenterInside (line 516) | @Override
method centerInside (line 523) | @Override
method optionalCircleCrop (line 530) | @Override
method circleCrop (line 537) | @Override
method transform (line 544) | @Override
method transform (line 551) | @Override
method transforms (line 560) | @Override
method optionalTransform (line 570) | @Override
method optionalTransform (line 577) | @Override
method transform (line 585) | @Override
method dontTransform (line 593) | @Override
method dontAnimate (line 600) | @Override
method apply (line 607) | @Override
method lock (line 614) | @Override
method autoClone (line 620) | @Override
method squareThumb (line 629) | @SuppressWarnings("unchecked")
method squareThumbOf (line 639) | @CheckResult
FILE: annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideRequest.java
class GlideRequest (line 43) | @SuppressWarnings({
method GlideRequest (line 48) | GlideRequest(@NonNull Class<TranscodeType> transcodeClass, @NonNull Re...
method GlideRequest (line 52) | GlideRequest(@NonNull Glide glide, @NonNull RequestManager requestMana...
method getDownloadOnlyRequest (line 57) | @Override
method sizeMultiplier (line 67) | @NonNull
method useUnlimitedSourceGeneratorsPool (line 76) | @NonNull
method useAnimationPool (line 85) | @NonNull
method onlyRetrieveFromCache (line 94) | @NonNull
method diskCacheStrategy (line 103) | @NonNull
method priority (line 112) | @NonNull
method placeholder (line 121) | @NonNull
method placeholder (line 130) | @NonNull
method fallback (line 139) | @NonNull
method fallback (line 148) | @NonNull
method error (line 157) | @NonNull
method error (line 166) | @NonNull
method theme (line 175) | @NonNull
method skipMemoryCache (line 184) | @NonNull
method override (line 193) | @NonNull
method override (line 202) | @NonNull
method signature (line 211) | @NonNull
method set (line 220) | @NonNull
method decode (line 229) | @NonNull
method encodeFormat (line 238) | @NonNull
method encodeQuality (line 247) | @NonNull
method frame (line 256) | @NonNull
method format (line 265) | @NonNull
method disallowHardwareConfig (line 274) | @NonNull
method downsample (line 283) | @NonNull
method timeout (line 292) | @NonNull
method optionalCenterCrop (line 301) | @NonNull
method centerCrop (line 310) | @NonNull
method optionalFitCenter (line 319) | @NonNull
method fitCenter (line 328) | @NonNull
method optionalCenterInside (line 337) | @NonNull
method centerInside (line 346) | @NonNull
method optionalCircleCrop (line 355) | @NonNull
method circleCrop (line 364) | @NonNull
method transform (line 373) | @NonNull
method transform (line 382) | @NonNull
method transforms (line 395) | @Deprecated
method optionalTransform (line 410) | @NonNull
method optionalTransform (line 420) | @NonNull
method transform (line 430) | @NonNull
method dontTransform (line 440) | @NonNull
method dontAnimate (line 449) | @NonNull
method lock (line 458) | @NonNull
method autoClone (line 466) | @NonNull
method apply (line 471) | @Override
method transition (line 478) | @Override
method listener (line 486) | @Override
method addListener (line 493) | @Override
method error (line 501) | @Override
method error (line 507) | @Override
method thumbnail (line 514) | @Override
method thumbnail (line 521) | @Override
method thumbnail (line 531) | @Override
method thumbnail (line 538) | @Override
method load (line 546) | @Override
method load (line 553) | @Override
method load (line 560) | @Override
method load (line 567) | @Override
method load (line 574) | @Override
method load (line 581) | @Override
method load (line 588) | @Override
method load (line 595) | @Override
method load (line 602) | @Override
method clone (line 609) | @Override
method squareThumb (line 618) | @SuppressWarnings("unchecked")
FILE: annotation/compiler/test/src/test/resources/GlideExtensionWithTypeTest/ExtensionWithType.java
class ExtensionWithType (line 8) | @GlideExtension
method ExtensionWithType (line 11) | private ExtensionWithType() {
method asNumber (line 15) | @NonNull
FILE: annotation/compiler/test/src/test/resources/GlideExtensionWithTypeTest/GlideOptions.java
class GlideOptions (line 28) | @SuppressWarnings("deprecation")
method sizeMultiplierOf (line 45) | @CheckResult
method diskCacheStrategyOf (line 54) | @CheckResult
method priorityOf (line 63) | @CheckResult
method placeholderOf (line 72) | @CheckResult
method placeholderOf (line 81) | @CheckResult
method errorOf (line 90) | @CheckResult
method errorOf (line 99) | @CheckResult
method skipMemoryCacheOf (line 108) | @CheckResult
method overrideOf (line 117) | @CheckResult
method overrideOf (line 126) | @CheckResult
method signatureOf (line 135) | @CheckResult
method fitCenterTransform (line 144) | @CheckResult
method centerInsideTransform (line 157) | @CheckResult
method centerCropTransform (line 170) | @CheckResult
method circleCropTransform (line 183) | @CheckResult
method bitmapTransform (line 196) | @CheckResult
method noTransformation (line 205) | @CheckResult
method option (line 218) | @CheckResult
method decodeTypeOf (line 227) | @CheckResult
method formatOf (line 236) | @CheckResult
method frameOf (line 245) | @CheckResult
method downsampleOf (line 254) | @CheckResult
method timeoutOf (line 263) | @CheckResult
method encodeQualityOf (line 272) | @CheckResult
method encodeFormatOf (line 281) | @CheckResult
method noAnimation (line 290) | @CheckResult
method sizeMultiplier (line 300) | @Override
method useUnlimitedSourceGeneratorsPool (line 307) | @Override
method useAnimationPool (line 314) | @Override
method onlyRetrieveFromCache (line 321) | @Override
method diskCacheStrategy (line 328) | @Override
method priority (line 335) | @Override
method placeholder (line 342) | @Override
method placeholder (line 349) | @Override
method fallback (line 356) | @Override
method fallback (line 363) | @Override
method error (line 370) | @Override
method error (line 377) | @Override
method theme (line 384) | @Override
method skipMemoryCache (line 391) | @Override
method override (line 398) | @Override
method override (line 405) | @Override
method signature (line 412) | @Override
method clone (line 419) | @Override
method set (line 425) | @Override
method decode (line 432) | @Override
method encodeFormat (line 439) | @Override
method encodeQuality (line 446) | @Override
method frame (line 453) | @Override
method format (line 460) | @Override
method disallowHardwareConfig (line 467) | @Override
method downsample (line 474) | @Override
method timeout (line 481) | @Override
method optionalCenterCrop (line 488) | @Override
method centerCrop (line 495) | @Override
method optionalFitCenter (line 502) | @Override
method fitCenter (line 509) | @Override
method optionalCenterInside (line 516) | @Override
method centerInside (line 523) | @Override
method optionalCircleCrop (line 530) | @Override
method circleCrop (line 537) | @Override
method transform (line 544) | @Override
method transform (line 551) | @Override
method transforms (line 560) | @Override
method optionalTransform (line 570) | @Override
method optionalTransform (line 577) | @Override
method transform (line 585) | @Override
method dontTransform (line 593) | @Override
method dontAnimate (line 600) | @Override
method apply (line 607) | @Override
method lock (line 614) | @Override
method autoClone (line 620) | @Override
FILE: annotation/compiler/test/src/test/resources/GlideExtensionWithTypeTest/GlideRequests.java
class GlideRequests (line 28) | @SuppressWarnings("deprecation")
method GlideRequests (line 30) | public GlideRequests(@NonNull Glide glide, @NonNull Lifecycle lifecycle,
method as (line 35) | @Override
method asNumber (line 45) | @NonNull
method applyDefaultRequestOptions (line 51) | @Override
method setDefaultRequestOptions (line 57) | @Override
method addDefaultRequestListener (line 63) | @Override
method asBitmap (line 69) | @Override
method asGif (line 76) | @Override
method asDrawable (line 83) | @Override
method load (line 90) | @Override
method load (line 97) | @Override
method load (line 104) | @Override
method load (line 111) | @Override
method load (line 118) | @Override
method load (line 125) | @Override
method load (line 132) | @Override
method load (line 139) | @Override
method load (line 146) | @Override
method downloadOnly (line 153) | @Override
method download (line 160) | @Override
method asFile (line 167) | @Override
method setRequestOptions (line 174) | @Override
FILE: annotation/compiler/test/src/test/resources/MultipleAppGlideModuleTest/EmptyAppModule1.java
class EmptyAppModule1 (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/MultipleAppGlideModuleTest/EmptyAppModule2.java
class EmptyAppModule2 (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/MultipleEmptyLibraryGlideModuleTest/EmptyLibraryModule1.java
class EmptyLibraryModule1 (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/MultipleEmptyLibraryGlideModuleTest/EmptyLibraryModule2.java
class EmptyLibraryModule2 (line 6) | @GlideModule
FILE: annotation/compiler/test/src/test/resources/MultipleEmptyLibraryGlideModuleTest/GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule1_com_bumptech_glide_test_EmptyLibraryModule2.java
class GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule1_com_bumptech_glide_test_EmptyLibraryModule2 (line 3) | @Index(
FILE: benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkData.java
class BenchmarkData (line 17) | @RunWith(AndroidJUnit4.class)
method smallAsStream (line 23) | @Test
method hugeHeaderAsStream (line 28) | @Test
method smallAsByteArrayBuffer (line 33) | @Test
method hugeHeaderAsByteArrayBuffer (line 38) | @Test
method smallAsFileDescriptor (line 43) | @Test
method hugeHeaderAsFileDescriptor (line 48) | @Test
class ModelAndData (line 53) | static final class ModelAndData<DataT> {
method ModelAndData (line 57) | ModelAndData(Object model, DataT data) {
method benchmarkData (line 63) | private <T> void benchmarkData(final DataOpener<T> opener, final int r...
class FakeModel (line 89) | private static final class FakeModel {}
FILE: benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkFromCache.java
class BenchmarkFromCache (line 31) | @RunWith(AndroidJUnit4.class)
method pixel3a_portrait_original (line 39) | @Test
method pixel3a_portrait_large (line 44) | @Test
method pixel3a_portrait_medium (line 49) | @Test
method pixel3a_portrait_small (line 54) | @Test
method pixel3a_portrait_tiny (line 59) | @Test
method runBenchmark (line 64) | private void runBenchmark(@RawRes final int resourceId, final int targ...
method loadImageWithExpectedDataSource (line 94) | private void loadImageWithExpectedDataSource(
method clearMemoryCache (line 146) | private void clearMemoryCache() {
FILE: benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkMediaStoreData.java
class BenchmarkMediaStoreData (line 28) | @RunWith(AndroidJUnit4.class)
method setUp (line 35) | @Before
method readCacheFileFully (line 44) | @Test
method readMediaStoreFileFully (line 83) | @Test
method readFully (line 97) | private void readFully(Callable<InputStream> openInputStream) throws E...
FILE: benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkModels.java
class BenchmarkModels (line 31) | @RunWith(AndroidJUnit4.class)
method smallAsCacheFile (line 38) | @Test
method hugeHeaderAsCacheFile (line 43) | @Test
method smallAsResourceId (line 48) | @Test
method hugeHeaderAsResourceId (line 53) | @Test
method smallAsResourceUri (line 58) | @Test
method hugeHeaderAsResourceUri (line 64) | @Test
method smallAsMediaStoreUri (line 70) | @Test
method hugeHeaderAsMediaStoreUri (line 75) | @Test
method pixel3aAsMediaStoreUri (line 80) | @Test
method pixel3aExifRotatedAsMediaStoreUri (line 85) | @Test
method pixel3aMvimgExifRotatedAsMediaStoreUri (line 90) | @Test
method smallAsMediaStoreFilepath (line 95) | @Test
method pixel3aAsMediaStoreFilepath (line 100) | @Test
method pixel3aExifRotatedAsMediaStoreFilepath (line 105) | @Test
method pixel3aMvimgExifRotatedAsMediaStoreFilepath (line 110) | @Test
method hugeHeaderAsMediaStoreFilepath (line 115) | @Test
method resourceUriFromId (line 120) | private Uri resourceUriFromId(@RawRes int resourceId) {
method mediaStoreUriFromId (line 134) | private Uri mediaStoreUriFromId(@RawRes int resourceId) throws IOExcep...
method benchmarkAsMediaStoreUri (line 174) | private void benchmarkAsMediaStoreUri(@RawRes int resourceId) throws E...
method cleanupMediaStoreUri (line 183) | private void cleanupMediaStoreUri(Uri mediaStoreUri) {
method benchmarkAsMediaStoreFilepath (line 190) | private void benchmarkAsMediaStoreFilepath(@RawRes int resourceId) thr...
method getMediaStoreFilepath (line 199) | private String getMediaStoreFilepath(Uri mediaStoreUri) {
method benchmarkAsCacheFile (line 219) | private void benchmarkAsCacheFile(@RawRes final int resourceId) throws...
method benchmarkModel (line 236) | private void benchmarkModel(final Object model) throws Exception {
FILE: benchmark/src/androidTest/java/com/bumptech/glide/benchmark/GlideBenchmarkRule.java
class GlideBenchmarkRule (line 18) | final class GlideBenchmarkRule implements TestRule {
method apply (line 24) | @NotNull
method pauseTiming (line 30) | void pauseTiming() {
method resumeTiming (line 34) | void resumeTiming() {
method getBenchmark (line 38) | BenchmarkRule getBenchmark() {
type LoadStep (line 42) | interface LoadStep<BeforeDataT> {
method getModel (line 43) | Object getModel(BeforeDataT beforeData) throws Exception;
type BeforeStep (line 46) | interface BeforeStep<BeforeDataT> {
method act (line 47) | BeforeDataT act() throws Exception;
type AfterStep (line 50) | interface AfterStep<BeforeDataT> {
method act (line 51) | void act(BeforeDataT beforeData) throws Exception;
method runBenchmark (line 54) | <T> void runBenchmark(BeforeStep<T> beforeStep, AfterStep<T> afterStep...
method runBenchmark (line 66) | <T> void runBenchmark(BeforeStep<T> beforeStep, LoadStep<T> loadStep, ...
FILE: benchmark/src/androidTest/java/com/bumptech/glide/benchmark/data/DataOpener.java
type DataOpener (line 15) | public interface DataOpener<T> {
method acquire (line 16) | T acquire(@RawRes int resourceId) throws IOException;
method close (line 18) | void close(T data) throws IOException;
class StreamOpener (line 20) | final class StreamOpener implements DataOpener<InputStream> {
method acquire (line 22) | @Override
method close (line 27) | @Override
class ByteArrayBufferOpener (line 33) | final class ByteArrayBufferOpener implements DataOpener<ByteBuffer> {
method acquire (line 35) | @Override
method close (line 52) | @Override
class InputStreamOverByteArrayBufferOpener (line 56) | final class InputStreamOverByteArrayBufferOpener implements DataOpener...
method acquire (line 61) | @Override
method close (line 67) | @Override
class FileOpener (line 76) | final class FileOpener implements DataOpener<File> {
method acquire (line 78) | @Override
method close (line 88) | @Override
class ByteArrayOpener (line 96) | final class ByteArrayOpener implements DataOpener<byte[]> {
method acquire (line 98) | @Override
method close (line 121) | @Override
class ParcelFileDescriptorOpener (line 125) | final class ParcelFileDescriptorOpener implements DataOpener<ParcelFil...
method acquire (line 130) | @Override
method close (line 136) | @Override
class MemoryMappedByteBufferOpener (line 145) | final class MemoryMappedByteBufferOpener implements DataOpener<ByteBuf...
method acquire (line 150) | @Override
method close (line 156) | @Override
FILE: benchmark/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/BenchmarkDownsampler.java
class BenchmarkDownsampler (line 33) | @RunWith(AndroidJUnit4.class)
method testInputStream (line 41) | @Test
method testByteBufferOverByteArray (line 46) | @Test
method testByteBufferOverFile (line 51) | @Test
method testParcelFileDescriptorOverFile (line 56) | @Test
method testFile (line 61) | @Test
method testByteArray (line 66) | @Test
method testInputStreamOverByteBufferOverByteArray (line 72) | @Test
method runBenchmark (line 77) | private <T> void runBenchmark(DataOpener<T> opener, Decoder<T> decoder...
type Decoder (line 96) | private interface Decoder<T> {
method decode (line 97) | void decode(Downsampler downsampler, T data, int width, int height) ...
class ByteBufferDecoder (line 100) | private static final class ByteBufferDecoder implements Decoder<ByteBu...
method decode (line 101) | @Override
class InputStreamDecoder (line 108) | private static final class InputStreamDecoder implements Decoder<Input...
method decode (line 109) | @Override
class ParcelFileDescriptorDecoder (line 116) | private static final class ParcelFileDescriptorDecoder implements Deco...
method decode (line 117) | @Override
class FileDecoder (line 124) | private static final class FileDecoder implements Decoder<File> {
method decode (line 125) | @Override
class ByteArrayDecoder (line 132) | private static final class ByteArrayDecoder implements Decoder<byte[]> {
method decode (line 133) | @Override
method newDownsampler (line 140) | private Downsampler newDownsampler() {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/AsBytesTest.java
class AsBytesTest (line 26) | @RunWith(AndroidJUnit4.class)
method setUp (line 34) | @Before
method loadImageResourceId_asBytes_providesBytesOfBitmap (line 40) | @Test
method loadBitmap_asBytes_providesBytesOfBitmap (line 49) | @Test
method loadBitmapDrawable_asBytes_providesBytesOfBitmap (line 58) | @Test
method loadVideoResourceId_asBytes_providesBytesOfFrame (line 72) | @Test
method loadVideoResourceId_asBytes_withFrameTime_providesBytesOfFrame (line 81) | @Test
method loadVideoFile_asBytes_providesByteOfFrame (line 95) | @Test
method loadVideoFile_asBytes_withFrameTime_providesByteOfFrame (line 104) | @Test
method loadVideoFilePath_asBytes_providesByteOfFrame (line 118) | @Test
method loadVideoFilePath_asBytes_withFrameTime_providesByteOfFrame (line 131) | @Test
method loadVideoFileUri_asBytes_providesByteOfFrame (line 145) | @Test
method loadVideoFileUri_asBytes_withFrameTime_providesByteOfFrame (line 154) | @Test
method writeVideoToFile (line 168) | private File writeVideoToFile() throws IOException {
method writeVideoToFileUri (line 172) | private Uri writeVideoToFileUri() throws IOException {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/AsFileTest.java
class AsFileTest (line 25) | @RunWith(AndroidJUnit4.class)
method setUp (line 35) | @Before
method asFile_withUrl_succeeds (line 40) | @Test
method asFile_withUrlAndDiskCacheStrategyAutomatic_succeeds (line 46) | @Test
method asFile_withUrlAndDiskCacheStrategyData_succeeds (line 58) | @Test
method asFile_withUrlAndDiskCacheStrategyResource_fails (line 70) | @Test
method asFile_withUrlAndDiskCacheStrategyAll_fails (line 85) | @Test
method getData (line 100) | private InputStream getData() {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/CachingTest.java
class CachingTest (line 57) | @RunWith(AndroidJUnit4.class)
method setUp (line 69) | @Before
method submit_withDisabledMemoryCache_andResourceInActiveResources_loadsFromMemory (line 77) | @Test
method submit_withRequestClearedFromMemory_doesNotLoadFromMemory (line 96) | @Test
method submit_withPreviousRequestClearedFromMemory_completesFromDataDiskCache (line 152) | @Test
method submit_withPreviousButNoLongerReferencedIdenticalRequest_completesFromMemoryCache (line 191) | @Test
method submit_withPreviousButNoLongerReferencedIdenticalRequest_doesNotRecycleBitmap (line 222) | @Test
method clearDiskCache_doesNotPreventFutureLoads (line 253) | @Test
method onlyRetrieveFromCache_withPreviousRequestLoadingFromSource_doesNotBlock (line 309) | @Test
method submit_withRequestLoadingWithOnlyRetrieveFromCache_andNotInCache_doesNotFail (line 331) | @Test
method loadIntoView_withoutSkipMemoryCache_loadsFromMemoryCacheIfPresent (line 373) | @Test
method loadIntoView_withSkipMemoryCacheFalse_loadsFromMemoryCacheIfPresent (line 414) | @Test
method loadIntoView_withSkipMemoryCache_doesNotLoadFromMemoryCacheIfPresent (line 457) | @Test
method clearMemoryCacheOnMainThread (line 496) | private void clearMemoryCacheOnMainThread() {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/CenterCropRegressionTest.java
class CenterCropRegressionTest (line 23) | @RunWith(AndroidJUnit4.class)
method setUp (line 34) | @Before
method centerCrop_withSquareSmallerThanImage_returnsSquareImage (line 42) | @Test
method centerCrop_withRectangleSmallerThanImage_returnsRectangularImage (line 56) | @Test
method centerCrop_withSquareLargerThanImage_returnsUpscaledRectangularImage (line 70) | @Test
method centerCrop_withRectangleLargerThanImage_returnsUpscaledRectangularImage (line 84) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/CenterInsideRegressionTest.java
class CenterInsideRegressionTest (line 23) | @RunWith(AndroidJUnit4.class)
method setUp (line 34) | @Before
method centerInside_withSquareSmallerThanImage_returnsImageFitWithinSquare (line 42) | @Test
method centerInside_withSquareLargerThanImage_returnsOriginalImage (line 58) | @Test
method centerInside_withNarrowRectangle_fitsWithinMaintainingAspectRatio (line 75) | @Test
method centerInside_withShortRectangle_fitsWithinMaintainingAspectRatio (line 90) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/CircleCropRegressionTest.java
class CircleCropRegressionTest (line 23) | @RunWith(AndroidJUnit4.class)
method setUp (line 34) | @Before
method circleCrop_withSquareSmallerThanImage_returnsSquaredImage (line 42) | @Test
method circleCrop_withSquareLargerThanImage_returnsUpscaledFitImage (line 57) | @Test
method circleCrop_withNarrowRectangle_cropsWithin (line 74) | @Test
method circleCrop_withShortRectangle_fitsWithinMaintainingAspectRatio (line 89) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/DarkModeTest.java
class DarkModeTest (line 43) | @RunWith(AndroidJUnit4.class)
method before (line 51) | @Before
method load_withDarkModeActivity_vectorDrawable_usesDarkModeColor (line 57) | @Test
method load_withLightModeActivity_vectorDrawable_usesLightModeColor (line 66) | @Test
method runActivityDrawableTest (line 75) | private void runActivityDrawableTest(
method drawableToBitmap (line 111) | private static Bitmap drawableToBitmap(Drawable drawable) {
method load_withDarkModeActivity_useDarkModeDrawable (line 123) | @Test
method load_withDarkModeActivity_afterLoadingWithLightModeActivity_useDarkModeDrawable (line 131) | @Test
method load_withDarkModeActivity_afterLoadingWithLightModeActivity_memoryCacheCleared_useDarkModeDrawable (line 147) | @Test
method load_withDarkModeFragment_usesDarkModeDrawable (line 167) | @Test
method load_withLightModeActivity_usesLightModeDrawable (line 175) | @Test
method load_withLightModeFragment_usesLightModeDrawable (line 183) | @Test
method load_withDarkModeActivity_darkModeTheme_usesDarkModeDrawable (line 191) | @Test
method loadResourceNameUri_withDarkModeActivity_darkModeTheme_usesDarkModeDrawable (line 203) | @Test
method loadResourceNameUri_withDarkModeActivity_usesDarkModeDrawable (line 215) | @Test
method loadResourceNameUri_withDarkModeActivity_afterLightModeActivity_usesDarkModeDrawable (line 226) | @Test
method loadResourceIdUri_withDarkModeActivity_darkModeTheme_usesDarkModeDrawable (line 245) | @Test
method loadResourceIdUri_withDarkModeActivity_usesDarkModeDrawable (line 257) | @Test
method newResourceNameUri (line 268) | private static Uri newResourceNameUri(Context context, int resourceId) {
method newResourceIdUri (line 276) | private static Uri newResourceIdUri(Context context, int resourceId) {
method newResourceUriBuilder (line 280) | private static Uri.Builder newResourceUriBuilder(Context context) {
method load_withDarkModeFragment_darkModeTheme_usesDarkModeDrawable (line 286) | @Test
method loadResourceNameUri_withDarkModeFragment_darkModeTheme_usesDarkModeDrawable (line 298) | @Test
method loadResourceIdUri_withDarkModeFragment_darkModeTheme_usesDarkModeDrawable (line 310) | @Test
method load_withApplicationContext_darkTheme_usesDarkModeDrawable (line 322) | @Test
method load_withApplicationContext_lightTheme_thenDarkTheme_usesDarkModeDrawable (line 334) | @Ignore("TODO(#3751): Consider how to deal with themes applied for app...
method loadResourceNameUri_withApplicationContext_darkTheme_usesDarkModeDrawable (line 356) | @Test
method loadResourceNameUri_withApplicationContext_darkTheme_afterLightTheme_usesDarkModeDrawable (line 368) | @Ignore("TODO(#3751): Consider how to deal with themes applied for app...
method loadResourceIdUri_withApplicationContext_darkTheme_usesDarkModeDrawable (line 391) | @Test
method load_withApplicationContext_lightTheme_usesLightModeDrawable (line 403) | @Test
method load_withLightModeActivity_lightModeTheme_usesLightModeDrawable (line 415) | @Test
method placeholder_withDarkModeActivity_usesDarkModeDrawable (line 427) | @Test
method placeholder_withDarkModeFragment_usesDarkModeDrawable (line 435) | @Test
method error_withDarkModeActivity_usesDarkModeDrawable (line 443) | @Test
method error_withDarkModeFragment_usesDarkModeDrawable (line 451) | @Test
method fallback_withDarkModeActivity_usesDarkModeDrawable (line 459) | @Test
method fallback_withDarkModeFragment_usesDarkModeDrawable (line 467) | @Test
method placeholder_withLightModeActivity_usesLightModeDrawable (line 475) | @Test
method placeholder_withLightModeFragment_usesLightModeDrawable (line 483) | @Test
method placeholder_withDarkModeActivityAndTheme_usesDarkModeDrawable (line 491) | @Test
method placeholder_withLightModeActivityAndTheme_usesLightModeDrawable (line 503) | @Test
method placeholder_withApplicationContext_darkTheme_usesDarkModeDrawable (line 515) | @Test
method placeholder_withApplicationContext_lightTheme_usesLightModeDrawable (line 527) | @Test
method darkModeActivity (line 539) | private ActivityScenario<FragmentActivity> darkModeActivity() {
method lightModeActivity (line 543) | private ActivityScenario<FragmentActivity> lightModeActivity() {
method runFragmentTest (line 547) | private static void runFragmentTest(
class ImageViewFragment (line 571) | public static final class ImageViewFragment extends Fragment {
method onCreateView (line 572) | @Override
method newFixedSizeImageView (line 581) | private static ImageView newFixedSizeImageView(Context context) {
method runActivityTest (line 587) | private static void runActivityTest(
method assertImageViewContainerChildHasContent (line 605) | private static void assertImageViewContainerChildHasContent(
method findImageView (line 616) | private static ImageView findImageView(FragmentActivity activity) {
method findContainer (line 621) | private static ViewGroup findContainer(FragmentActivity activity) {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/DataUriTest.java
class DataUriTest (line 24) | @RunWith(AndroidJUnit4.class)
method load_withJpegAsDataUriString_returnsBitmap (line 30) | @Test
method load_withPngDataUriString_returnsBitmap (line 38) | @Test
method load_withJpegAsDataUri_returnsBitmap (line 46) | @Test
method load_withPngAsDataUri_returnsBitmap (line 54) | @Test
method getDataUri (line 62) | private Uri getDataUri(CompressFormat format) {
method getDataUriString (line 66) | private String getDataUriString(CompressFormat format) {
method getBase64BitmapBytes (line 87) | @SuppressWarnings("deprecation")
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/DownsampleVideoTest.java
class DownsampleVideoTest (line 22) | @RunWith(AndroidJUnit4.class)
method setUp (line 32) | @Before
method loadVideo_downsampleStrategyNone_returnsOriginalVideoDimensions (line 37) | @Test
method loadVideo_downsampleStrategyNone_doesNotUpscale (line 50) | @Test
method loadVideo_downsampleDefault_downsamplesVideo (line 63) | @Test
method loadVideo_downsampleAtMost_downsamplesToSmallerSize (line 72) | @Test
method loadVideo_downsampleAtMost_doesNotUpscale (line 84) | @Test
method loadVideo_downsampleAtLeast_downsamplesToLargerSize (line 96) | @Test
method loadVideo_downsampleAtLeast_doesNotUpscale (line 108) | @Test
method loadVideo_downsampleCenterInside_downsamplesWithinBox (line 120) | @Test
method loadVideo_downsampleCenterInside_doesNotUpscale (line 132) | @Test
method loadVideo_downsampleCenterOutside_downsamplesOutsideBox (line 144) | @Test
method loadVideo_downsampleCenterOutside_upsacles (line 156) | @Test
method loadVideo_downsampleFitCenter_downsamplesInsideBox (line 168) | @Test
method loadVideo_downsampleFitCenter_upscales (line 180) | @Test
method loadVideo_withSizeOriginal_ignoresDownsampleStrategy (line 192) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/DrawableTransformationTest.java
class DrawableTransformationTest (line 35) | @RunWith(AndroidJUnit4.class)
method setUp (line 39) | @Before
method tearDown (line 44) | @After
method load_withColorDrawable_sizeOriginal_optionalTransform_returnsColorDrawable (line 50) | @Test
method load_withColorDrawable_fixedSize_requiredUnitTransform_returnsOriginalDrawable (line 66) | @Test
method load_withColorDrawable_fixedSize_nonUnitRequiredTransform_returnsBitmapDrawable (line 86) | @Test
method load_withColorDrawable_sizeOriginal_requiredTransform_fails (line 118) | @Test
method load_withBitmapDrawable_andDoNothingTransformation_doesNotRecycleBitmap (line 159) | @Test
method load_withBitmapDrawable_andFunctionalTransformation_doesNotRecycleBitmap (line 176) | @Test
method load_withColorDrawable_fixedSize_unitBitmapTransform_recyclesIntermediates (line 193) | @Test
method load_withColorDrawable_fixedSize_functionalBitmapTransform_doesNotRecycleOutput (line 211) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/ErrorHandlingTest.java
class ErrorHandlingTest (line 44) | @RunWith(AndroidJUnit4.class)
method setUp (line 53) | @Before
method initializeGlideWithWaitForErrorStrategy (line 59) | private WaitForErrorStrategy initializeGlideWithWaitForErrorStrategy() {
method load_whenEncoderFails_callsUncaughtThrowableStrategy (line 80) | @Test
method load_whenLoadSucceeds_butEncoderFails_doesNotCallOnLoadFailed (line 100) | @Test
method clearRequest_withError_afterPrimaryFails_clearsErrorRequest (line 122) | @Test
class WaitForErrorStrategy (line 142) | private static final class WaitForErrorStrategy implements UncaughtThr...
method handle (line 146) | @Override
class FailEncoder (line 156) | private static final class FailEncoder implements ResourceEncoder<Bitm...
method getEncodeStrategy (line 160) | @NonNull
method encode (line 166) | @Override
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/ExternallyClearedDiskCacheTest.java
class ExternallyClearedDiskCacheTest (line 26) | @RunWith(AndroidJUnit4.class)
method setUp (line 33) | @Before
method tearDown (line 39) | @After
method clearDiskCache_afterOpeningDiskCache_andDeleteDirectoryOutsideGlide_doesNotThrow (line 46) | @Test
method get_afterDeleteDirectoryOutsideGlideAndClose_doesNotThrow (line 54) | @Test
method loadFromCache_afterDiskCacheDeletedAndCleared_doesNotFail (line 64) | @Test
method loadFromCache_afterDiskCacheDeleted_doesNotFail (line 87) | @Test
method deleteRecursively (line 108) | private static void deleteRecursively(File file) {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/FitCenterRegressionTest.java
class FitCenterRegressionTest (line 25) | @RunWith(AndroidJUnit4.class)
method setUp (line 36) | @Before
method fitCenter_withSquareSmallerThanImage_returnsImageFitWithinSquare (line 44) | @Test
method fitCenter_withSquareLargerThanImage_returnsUpscaledSquare (line 56) | @Test
method fitCenter_withNarrowRectangle_fitsWithinMaintainingAspectRatio (line 74) | @Test
method fitCenter_withShortRectangle_fitsWithinMaintainingAspectRatio (line 89) | @Test
method fitCenter_withHugeRectangle_throwsOOM (line 104) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LargeImageTest.java
class LargeImageTest (line 26) | @RunWith(AndroidJUnit4.class)
method loadLargeJpeg_asByteArray_succeeds (line 32) | @Test
method loadLargeJpeg_asByteBuffer_succeeds (line 39) | @Test
method getLargeImageBytes (line 53) | private byte[] getLargeImageBytes() throws IOException {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LoadAnimatedImageResourceTest.java
class LoadAnimatedImageResourceTest (line 30) | @RunWith(AndroidJUnit4.class)
method setUp (line 42) | @Before
method loadAnimatedImageResourceId_fromInt_decodesAnimatedImageDrawable_Webp (line 48) | @Test
method loadAnimatedImageResourceId_fromInt_decodesAnimatedImageDrawable_Avif (line 58) | @Test
method loadAnimatedImageUri_fromId_decodesAnimatedImageDrawable_Webp (line 68) | @Test
method loadAnimatedImageUri_fromId_decodesAnimatedImageDrawable_Avif (line 84) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LoadAssetUriTest.java
class LoadAssetUriTest (line 26) | @RunWith(AndroidJUnit4.class)
method setUp (line 35) | @Before
method loadVideoAssetUri_decodesFrame (line 41) | @Test
method loadVideoAssetUri_asBitmap_decodesFrame (line 50) | @Test
method loadVideoAssetUri_withFrame_decodesFrame (line 59) | @Test
method loadVideoAssetUriString_decodesFrame (line 74) | @Test
method loadVideoAssetUriString_withFrame_decodesFrame (line 83) | @Test
method loadImageAssetUri_decodesImage (line 98) | @Test
method loadImageAssetUri_asBitmap_decodesImage (line 107) | @Test
method loadImageAssetUriString_decodesImage (line 116) | @Test
method assetNameToUri (line 125) | private static String assetNameToUri(String assetName) {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LoadBitmapTest.java
class LoadBitmapTest (line 38) | @RunWith(AndroidJUnit4.class)
method setUp (line 48) | @Before
method clearFromRequestBuilder_asDrawable_withLoadedBitmap_doesNotRecycleBitmap (line 64) | @Test
method transformFromRequestBuilder_asDrawable_withLoadedBitmap_doesNotRecycleBitmap (line 82) | @Test
method clearFromRequestManager_withLoadedBitmap_doesNotRecycleBitmap (line 96) | @Test
method transformFromRequestManager_withLoadedBitmap_doesNotRecycleBitmap (line 114) | @Test
method clearFromRequestBuilder_withLoadedBitmap_asBitmap_doesNotRecycleBitmap (line 127) | @Test
method transformFromRequestBuilder_withLoadedBitmap_asBitmap_doesNotRecycleBitmap (line 145) | @Test
method loadFromRequestManager_withBitmap_doesNotLoadFromDiskCache (line 158) | @Test
method loadFromRequestBuilder_asDrawable_withBitmap_doesNotLoadFromDiskCache (line 196) | @Test
method loadFromRequestBuilder_asDrawable_withBitmapAndStrategyBeforeLoad_notFromCache (line 235) | @Test
method loadFromRequestBuilder_asBitmap_withBitmap_doesNotLoadFromDiskCache (line 279) | @Test
method loadFromRequestBuilder_asBitmap_withBitmapAndStrategyBeforeLoad_notFromCache (line 319) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LoadBytesTest.java
class LoadBytesTest (line 47) | @RunWith(AndroidJUnit4.class)
method setUp (line 57) | @Before
method loadFromRequestManager_intoImageView_withDifferentByteArrays_loadsDifferentImages (line 81) | @Test
method loadFromRequestBuilder_intoImageView_withDifferentByteArrays_loadsDifferentImages (line 106) | @Test
method requestManager_intoImageView_withSameByteArrayAndMemoryCacheEnabled_loadsFromMemory (line 133) | @Test
method requestBuilder_intoImageView_withSameByteArrayAndMemoryCacheEnabled_loadsFromMemory (line 158) | @Test
method loadFromRequestManager_withSameByteArray_validDiskCacheStrategy_returnsFromDiskCache (line 185) | @Test
method loadFromRequestBuilder_withSameByteArray_validDiskCacheStrategy_returnsFromDiskCache (line 221) | @Test
method loadFromRequestManager_withSameByteArray_memoryCacheEnabled_returnsFromCache (line 259) | @Test
method loadFromRequestBuilder_withSameByteArray_memoryCacheEnabled_returnsFromCache (line 283) | @Test
method loadFromRequestManager_withSameByteArray_returnsFromLocal (line 309) | @Test
method loadFromRequestBuilder_withSameByteArray_returnsFromLocal (line 326) | @Test
method loadFromRequestManager_withSameByteArrayAndMissingFromMemory_returnsFromLocal (line 345) | @Test
method loadFromRequestBuilder_withSameByteArrayAndMissingFromMemory_returnsFromLocal (line 371) | @Test
method loadFromBuilder_withDiskCacheStrategySetBeforeLoad_doesNotOverrideDiskCacheStrategy (line 399) | @Test
method loadFromBuilder_withSkipMemoryCacheSetBeforeLoad_doesNotOverrideSkipMemoryCache (line 435) | @Test
method loadFromBuilder_withDataDiskCacheStrategy_returnsFromSource (line 467) | @Test
method copyFromImageViewDrawable (line 496) | private Bitmap copyFromImageViewDrawable(ImageView imageView) {
method getCanonicalDimensions (line 506) | private int[] getCanonicalDimensions() throws IOException {
method getModifiedBytes (line 513) | private byte[] getModifiedBytes() throws IOException {
method getCanonicalBytes (line 521) | private byte[] getCanonicalBytes() throws IOException {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LoadDrawableTest.java
class LoadDrawableTest (line 39) | @RunWith(AndroidJUnit4.class)
method setUp (line 50) | @Before
method clear_withLoadedBitmapDrawable_doesNotRecycleBitmap (line 64) | @Test
method transform_withLoadedBitmapDrawable_doesNotRecycleBitmap (line 83) | @Test
method loadFromRequestManager_withBitmap_doesNotLoadFromDiskCache (line 97) | @Test
method loadFromRequestBuilder_asDrawable_withBitmap_doesNotLoadFromDiskCache (line 132) | @Test
method loadFromRequestBuilder_asDrawable_withBitmapAndStrategyBeforeLoad_notFromCache (line 168) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LoadResourcesWithDownsamplerTest.java
class LoadResourcesWithDownsamplerTest (line 53) | @RunWith(AndroidJUnit4.class)
method loadJpegResource_withNoOtherLoaders_decodesResource (line 59) | @Test
method loadWideGamutJpegResource_withNoOtherLoaders_decodesWideGamutBitmap (line 69) | @Test
method loadOpaquePngResource_withNoOtherLoaders_decodesResource (line 92) | @Test
method loadTransparentPngResource_withNoOtherLoaders_decodesResource (line 103) | @Test
method loadTransparentGifResource_withNoOtherLoaders_decodesResource (line 116) | @Test
method loadTransparentGifResource_asHardware_withNoOtherLoaders_decodesResource (line 129) | @Test
method loadTransparentGifResource_withNoOtherLoaders_fromBytes_decodesResource (line 166) | @Test
method loadOpaqueGifResource_withNoOtherLoaders_decodesResource (line 173) | @Test
method loadOpaqueGifResource_asBytes_decodesResource (line 184) | @Test
method loadOpaqueGifResource_asHardware_withNoOtherLoaders_decodesResource (line 191) | @Test
method getBytes (line 213) | private byte[] getBytes(int resourceId) {
class FakeModelLoader (line 238) | private class FakeModelLoader<T>
method FakeModelLoader (line 243) | FakeModelLoader(int resourceId) {
method buildLoadData (line 247) | @androidx.annotation.Nullable
method handles (line 254) | @Override
method build (line 259) | @NonNull
method teardown (line 265) | @Override
class Fetcher (line 268) | private final class Fetcher implements DataFetcher<InputStream> {
method loadData (line 271) | @Override
method getInputStreamForResource (line 278) | private InputStream getInputStreamForResource(Context context, @Dr...
method cleanup (line 296) | @Override
method cancel (line 308) | @Override
method getDataClass (line 313) | @NonNull
method getDataSource (line 319) | @NonNull
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/LoadVideoResourceTest.java
class LoadVideoResourceTest (line 29) | @RunWith(AndroidJUnit4.class)
method setUp (line 36) | @Before
method loadVideoResourceId_fromInt_decodesFrame (line 42) | @Test
method loadVideoResourceId_fromInt_withFrameTime_decodesFrame (line 49) | @Test
method loadVideoResourceId_fromInteger_decodesFrame (line 62) | @SuppressWarnings("UnnecessaryBoxing")
method loadVideoResourceId_fromInteger_withFrameTime_decodesFrame (line 72) | @SuppressWarnings("UnnecessaryBoxing")
method loadVideoResourceId_asBitmap_decodesFrame (line 85) | @Test
method loadVideoResourceId_asBitmap_withFrameTime_decodesFrame (line 93) | @Test
method loadVideoResourceUri_fromId_decodesFrame (line 106) | @Test
method loadVideoResourceUri_asBitmap_fromId_decodesFrame (line 120) | @Test
method loadVideoResourceUri_fromId_withFrame_decodesFrame (line 134) | @Test
method loadVideoResourceUriString_fromId_decodesFrame (line 154) | @Test
method loadVideoResourceUriString_fromId_withFrame_decodesFrame (line 168) | @Test
method loadVideoResourceUri_fromName_decodesFrame (line 188) | @Test
method loadVideoResourceUri_asBitmap_fromName_decodesFrame (line 205) | @Test
method loadVideoResourceUri_fromName_withFrame_decodesFrame (line 222) | @Test
method loadVideoResourceUriString_fromName_decodesFrame (line 245) | @Test
method loadVideoResourceUriString_fromName_withFrame_decodesFrame (line 262) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/MultiRequestTest.java
class MultiRequestTest (line 40) | @RunWith(AndroidJUnit4.class)
method thumbnail_onResourceReady_forPrimary_isComplete_whenRequestListenerIsCalled (line 48) | @Test
method thumbnail_onLoadFailed_forPrimary_isNotRunningOrComplete_whenRequestListenerIsCalled (line 94) | @Test
method newImageFile (line 142) | private File newImageFile() throws IOException {
class DoNothingTarget (line 155) | private static final class DoNothingTarget extends CustomTarget<Drawab...
method onResourceReady (line 156) | @Override
method onLoadCleared (line 160) | @Override
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/NonBitmapDrawableResourcesTest.java
class NonBitmapDrawableResourcesTest (line 34) | @RunWith(AndroidJUnit4.class)
method load_withBitmapResourceId_asDrawable_producesNonNullDrawable (line 40) | @Test
method load_withBitmapResourceId_asDrawable_withTransformation_producesNonNullBitmap (line 47) | @Test
method load_withBitmapResourceId_asBitmap_producesNonNullBitmap (line 59) | @Test
method load_withBitmapAliasResourceId_asDrawable_producesNonNullDrawable (line 67) | @Test
method load_withBitmapAliasResourceId_asDrawable_withTransformation_producesNonNullDrawable (line 74) | @Test
method load_withBitmapAliasResourceId_asBitmap_producesNonNullBitmap (line 86) | @Test
method load_withShapeDrawableResourceId_asDrawable_producesNonNullDrawable (line 94) | @Test
method load_withShapeDrawableResourceId_asDrawable_withTransformation_sizeOriginal_fails (line 102) | @Test
method load_withShapeDrawableResourceId_asDrawable_withTransformation_validSize_succeeds (line 119) | @Test
method load_withShapeDrawableResourceId_asBitmap_withSizeOriginal_fails (line 133) | @Test
method load_withShapeDrawableResourceId_asBitmap_withValidSize_returnsNonNullBitmap (line 146) | @Test
method load_withShapeDrawableResourceId_asBitmap_withValidSizeAndTransform_nonNullBitmap (line 160) | @Test
method load_withStateListDrawableResourceId_asDrawable_producesNonNullDrawable (line 175) | @Test
method load_withStateListDrawableResourceId_asDrawable_withTransformation_nonNullDrawable (line 183) | @Test
method load_withStateListDrawableResourceId_asBitmap_producesNonNullBitmap (line 195) | @Test
method load_withStateListDrawableResourceId_asBitmap_withTransformation_nonNullBitmap (line 207) | @Test
method load_withVectorDrawableResourceId_asDrawable_producesNonNullDrawable (line 220) | @Test
method load_withVectorDrawableResourceId_asDrawable_withTransformation_nonNullDrawable (line 228) | @Test
method load_withVectorDrawableResourceId_asBitmap_producesNonNullBitmap (line 240) | @Test
method load_withVectorDrawableResourceId_asBitmap_withTransformation_producesNonNullBitmap (line 248) | @Test
method load_withNinePatchResourceId_asDrawable_producesNonNullDrawable (line 261) | @Test
method load_withNinePatchResourceId_asDrawable_withTransformation_producesNonNullDrawable (line 270) | @Test
method load_withNinePatchResourceId_asBitmap_producesNonNullBitmap (line 283) | @Test
method load_withNinePatchResourceId_asBitmap_withTransformation_producesNonNullBitmap (line 296) | @Test
method load_withApplicationIconResourceIdUri_asDrawable_producesNonNullDrawable (line 310) | @Test
method load_withApplicationIconResourceIdUri_asDrawable_withTransformation_nonNullDrawable (line 328) | @Test
method load_withApplicationIconResourceIdUri_asBitmap_producesNonNullBitmap (line 346) | @Test
method load_withApplicationIconResourceIdUri_asBitmap_withTransformation_nonNullBitmap (line 364) | @Test
method load_withApplicationIconResourceNameUri_asDrawable_producesNonNullDrawable (line 383) | @Test
method load_withApplicationIconResourceNameUri_asDrawable_withTransform_nonNullDrawable (line 404) | @Test
method load_withApplicationIconResourceNameUri_asBitmap_producesNonNullBitmap (line 425) | @Test
method load_withApplicationIconResourceNameUri_asBitmap_withTransform_nonNullBitmap (line 446) | @Test
method getInstalledPackages (line 468) | private Set<String> getInstalledPackages() {
method getResourceId (line 486) | private int getResourceId(String packageName) {
method doesApplicationPackageNameMatchResourcePackageName (line 528) | private boolean doesApplicationPackageNameMatchResourcePackageName(
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/PausedRequestsTest.java
class PausedRequestsTest (line 22) | public final class PausedRequestsTest {
method load_withPlaceHolderSet_requestsPaused_displaysPlaceholder (line 27) | @SuppressWarnings("unchecked")
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/RequestManagerLifecycleTest.java
class RequestManagerLifecycleTest (line 38) | @RunWith(AndroidJUnit4.class)
method setUp (line 51) | @Before
method get_twice_withSameActivity_returnsSameRequestManager (line 56) | @Test
method get_withActivityBeforeCreate_startsRequestManager (line 63) | @Test
method get_withActivityOnDestroy_QPlus_doesNotCrash (line 70) | @SuppressWarnings("OnLifecycleEvent")
method get_withActivityOnDestroy_afterJellyBeanAndbeforeQ_doesNotCrash (line 95) | @SuppressWarnings("OnLifecycleEvent")
method get_withFragment_beforeFragmentIsAdded_throws (line 133) | @Test
method get_withFragment_whenFragmentIsAddedAndVisible_beforeStart_startsRequestManager (line 139) | @Test
method requestManager_afterFragmentIsStopped_isPaused (line 150) | @Test
method get_twice_withSameFragment_returnsSameRequestManager (line 177) | @Test
method pauseRequestsRecursive_onActivity_pausesFragment (line 186) | @Test
method resumeRequestsRecursive_onActivity_resumesFragment (line 197) | @Test
method pauseRequestsRecursive_onActivity_pausesChildOfChildFragment (line 210) | @Test
method resumeRequestsRecursive_onActivity_resumesChildOfChildFragment (line 222) | @Test
method pauseRequestsRecursive_onChildFragmentOfActivity_doesNotPauseActivity (line 235) | @Test
method pauseRequestsRecursive_onChildFragmentOfActivity_pausesChildOfChildFragment (line 248) | @Test
method resumeRequestsRecursive_onChildFragmentOfActivity_resumesChildOfChildFragment (line 261) | @Test
method pauseRequests_onActivity_pausesRequestManager (line 275) | @Test
method resumeRequests_onActivity_pausesRequestManager (line 285) | @Test
method pauseRequests_onActivity_doesNotPauseChildren (line 296) | @Test
method resumeRequests_onActivity_doesNotResumeChildren (line 308) | @Test
method pauseRequests_onFragment_pausesRequestManager (line 323) | @Test
method resumeRequests_onFragment_resumesRequestManager (line 333) | @Test
method pauseRequests_onChildFragment_doesNotPauseParentFragment (line 344) | @Test
method resumeRequests_onChildFragment_doesNotResumeParentFragment (line 354) | @Test
method pauseRequests_onChildFragment_pausesChildFragment (line 368) | @Test
method resumeRequests_onChildFragment_resumesChildFragment (line 379) | @Test
method pauseRequestsRecursive_onActivity_withTwoSiblingFragments_pausesBothSiblings (line 391) | @Test
method resumeRequestsRecursive_onActivity_withTwoSiblingFragments_resumesBothSiblings (line 405) | @Test
method pauseRequestsRecursive_onFragment_withSibling_doesNotPauseSibling (line 420) | @Test
method resumeRequestsRecursive_onFragment_withSibling_doesNotResumeSibling (line 433) | @Test
method initRequestManagers (line 451) | private void initRequestManagers(FragmentActivity activity, Fragment.....
method withActivityAndTwoFragmentSiblings (line 459) | private void withActivityAndTwoFragmentSiblings(
method withActivityFragmentAndChildFragment (line 471) | private void withActivityFragmentAndChildFragment(
method setupAndRunActivityAction (line 482) | private void setupAndRunActivityAction(
method getFragment (line 494) | private Fragment getFragment(FragmentActivity activity) {
method getSiblingFragment (line 498) | private Fragment getSiblingFragment(FragmentActivity activity) {
method getChildFragment (line 502) | private Fragment getChildFragment(FragmentActivity activity) {
method getFragment (line 506) | private Fragment getFragment(FragmentActivity activity, String tag) {
method getFragment (line 510) | private Fragment getFragment(FragmentManager manager, String tag) {
method createAndAddFragment (line 514) | private Fragment createAndAddFragment(FragmentActivity parent, String ...
method createAndAddFragment (line 518) | private Fragment createAndAddFragment(Fragment fragment, String tag) {
method createAndAddFragment (line 522) | private Fragment createAndAddFragment(FragmentManager manager, String ...
class EmptyContainerFragment (line 528) | public static final class EmptyContainerFragment extends Fragment {
method onCreateView (line 529) | @Override
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/RequestManagerTest.java
class RequestManagerTest (line 24) | @RunWith(AndroidJUnit4.class)
method setUp (line 33) | @Before
method clear_withNonOwningRequestManager_afterOwningManagerIsDestroyed_doesNotThrow (line 57) | @Test
method clear_withNonOwningRequestManager_onBackgroundThread_doesNotThrow (line 79) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/RequestTest.java
class RequestTest (line 34) | @RunWith(AndroidJUnit4.class)
method setUp (line 42) | @Before
method clear_withSingleRequest_nullsOutDrawableInView (line 56) | @Test
method clear_withRequestWithThumbnail_nullsOutDrawableInView (line 65) | @Test
method onStop_withSingleRequest_doesNotNullOutDrawableInView (line 78) | @Test
method onStop_withRequestWithThumbnail_doesNotNullOutDrawableInView (line 93) | @Test
method onStop_withSingleRequestInProgress_nullsOutDrawableInView (line 112) | @Test
method onStop_withRequestWithThumbnailBothInProgress_nullsOutDrawableInView (line 133) | @Test
method clear_withRequestWithOnlyFullInProgress_nullsOutDrawableInView (line 159) | @Test
method clear_withRequestWithOnlyFullInProgress_doesNotNullOutDrawableInView (line 199) | @Test
method onStop_withRequestWithOnlyThumbnailInProgress_doesNotNullOutDrawableInView (line 239) | @Test
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/RoundedCornersRegressionTest.java
class RoundedCornersRegressionTest (line 31) | @RunWith(AndroidJUnit4.class)
method setUp (line 43) | @Before
method testRoundedCorners (line 51) | @Test
method testRoundedCorners_usePool (line 60) | @Test
method testRoundedCorners_overRounded (line 84) | @Test
method createRect (line 93) | private Bitmap createRect(int color, int width, int height, Bitmap.Con...
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/WideGamutTest.java
class WideGamutTest (line 30) | @RunWith(AndroidJUnit4.class)
method setUp (line 36) | @Before
method load_withWideGamutImage_returnsWideGamutBitmap (line 41) | @Test
method load_withWideGamutImage_bitmapInPoolWithSizeAndConfig_usesBitmapFromPool (line 49) | @Test
method load_withWideGamutImage_hardwareAllowed_returnsDecodedBitmap (line 69) | @Test
method load_withEncodedPngWideGamutImage_decodesWideGamut (line 81) | @Test
method load_withEncodedJpegWideGamutImage_decodesArgb8888 (line 93) | @Test
method load_withEncodedWebpWideGamutImage_decodesArgb8888 (line 108) | @Test
method load_withSmallerWideGamutInPool_decodesBitmap (line 120) | @Test
method circleCrop_withWideGamutBitmap_producesWideGamutBitmap (line 134) | @Test
method roundedCorners_withWideGamutBitmap_producesWideGamutBitmap (line 145) | @Test
method loadWideGamutImage_withArgb888OfSufficientSizeInPool_usesArgb8888Bitmap (line 161) | @Test
method asJpeg (line 178) | private static byte[] asJpeg(Bitmap bitmap) {
method asPng (line 182) | private static byte[] asPng(Bitmap bitmap) {
method asWebp (line 186) | private static byte[] asWebp(Bitmap bitmap) {
method toByteArray (line 190) | private static byte[] toByteArray(Bitmap bitmap, CompressFormat format) {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/load/engine/executor/IdlingGlideRule.java
class IdlingGlideRule (line 16) | public final class IdlingGlideRule implements TestRule {
method newGlideRule (line 20) | public static IdlingGlideRule newGlideRule(UnaryOperator<GlideBuilder>...
method IdlingGlideRule (line 24) | private IdlingGlideRule(UnaryOperator<GlideBuilder> additionalOptions) {
method apply (line 28) | @Override
method newIdlingThreadPoolExecutor (line 69) | private static IdlingThreadPoolExecutor newIdlingThreadPoolExecutor(St...
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/DownsamplerEmulatorTest.java
class DownsamplerEmulatorTest (line 55) | @RunWith(AndroidJUnit4.class)
method calculateScaling_withAtMost (line 59) | @Test
method calculateScaling_withGainmap_androidU_withAtMost (line 132) | @Test
method calculateScaling_withAtLeast (line 152) | @Test
method calculateScaling_withCenterInside (line 178) | @Test
method calculateScaling_withCenterOutside (line 244) | @Test
method calculateScaling_withNone (line 293) | @Test
method calculateScaling_withFitCenter (line 319) | @Test
method runScaleTest (line 433) | @Nullable
method readableDimens (line 536) | private static String readableDimens(int width, int height) {
method readableDimensAndHasGainmap (line 540) | private static String readableDimensAndHasGainmap(int width, int heigh...
method buildDownsampler (line 544) | private static Downsampler buildDownsampler() {
method openBitmapStream (line 555) | private static InputStream openBitmapStream(
method openFileStream (line 572) | private static InputStream openFileStream(
method openInMemoryStream (line 623) | private static InputStream openInMemoryStream(
class Tester (line 640) | static final class Tester {
method Tester (line 647) | Tester(DownsampleStrategy strategy) {
method setTargetDimensions (line 651) | Tester setTargetDimensions(int targetWidth, int targetHeight) {
method givenSquareImageWithDimensionOf (line 657) | Tester givenSquareImageWithDimensionOf(int dimension, Api... apis) {
method givenGainmapImageWithDimensionsOf (line 661) | Tester givenGainmapImageWithDimensionsOf(
method givenImageWithDimensionsOf (line 676) | Tester givenImageWithDimensionsOf(int sourceWidth, int sourceHeight,...
method run (line 681) | void run() throws IOException {
class TestCase (line 698) | private static final class TestCase {
method TestCase (line 710) | @Deprecated
method TestCase (line 721) | private TestCase(Builder builder) {
method test (line 731) | List<String> test(DownsampleStrategy strategy) throws IOException {
class Builder (line 747) | private static final class Builder {
method setSourceWidth (line 757) | public Builder setSourceWidth(int sourceWidth) {
method setSourceHeight (line 762) | public Builder setSourceHeight(int sourceHeight) {
method setTargetWidth (line 767) | public Builder setTargetWidth(int targetWidth) {
method setTargetHeight (line 772) | public Builder setTargetHeight(int targetHeight) {
method setHasGainmap (line 777) | public Builder setHasGainmap(boolean hasGainmap) {
method setAllowHardwareConfig (line 782) | public Builder setAllowHardwareConfig(boolean allowHardwareConfi...
method setApis (line 787) | public Builder setApis(Api[] apis) {
method build (line 792) | public TestCase build() {
class Api (line 800) | static final class Api {
method apis (line 805) | static Builder apis(int min, int max) {
method atAndAbove (line 809) | static Builder atAndAbove(int min) {
method below (line 813) | static Builder below(int max) {
method allApis (line 818) | static Builder allApis() {
method onAllApisAndAllFormatsExpect (line 822) | static Api onAllApisAndAllFormatsExpect(int width, int height) {
class Builder (line 826) | static final class Builder {
method min (line 830) | Builder min(int version) {
method max (line 835) | Builder max(int version) {
method with (line 840) | Api with(Formats... formats) {
method Api (line 845) | Api(int startVersion, int stopVersion, Formats... formats) {
method test (line 851) | List<String> test(
class Formats (line 880) | static final class Formats {
class Builder (line 899) | static final class Builder {
method allFormats (line 902) | static Builder allFormats() {
method formats (line 906) | static Builder formats(CompressFormat... formats) {
method Builder (line 910) | Builder(CompressFormat... formats) {
method expect (line 914) | Formats expect(int width, int height) {
method Formats (line 919) | Formats(CompressFormat[] formats, int expectedWidth, int expectedHei...
method runTest (line 925) | List<String> runTest(
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java
class GifDrawableTest (line 31) | @RunWith(AndroidJUnit4.class)
method setUp (line 48) | @Before
method loadGif_withInterlacedTransparentGif_sizeOriginal_succeeds (line 53) | @Test
method loadGif_withInterlacedTransparentGif_downsampled_succeeds (line 65) | @Test
method loadGif_withTransparentGif_sizeOriginal_succeeds (line 77) | @Test
method loadGif_withTransparentGif_downsampled_succeeds (line 86) | @Test
method loadGif_withOpaqueGif_sizeOriginal_succeeds (line 95) | @Test
method loadGif_withOpaqueGif_downsampled_succeeds (line 104) | @Test
method loadGif_withOpaqueInterlacedGif_sizeOriginal_succeeds (line 113) | @Test
method loadGif_withOpaqueInterlacedGif_downsampled_succeeds (line 122) | @Test
method loadGif_intoImageView_afterStop_restartsGif (line 134) | @Test
method addViewToWindow (line 189) | @SuppressWarnings("deprecation")
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/test/BitmapRegressionTester.java
class BitmapRegressionTester (line 38) | public final class BitmapRegressionTester {
method newInstance (line 51) | public static AssumeCanRun newInstance(Class<?> testClass, TestName te...
method BitmapRegressionTester (line 55) | private BitmapRegressionTester(Class<?> testClass, TestName testName) {
class AssumeCanRun (line 65) | public static final class AssumeCanRun {
method AssumeCanRun (line 69) | private AssumeCanRun(BitmapRegressionTester regressionTester) {
method assumeShouldRun (line 73) | public BitmapRegressionTester assumeShouldRun() {
method test (line 80) | public Bitmap test(RequestBuilder<Bitmap> request)
method getResourceName (line 91) | private String getResourceName() {
method getClassNameString (line 99) | private String getClassNameString() {
method getSplitBySdkValues (line 109) | @Nullable
method getCpuString (line 126) | private String getCpuString() {
method splitByCpu (line 130) | private boolean splitByCpu() {
method getSdkIntString (line 134) | private String getSdkIntString() {
method getTestFilesDir (line 156) | private File getTestFilesDir() {
method writeBitmap (line 161) | private void writeBitmap(Bitmap bitmap) {
method shouldRun (line 191) | private boolean shouldRun() {
method writeNewExpected (line 195) | private boolean writeNewExpected() {
method getResourceId (line 200) | private int getResourceId() {
method decodeExpected (line 206) | private Bitmap decodeExpected() {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/test/CanonicalBitmap.java
class CanonicalBitmap (line 11) | public final class CanonicalBitmap {
method getBitmap (line 15) | @NonNull
method scale (line 23) | public CanonicalBitmap scale(float scaleFactor) {
method getWidth (line 29) | public int getWidth() {
method getHeight (line 33) | public int getHeight() {
method decodeBitmap (line 37) | private Bitmap decodeBitmap() {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/test/ModelGeneratorRule.java
class ModelGeneratorRule (line 17) | public final class ModelGeneratorRule extends ExternalResource {
method getTempDir (line 23) | private File getTempDir() {
method nextTempFile (line 31) | private File nextTempFile() {
method asFile (line 36) | public File asFile(@RawRes int resourceId) throws IOException {
method asByteArray (line 40) | public byte[] asByteArray(@RawRes int resourceId) throws IOException {
method writeToFile (line 46) | private File writeToFile(@RawRes int resourceId) throws IOException {
method after (line 55) | @Override
method cleanupTempDir (line 61) | private void cleanupTempDir() {
FILE: instrumentation/src/androidTest/java/com/bumptech/glide/test/ResourceIds.java
class ResourceIds (line 11) | public final class ResourceIds {
method ResourceIds (line 12) | private ResourceIds() {
type raw (line 16) | public interface raw {
type drawable (line 32) | public interface drawable {
method getResourceId (line 40) | private static int getResourceId(String type, String resourceName) {
FILE: instrumentation/src/main/java/com/bumptech/glide/test/DefaultFragmentActivity.java
class DefaultFragmentActivity (line 8) | public class DefaultFragmentActivity extends FragmentActivity {
method onCreate (line 10) | @Override
FILE: instrumentation/src/main/java/com/bumptech/glide/test/ForceDarkOrLightModeActivity.java
class ForceDarkOrLightModeActivity (line 14) | public class ForceDarkOrLightModeActivity extends AppCompatActivity {
method forceLightMode (line 18) | public static Intent forceLightMode(Context context) {
method forceDarkMode (line 22) | public static Intent forceDarkMode(Context context) {
method newArgs (line 26) | private static Intent newArgs(Context context, int nightMode) {
method onCreate (line 32) | @RequiresApi(api = VERSION_CODES.JELLY_BEAN_MR1)
FILE: instrumentation/src/main/java/com/bumptech/glide/test/GlideWithAsDifferentSupertypesActivity.java
class GlideWithAsDifferentSupertypesActivity (line 10) | public class GlideWithAsDifferentSupertypesActivity extends FragmentActi...
method onCreate (line 12) | @Override
FILE: instrumentation/src/main/java/com/bumptech/glide/test/GlideWithBeforeSuperOnCreateActivity.java
class GlideWithBeforeSuperOnCreateActivity (line 9) | public class GlideWithBeforeSuperOnCreateActivity extends FragmentActivi...
method onCreate (line 11) | @Override
method onResume (line 18) | @Override
FILE: instrumentation/src/main/java/com/bumptech/glide/test/InstrumentationAppGlideModule.java
class InstrumentationAppGlideModule (line 6) | @GlideModule
FILE: integration/avif/src/main/java/com/bumptech/glide/integration/avif/AvifByteBufferBitmapDecoder.java
class AvifByteBufferBitmapDecoder (line 20) | public final class AvifByteBufferBitmapDecoder implements ResourceDecode...
method AvifByteBufferBitmapDecoder (line 25) | public AvifByteBufferBitmapDecoder(BitmapPool bitmapPool) {
method maybeCopyBuffer (line 29) | private ByteBuffer maybeCopyBuffer(ByteBuffer source) {
method decode (line 41) | @Override
method handles (line 69) | @Override
FILE: integration/avif/src/main/java/com/bumptech/glide/integration/avif/AvifGlideModule.java
class AvifGlideModule (line 16) | @GlideModule
method registerComponents (line 19) | @Override
FILE: integration/avif/src/main/java/com/bumptech/glide/integration/avif/AvifStreamBitmapDecoder.java
class AvifStreamBitmapDecoder (line 19) | public final class AvifStreamBitmapDecoder implements ResourceDecoder<In...
method AvifStreamBitmapDecoder (line 26) | public AvifStreamBitmapDecoder(
method decode (line 35) | @Override
method handles (line 42) | @Override
FILE: integration/concurrent/src/main/java/com/bumptech/glide/integration/concurrent/GlideFutures.java
class GlideFutures (line 24) | public final class GlideFutures {
method preload (line 35) | @SuppressWarnings({"rawtypes", "unchecked"})
type ResourceConsumer (line 53) | public interface ResourceConsumer<T> {
method act (line 54) | void act(T resource);
method submitAndExecute (line 90) | public static <T> ListenableFuture<Void> submitAndExecute(
method submit (line 133) | public static <T> ListenableFuture<T> submit(final RequestBuilder<T> r...
method transformFromTargetAndResult (line 137) | private static <T> ListenableFuture<T> transformFromTargetAndResult(
method submitInternal (line 150) | private static <T> ListenableFuture<TargetAndResult<T>> submitInternal(
class GlideLoadingListener (line 174) | private static final class GlideLoadingListener<T> implements RequestL...
method GlideLoadingListener (line 178) | GlideLoadingListener(Completer<TargetAndResult<T>> completer) {
method onLoadFailed (line 182) | @Override
method onResourceReady (line 189) | @Override
class TargetAndResult (line 205) | private static final class TargetAndResult<T> {
method TargetAndResult (line 209) | TargetAndResult(Target<T> target, T result) {
method GlideFutures (line 215) | private GlideFutures() {}
FILE: integration/concurrent/src/test/java/com/bumptech/glide/integration/concurrent/GlideFuturesTest.java
class GlideFuturesTest (line 32) | @RunWith(RobolectricTestRunner.class)
method setUp (line 37) | @Before
method testBaseLoad (line 50) | @Test
method testErrorLoad (line 57) | @Test
method testToString (line 73) | @Test
class Foo (line 109) | private static final class Foo {}
class Bar (line 111) | private static final class Bar {}
class Baz (line 113) | private static final class Baz {}
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/BufferQueue.java
class BufferQueue (line 15) | final class BufferQueue {
method builder (line 22) | public static Builder builder() {
class Builder (line 35) | public static final class Builder {
method Builder (line 39) | private Builder() {}
method getNextBuffer (line 42) | public ByteBuffer getNextBuffer(ByteBuffer lastBuffer) {
method getFirstBuffer (line 57) | public ByteBuffer getFirstBuffer(UrlResponseInfo info) {
method bufferSizeHeuristic (line 66) | @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability
method build (line 95) | public BufferQueue build() {
method BufferQueue (line 103) | private BufferQueue(Queue<ByteBuffer> buffers) {
method coalesceToBuffer (line 111) | public ByteBuffer coalesceToBuffer() {
method markCoalesced (line 131) | private void markCoalesced() {
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/ByteBufferParser.java
type ByteBufferParser (line 10) | interface ByteBufferParser<T> {
method parse (line 12) | T parse(ByteBuffer byteBuffer);
method getDataClass (line 15) | Class<T> getDataClass();
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/ChromiumRequestSerializer.java
class ChromiumRequestSerializer (line 50) | final class ChromiumRequestSerializer {
method get (line 60) | @Override
class PriorityRunnable (line 68) | private abstract static class PriorityRunnable implements Runnable, Co...
method PriorityRunnable (line 72) | private PriorityRunnable(Priority priority) {
method compareTo (line 76) | @Override
method ChromiumRequestSerializer (line 99) | ChromiumRequestSerializer(
method startRequest (line 119) | void startRequest(Priority priority, GlideUrl glideUrl, Listener liste...
method cancelRequest (line 157) | void cancelRequest(GlideUrl glideUrl, Listener listener) {
method getExceptionIfFailed (line 168) | private static IOException getExceptionIfFailed(
class Job (line 185) | private class Job extends Callback {
method Job (line 198) | Job(Supplier<Executor> executorSupplier) {
method init (line 202) | void init(GlideUrl glideUrl) {
method addListener (line 207) | void addListener(Listener listener) {
method removeListener (line 213) | void removeListener(Listener listener) {
method onRedirectReceived (line 234) | @Override
method onResponseStarted (line 240) | @Override
method onReadCompleted (line 247) | @Override
method onSucceeded (line 254) | @Override
method onFailed (line 271) | @Override
method onCanceled (line 285) | @Override
method onRequestFinished (line 299) | private void onRequestFinished(
method notifySuccess (line 328) | private void notifySuccess(ByteBuffer buffer) {
method notifyFailure (line 344) | private void notifyFailure(Exception exception) {
method maybeLogResult (line 358) | private void maybeLogResult(
method clearListeners (line 376) | private void clearListeners() {
class JobPool (line 385) | private class JobPool {
method JobPool (line 390) | public JobPool(Supplier<Executor> executorSupplier) {
method get (line 394) | public synchronized Job get(GlideUrl glideUrl) {
method put (line 403) | public void put(Job job) {
type Listener (line 413) | interface Listener {
method onRequestComplete (line 414) | void onRequestComplete(ByteBuffer byteBuffer);
method onRequestFailed (line 416) | void onRequestFailed(@Nullable Exception e);
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/ChromiumUrlFetcher.java
class ChromiumUrlFetcher (line 11) | final class ChromiumUrlFetcher<T> implements DataFetcher<T>, ChromiumReq...
method ChromiumUrlFetcher (line 19) | public ChromiumUrlFetcher(
method loadData (line 26) | @Override
method cleanup (line 32) | @Override
method cancel (line 37) | @Override
method getDataClass (line 42) | @Override
method getDataSource (line 47) | @Override
method onRequestComplete (line 52) | @Override
method onRequestFailed (line 57) | @Override
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/ChromiumUrlLoader.java
class ChromiumUrlLoader (line 23) | public final class ChromiumUrlLoader<T> implements ModelLoader<GlideUrl,...
method ChromiumUrlLoader (line 27) | ChromiumUrlLoader(CronetRequestFactory requestFactory, ByteBufferParse...
method ChromiumUrlLoader (line 31) | ChromiumUrlLoader(
method ChromiumUrlLoader (line 40) | ChromiumUrlLoader(
method buildLoadData (line 49) | @Override
method handles (line 55) | @Override
class StreamFactory (line 61) | public static final class StreamFactory
method StreamFactory (line 68) | public StreamFactory(CronetRequestFactory requestFactory, @Nullable ...
method StreamFactory (line 77) | public StreamFactory(
method build (line 86) | @Override
method teardown (line 91) | @Override
method parse (line 94) | @Override
method getDataClass (line 99) | @Override
class ByteBufferFactory (line 106) | public static final class ByteBufferFactory
method ByteBufferFactory (line 113) | public ByteBufferFactory(CronetRequestFactory requestFactory, @Nulla...
method ByteBufferFactory (line 122) | public ByteBufferFactory(
method build (line 131) | @Override
method teardown (line 136) | @Override
method parse (line 141) | @Override
method getDataClass (line 146) | @Override
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/CronetEngineSingleton.java
class CronetEngineSingleton (line 12) | public final class CronetEngineSingleton {
method CronetEngineSingleton (line 15) | private CronetEngineSingleton() {}
method getSingleton (line 19) | public static CronetEngine getSingleton(Context context) {
method createEngine (line 35) | private static CronetEngine createEngine(Context context) {
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/CronetGlideModule.java
class CronetGlideModule (line 18) | public final class CronetGlideModule implements GlideModule {
method applyOptions (line 20) | @Override
method registerComponents (line 23) | @Override
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/CronetLibraryGlideModule.java
class CronetLibraryGlideModule (line 21) | @GlideModule
method registerComponents (line 24) | @Override
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/CronetRequestFactory.java
type CronetRequestFactory (line 7) | public interface CronetRequestFactory {
method newRequest (line 9) | UrlRequest.Builder newRequest(
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/CronetRequestFactoryImpl.java
class CronetRequestFactoryImpl (line 10) | public final class CronetRequestFactoryImpl implements CronetRequestFact...
method CronetRequestFactoryImpl (line 14) | public CronetRequestFactoryImpl(Supplier<CronetEngine> cronetEngineGet...
method newRequest (line 18) | @Override
FILE: integration/cronet/src/main/java/com/bumptech/glide/integration/cronet/DataLogger.java
type DataLogger (line 7) | public interface DataLogger {
method logNetworkData (line 18) | void logNetworkData(
FILE: integration/cronet/src/test/java/com/bumptech/glide/integration/cronet/ChromiumUrlFetcherTest.java
class ChromiumUrlFetcherTest (line 52) | @RunWith(RobolectricTestRunner.class)
method setUp (line 71) | @Before
method testLoadData_createsAndStartsRequest (line 105) | @Test
method testLoadData_providesHeadersFromGlideUrl (line 119) | @Test
method testLoadData_withInProgressRequest_doesNotStartNewRequest (line 139) | @Test
method testLoadData_withInProgressRequest_isNotifiedWhenRequestCompletes (line 157) | @Test
method getInfo (line 173) | @NonNull
method testCancel_withMultipleInProgressRequests_doesNotCancelChromiumRequest (line 234) | @Test
method testCancel_afterCancellingAllInProgressRequests_cancelsChromiumRequest (line 249) | @Test
method testCancel_withNoStartedRequest_doesNothing (line 265) | @Test
method testCancel_withStartedRequest_cancelsRequest (line 270) | @Test
method testRequestComplete_withNonNullException_callsCallbackWithException (line 279) | @Test
method testRequestComplete_withNon200StatusCode_callsCallbackWithException (line 291) | @Test
method succeed (line 305) | private void succeed(UrlResponseInfo info, Callback urlCallback, ByteB...
method testRequestComplete_withUnauthorizedStatusCode_callsCallbackWithAuthError (line 313) | @Test
method testRequestComplete_whenCancelledAndUnauthorized_callsCallbackWithNullError (line 324) | @Test
method verifyAuthError (line 336) | private void verifyAuthError() {
method testRequestComplete_with200AndCancelled_callsCallbackWithNullException (line 343) | @Test
method testRequestComplete_with200NotCancelledMatchingLength_callsCallbackWithValidData (line 355) | @Test
method anyHeaders (line 380) | private static Map<String, String> anyHeaders() {
FILE: integration/gifencoder/src/main/java/com/bumptech/glide/integration/gifencoder/ReEncodingGifResourceEncoder.java
class ReEncodingGifResourceEncoder (line 38) | public class ReEncodingGifResourceEncoder implements ResourceEncoder<Gif...
method update (line 59) | @Override
method ReEncodingGifResourceEncoder (line 78) | @SuppressWarnings("unused")
method ReEncodingGifResourceEncoder (line 83) | @VisibleForTesting
method getEncodeStrategy (line 91) | @NonNull
method encode (line 100) | @Override
method encodeTransformedToFile (line 113) | private boolean encodeTransformedToFile(GifDrawable drawable, File fil...
method encodeTransformedToStream (line 149) | private boolean encodeTransformedToStream(GifDrawable drawable, Output...
method writeDataDirect (line 178) | private boolean writeDataDirect(ByteBuffer data, File file) {
method decodeHeaders (line 190) | private GifDecoder decodeHeaders(ByteBuffer data) {
method getTransformedFrame (line 202) | private Resource<Bitmap> getTransformedFrame(
class Factory (line 215) | @VisibleForTesting
method buildDecoder (line 218) | GifDecoder buildDecoder(GifDecoder.BitmapProvider bitmapProvider) {
method buildParser (line 222) | GifHeaderParser buildParser() {
method buildEncoder (line 226) | AnimatedGifEncoder buildEncoder() {
method buildFrameResource (line 230) | @NonNull
FILE: integration/gifencoder/src/test/java/com/bumptech/glide/integration/gifencoder/ReEncodingGifResourceEncoderTest.java
class ReEncodingGifResourceEncoderTest (line 46) | @RunWith(RobolectricTestRunner.class)
method setUp (line 62) | @SuppressWarnings("unchecked")
method tearDown (line 93) | @After
method testEncodeStrategy_withEncodeTransformationTrue_returnsTransformed (line 102) | @Test
method testEncodeStrategy_withEncodeTransformationUnSet_returnsSource (line 107) | @Test
method testEncodeStrategy_withEncodeTransformationFalse_returnsSource (line 113) | @Test
method testEncode_withEncodeTransformationFalse_writesSourceDataToStream (line 119) | @Test
method testEncode_WithEncodeTransformationFalse_whenOsThrows_returnsFalse (line 131) | @Test
method testReturnsFalseIfEncoderFailsToStart (line 143) | @Test
method testSetsDataOnParserBeforeParsingHeader (line 149) | @Test
method testAdvancesDecoderBeforeAttemptingToGetFirstFrame (line 165) | @Test
method testSetsDelayOnEncoderAfterAddingFrame (line 178) | @Test
method testWritesSingleFrameToEncoderAndReturnsTrueIfEncoderFinishes (line 199) | @Test
method testReturnsFalseIfAddingFrameFails (line 215) | @Test
method testReturnsFalseIfFinishingFails (line 226) | @Test
method testWritesTransformedBitmaps (line 234) | @Test
method testRecyclesFrameResourceBeforeWritingIfTransformedResourceIsDifferent (line 259) | @Test
method testRecyclesTransformedResourceAfterWritingIfTransformedResourceIsDifferent (line 276) | @Test
method testRecyclesFrameResourceAfterWritingIfFrameResourceIsNotTransformed (line 293) | @Test
method testWritesBytesDirectlyToDiskIfTransformationIsUnitTransformation (line 310) | @Test
method getEncodedData (line 325) | private String getEncodedData() {
method anyContext (line 333) | private static Context anyContext() {
method anyBitmapOrNull (line 337) | private static Bitmap anyBitmapOrNull() {
FILE: integration/okhttp/src/main/java/com/bumptech/glide/integration/okhttp/OkHttpGlideModule.java
class OkHttpGlideModule (line 22) | @Deprecated
method applyOptions (line 24) | @Override
method registerComponents (line 29) | @Override
FILE: integration/okhttp/src/main/java/com/bumptech/glide/integration/okhttp/OkHttpLibraryGlideModule.java
class OkHttpLibraryGlideModule (line 20) | @GlideModule
method registerComponents (line 23) | @Override
FILE: integration/okhttp/src/main/java/com/bumptech/glide/integration/okhttp/OkHttpStreamFetcher.java
class OkHttpStreamFetcher (line 25) | @Deprecated
method OkHttpStreamFetcher (line 40) | @SuppressWarnings("WeakerAccess")
method loadData (line 46) | @Override
method cleanup (line 83) | @Override
method cancel (line 101) | @Override
method getDataClass (line 106) | @NonNull
method getDataSource (line 112) | @NonNull
FILE: integration/okhttp/src/main/java/com/bumptech/glide/integration/okhttp/OkHttpUrlLoader.java
class OkHttpUrlLoader (line 17) | @Deprecated
method OkHttpUrlLoader (line 23) | @SuppressWarnings("WeakerAccess")
method handles (line 28) | @Override
method buildLoadData (line 33) | @SuppressWarnings("deprecation")
class Factory (line 42) | @SuppressWarnings({"WeakerAccess", "deprecation"})
method getInternalClient (line 47) | private static OkHttpClient getInternalClient() {
method Factory (line 59) | public Factory() {
method Factory (line 64) | public Factory(OkHttpClient client) {
method build (line 68) | @NonNull
method teardown (line 75) | @Override
FILE: integration/okhttp3/src/main/java/com/bumptech/glide/integration/okhttp3/OkHttpGlideModule.java
class OkHttpGlideModule (line 23) | @Deprecated
method applyOptions (line 25) | @Override
method registerComponents (line 30) | @Override
FILE: integration/okhttp3/src/main/java/com/bumptech/glide/integration/okhttp3/OkHttpLibraryGlideModule.java
class OkHttpLibraryGlideModule (line 19) | @GlideModule
method registerComponents (line 21) | @Override
FILE: integration/okhttp3/src/main/java/com/bumptech/glide/integration/okhttp3/OkHttpStreamFetcher.java
class OkHttpStreamFetcher (line 21) | public class OkHttpStreamFetcher implements DataFetcher<InputStream>, ok...
method OkHttpStreamFetcher (line 33) | @SuppressWarnings("WeakerAccess")
method loadData (line 39) | @Override
method onFailure (line 54) | @Override
method onResponse (line 63) | @Override
method cleanup (line 75) | @Override
method cancel (line 90) | @Override
method getDataClass (line 98) | @NonNull
method getDataSource (line 104) | @NonNull
FILE: integration/okhttp3/src/main/java/com/bumptech/glide/integration/okhttp3/OkHttpUrlLoader.java
class OkHttpUrlLoader (line 14) | public class OkHttpUrlLoader implements ModelLoader<GlideUrl, InputStrea...
method OkHttpUrlLoader (line 19) | @SuppressWarnings("WeakerAccess")
method handles (line 24) | @Override
method buildLoadData (line 29) | @Override
class Factory (line 37) | @SuppressWarnings("WeakerAccess")
method getInternalClient (line 42) | private static Call.Factory getInternalClient() {
method Factory (line 54) | public Factory() {
method Factory (line 63) | public Factory(@NonNull Call.Factory client) {
method build (line 67) | @NonNull
method teardown (line 73) | @Override
FILE: integration/okhttp4/src/main/java/com/bumptech/glide/integration/okhttp3/OkHttpLibraryGlideModule.java
class OkHttpLibraryGlideModule (line 19) | @GlideModule
method registerComponents (line 21) | @Override
FILE: integration/okhttp4/src/main/java/com/bumptech/glide/integration/okhttp3/OkHttpStreamFetcher.java
class OkHttpStreamFetcher (line 21) | public class OkHttpStreamFetcher implements DataFetcher<InputStream>, ok...
method OkHttpStreamFetcher (line 33) | @SuppressWarnings("WeakerAccess")
method loadData (line 39) | @Override
method onFailure (line 54) | @Override
method onResponse (line 63) | @Override
method cleanup (line 75) | @Override
method cancel (line 90) | @Override
method getDataClass (line 98) | @NonNull
method getDataSource (line 104) | @NonNull
FILE: integration/okhttp4/src/main/java/com/bumptech/glide/integration/okhttp3/OkHttpUrlLoader.java
class OkHttpUrlLoader (line 14) | public class OkHttpUrlLoader implements ModelLoader<GlideUrl, InputStrea...
method OkHttpUrlLoader (line 19) | @SuppressWarnings("WeakerAccess")
method handles (line 24) | @Override
method buildLoadData (line 29) | @Override
class Factory (line 37) | @SuppressWarnings("WeakerAccess")
method getInternalClient (line 42) | private static Call.Factory getInternalClient() {
method Factory (line 54) | public Factory() {
method Factory (line 63) | public Factory(@NonNull Call.Factory client) {
method build (line 67) | @NonNull
method teardown (line 73) | @Override
FILE: integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerToListViewScrollListener.java
class RecyclerToListViewScrollListener (line 16) | @SuppressWarnings("WeakerAccess")
method RecyclerToListViewScrollListener (line 24) | public RecyclerToListViewScrollListener(@NonNull AbsListView.OnScrollL...
method onScrollStateChanged (line 28) | @Override
method onScrolled (line 48) | @Override
FILE: integration/recyclerview/src/main/java/com/bumptech/glide/integration/recyclerview/RecyclerViewPreloader.java
class RecyclerViewPreloader (line 30) | @SuppressWarnings("unused")
method RecyclerViewPreloader (line 36) | public RecyclerViewPreloader(
method RecyclerViewPreloader (line 45) | public RecyclerViewPreloader(
method RecyclerViewPreloader (line 54) | public RecyclerViewPreloader(
method RecyclerViewPreloader (line 68) | @Deprecated
method RecyclerViewPreloader (line 85) | public RecyclerViewPreloader(
method onScrolled (line 97) | @Override
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/Clock.java
type Clock (line 10) | public interface Clock {
method currentTimeMillis (line 11) | long currentTimeMillis();
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/DefaultClock.java
class DefaultClock (line 3) | final class DefaultClock implements Clock {
method currentTimeMillis (line 4) | @Override
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/DiskCacheDbHelper.java
class DiskCacheDbHelper (line 10) | final class DiskCacheDbHelper extends SQLiteOpenHelper {
method forProd (line 14) | static DiskCacheDbHelper forProd(Context context) {
method forTesting (line 18) | static DiskCacheDbHelper forTesting(Context context) {
method DiskCacheDbHelper (line 22) | private DiskCacheDbHelper(Context context, boolean isInMemory) {
method DiskCacheDbHelper (line 26) | @VisibleForTesting
method onCreate (line 32) | @Override
method onOpen (line 39) | @Override
method onUpgrade (line 52) | @SuppressLint("SQLiteString")
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/EntryCache.java
class EntryCache (line 13) | final class EntryCache {
method clear (line 17) | synchronized void clear() {
method get (line 22) | synchronized Entry get(String key) {
method removeFromActive (line 34) | private synchronized void removeFromActive(Entry entry) {
method addToActive (line 39) | private synchronized void addToActive(Entry entry) {
class Entry (line 44) | static final class Entry {
method Entry (line 53) | Entry(String key, EntryCache cache) {
method getFile (line 58) | File getFile() {
method isStateKnown (line 62) | boolean isStateKnown() {
method isPresent (line 66) | boolean isPresent() {
method setPresent (line 70) | void setPresent(File file) {
method setUnknown (line 75) | void setUnknown() {
method setNotPresent (line 79) | void setNotPresent() {
method acquireReadLock (line 83) | void acquireReadLock() {
method releaseReadLock (line 88) | void releaseReadLock() {
method acquireWriteLock (line 94) | void acquireWriteLock() {
method releaseWriteLock (line 99) | void releaseWriteLock() {
method maybeSetActive (line 105) | private synchronized void maybeSetActive() {
method maybeSetInactive (line 113) | private synchronized void maybeSetInactive() {
type State (line 121) | private enum State {
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/EvictionManager.java
class EvictionManager (line 11) | final class EvictionManager {
method EvictionManager (line 34) | EvictionManager(
method setMaximumSizeBytes (line 68) | synchronized void setMaximumSizeBytes(long newMaxSizeBytes) {
method getMaximumSizeBytes (line 76) | private synchronized long getMaximumSizeBytes() {
method maybeScheduleEviction (line 84) | void maybeScheduleEviction() {
method maybeScheduleEviction (line 88) | private void maybeScheduleEviction(long maximumSizeBytes) {
method isEvictionRequired (line 94) | private boolean isEvictionRequired(long maximumSizeBytes) {
method evictOnWorkThread (line 98) | private void evictOnWorkThread() {
class EvictionCallback (line 155) | private class EvictionCallback implements Handler.Callback {
method handleMessage (line 156) | @Override
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/FileSystem.java
type FileSystem (line 10) | interface FileSystem {
method delete (line 12) | default boolean delete(File file) {
method exists (line 16) | default boolean exists(File file) {
method createNewFile (line 20) | default boolean createNewFile(File file) throws IOException {
method rename (line 24) | default boolean rename(File from, File to) {
method length (line 28) | default long length(File file) {
method getDirectorySize (line 32) | default long getDirectorySize(File file) {
method deleteAll (line 44) | default boolean deleteAll(File file) {
method setLastModified (line 56) | default boolean setLastModified(File file, long newLastModifiedTime) {
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/GlideJournaledLruDiskCacheWrapper.java
class GlideJournaledLruDiskCacheWrapper (line 12) | public final class GlideJournaledLruDiskCacheWrapper implements DiskCache {
method newInstance (line 24) | public static GlideJournaledLruDiskCacheWrapper newInstance(Context co...
method newInstance (line 33) | public static GlideJournaledLruDiskCacheWrapper newInstance(
method GlideJournaledLruDiskCacheWrapper (line 39) | private GlideJournaledLruDiskCacheWrapper(
method setMaximumSizeBytes (line 65) | public void setMaximumSizeBytes(long newMaximumSizeBytes) {
method get (line 70) | @Override
method put (line 76) | @Override
method delete (line 90) | @Override
method clear (line 96) | @Override
method getWritableDatabase (line 104) | @Deprecated
method getCurrentSizeBytes (line 110) | public long getCurrentSizeBytes() {
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/Journal.java
class Journal (line 22) | final class Journal {
method Journal (line 106) | Journal(
method getCurrentSizeBytes (line 122) | long getCurrentSizeBytes() {
method open (line 126) | void open() {
method clear (line 130) | void clear() {
method get (line 142) | void get(String key) {
method put (line 146) | void put(String key, long sizeBytes) {
method getPendingDeleteKeys (line 167) | List<String> getPendingDeleteKeys() {
method getLeastRecentlyUsed (line 196) | List<String> getLeastRecentlyUsed(long targetByteCount) {
method getStaleEntries (line 248) | List<String> getStaleEntries(long staleTimeThresholdMs) {
method abortPut (line 279) | void abortPut(String key) {
method delete (line 331) | void delete(List<String> keys) {
method buildKeySelectionSet (line 369) | private static String buildKeySelectionSet(int count) {
method markPendingDelete (line 389) | void markPendingDelete(List<String> keys) {
class UpdateTimesCallback (line 417) | private static class UpdateTimesCallback implements Handler.Callback {
method UpdateTimesCallback (line 426) | UpdateTimesCallback(SQLiteOpenHelper dbHelper, int updateModifiedTim...
method getSqlStatement (line 443) | private SQLiteStatement getSqlStatement() {
method updateTimes (line 450) | private void updateTimes() {
method handleMessage (line 497) | @Override
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/JournalTable.java
class JournalTable (line 3) | final class JournalTable {
type Columns (line 7) | interface Columns {
method getSqlCreateStatement (line 21) | static String getSqlCreateStatement() {
method getIndexString (line 36) | static String getIndexString() {
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/JournaledLruDiskCache.java
class JournaledLruDiskCache (line 28) | final class JournaledLruDiskCache {
method JournaledLruDiskCache (line 64) | JournaledLruDiskCache(
method JournaledLruDiskCache (line 82) | @VisibleForTesting
method getBackgroundLooper (line 115) | private static Looper getBackgroundLooper() {
method openIfNotOpen (line 122) | @SuppressWarnings("checkstyle:UnnecessaryParentheses") // Readability
method verifyCanaryOrClear (line 141) | private void verifyCanaryOrClear() {
method touchCanaryFile (line 157) | private void touchCanaryFile() {
method getCurrentSizeBytes (line 169) | long getCurrentSizeBytes() {
method clear (line 178) | public synchronized void clear() {
method delete (line 196) | public void delete(String key) {
method delete (line 200) | List<String> delete(List<String> keys) {
method get (line 228) | public File get(String key) {
method beginPut (line 292) | @Nullable
method commitPut (line 343) | public void commitPut(String key, File temp) {
method abortPutIfNotCommitted (line 388) | public void abortPutIfNotCommitted(String key, File temp) {
method recoverPartialWrite (line 404) | void recoverPartialWrite(File temp) {
method keyFromFile (line 429) | private String keyFromFile(File file) {
method setMaximumSizeBytes (line 450) | public void setMaximumSizeBytes(long newMaximumSizeBytes) {
method getCacheFile (line 454) | private File getCacheFile(String key) {
method getTempFile (line 458) | private File getTempFile(String key) {
method getLogTime (line 462) | private static long getLogTime() {
method getElapsedTime (line 466) | private static long getElapsedTime(long startTime) {
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/MessageIds.java
type MessageIds (line 7) | interface MessageIds {
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/RecoveryManager.java
class RecoveryManager (line 11) | final class RecoveryManager {
method RecoveryManager (line 19) | RecoveryManager(
method triggerRecovery (line 29) | void triggerRecovery() {
method runRecoveryOnWorkThread (line 33) | private void runRecoveryOnWorkThread() {
method recoverPartialDeletes (line 42) | private void recoverPartialDeletes() {
method recoverPartialWrites (line 47) | private void recoverPartialWrites() {
class RecoveryCallback (line 63) | private class RecoveryCallback implements Handler.Callback {
method handleMessage (line 65) | @Override
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/SizeJournal.java
class SizeJournal (line 16) | final class SizeJournal {
method create (line 36) | @Override
method reset (line 42) | @Override
method SizeJournal (line 50) | SizeJournal(DiskCacheDbHelper dbHelper) {
method open (line 55) | void open() {
method clearInTransaction (line 71) | void clearInTransaction() {
method getCacheSizeBytes (line 77) | long getCacheSizeBytes() {
method prepareSizeTransaction (line 81) | SizeSQLiteTransactionListener prepareSizeTransaction() {
method endSizeTransaction (line 89) | void endSizeTransaction(SizeSQLiteTransactionListener listener) {
method decrementSizeInTransaction (line 94) | void decrementSizeInTransaction(SizeSQLiteTransactionListener sizeList...
method incrementSizeInTransaction (line 98) | void incrementSizeInTransaction(SizeSQLiteTransactionListener sizeList...
class SizeSQLiteTransactionListener (line 112) | final class SizeSQLiteTransactionListener implements SQLiteTransaction...
method clear (line 115) | void clear() {
method onBegin (line 119) | @Override
method onCommit (line 122) | @Override
method onRollback (line 125) | @Override
method getVerifier (line 131) | @NonNull
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/SizeTable.java
class SizeTable (line 3) | final class SizeTable {
type Columns (line 6) | interface Columns {
method getSqlCreateStatement (line 13) | static String getSqlCreateStatement() {
FILE: integration/sqljournaldiskcache/src/main/java/com/bumptech/glide/integration/sqljournaldiskcache/SqliteStatementPool.java
class SqliteStatementPool (line 10) | final class SqliteStatementPool {
method SqliteStatementPool (line 16) | SqliteStatementPool(SQLiteOpenHelper dbHelper) {
method obtain (line 20) | SQLiteStatement obtain(String sql) {
method offer (line 34) | void offer(String sql, SQLiteStatement statement) {
FILE: integration/sqljournaldiskcache/src/test/java/com/bumptech/glide/integration/sqljournaldiskcache/DiskCacheDbHelperUpgradeTest.java
class DiskCacheDbHelperUpgradeTest (line 14) | @RunWith(AndroidJUnit4.class)
method onUpgrade_fromVersionOneToTwo_producesFunctionalTablesAndColumns (line 18) | @Test
method ensureWeCanReadFromDiskCache (line 36) | private void ensureWeCanReadFromDiskCache() throws IOException {
FILE: integration/sqljournaldiskcache/src/test/java/com/bumptech/glide/integration/sqljournaldiskcache/DiskCacheUtils.java
class DiskCacheUtils (line 11) | final class DiskCacheUtils {
method DiskCacheUtils (line 13) | private DiskCacheUtils() {}
method writeToFile (line 15) | static void writeToFile(File file, String data) {
method writeToFile (line 20) | static void writeToFile(File file, byte[] bytes) {
method readFromFile (line 28) | static byte[] readFromFile(File file) {
method deleteRecursively (line 47) | private static void deleteRecursively(File file) {
class DiskCacheDirRule (line 62) | static final class DiskCacheDirRule extends ExternalResource {
method before (line 66) | @Override
method after (line 73) | @Override
method cleanup (line 79) | void cleanup() {
method diskCacheDir (line 83) | File diskCacheDir() {
FILE: integration/sqljournaldiskcache/src/test/java/com/bumptech/glide/integration/sqljournaldiskcache/JournaledLruDiskCacheTest.java
class JournaledLruDiskCacheTest (line 24) | @RunWith(AndroidJUnit4.class)
method setUp (line 37) | @Before
method newCache (line 47) | private JournaledLruDiskCache newCache() {
method newCache (line 51) | private JournaledLruDiskCache newCache(float evictionSlopMultiplier) {
method tearDown (line 64) | @After
method beginPut_createsCanaryFile (line 69) | @Test
method beginPut_withExistingFileForKey_returnsNull (line 75) | @Test
method commitPut_withFailedPreviousWrite_leavesSizeConsistent (line 89) | @Test
method commitPut_withFailedPreviousWrite_replacesContent (line 109) | @Test
method testAbortPutIfNotCommitted_handlesNullFiles (line 136) | @Test
method abortPutIfNotCommitted_decrementsSizeIfRenameToFails (line 143) | @Test
method abortPutIfNotCommitted_decrementsSizeInJournalIfRenameToFails (line 183) | @Test
method testAbortPutIfNotCommitted_withoutBeginPut_throws (line 222) | @Test(expected = IllegalMonitorStateException.class)
method get_afterCommittedPut_returnsFileWithData (line 227) | @Test
method get_beforePut_returnsNull (line 245) | @Test
method get_afterAbortedPut_returnsNull (line 250) | @Test
method abortPutIfNotCommitted_whenNotCommitted_discardsData (line 265) | @Test
method commitPut_runsEvictionIfNecessary (line 280) | @Test
method eviction_removesFirstPutFile (line 299) | @Test
method onIdleWorkerThread (line 324) | private static void onIdleWorkerThread() {
method eviction_withGets_removesLeastRecentlyUsedFile (line 328) | @Test
method eviction_withManyEntries_updatesSizeCorrectly (line 357) | @Test
method eviction_writeManyFiles_evictsManyEntries (line 398) | @Test
method delete_missingFile_ignored (line 430) | @Test
method delete_removesEntryForKey (line 435) | @Test
method delete_withInProgressWriteForKey_doesNotDeleteKey (line 455) | @Test
method delete_onPreviouslyFailedKey_doesNotDecrementCacheSizeTwice (line 465) | @Test
met
Condensed preview — 952 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,440K chars).
[
{
"path": ".github/stale.yml",
"chars": 795,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 7\n# Number of days of inactivity before a s"
},
{
"path": ".github/workflows/build.yml",
"chars": 2202,
"preview": "name: Android CI\n\non:\n push:\n pull_request:\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - name: Ch"
},
{
"path": ".github/workflows/publish-manual.yml",
"chars": 1886,
"preview": "name: Publish to Maven (manual)\n\non:\n workflow_dispatch:\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - "
},
{
"path": ".gitignore",
"chars": 304,
"preview": "# Android\nlocal.properties\n*.keystore\n*.DS_Store\n\n# Gradle\n.gradle\nbuild\njacoco.exec\n\n# gh-pages\ndoc/**\n_site/*\n_pages/*"
},
{
"path": ".gitmodules",
"chars": 0,
"preview": ""
},
{
"path": ".idea/codeStyleSettings.xml",
"chars": 23222,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"ProjectCodeStyleSettingsManager\">\n <o"
},
{
"path": ".idea/inspectionProfiles/Project_Default.xml",
"chars": 418,
"preview": "<component name=\"InspectionProjectProfileManager\">\n <profile version=\"1.0\">\n <option name=\"myName\" value=\"Project De"
},
{
"path": "CONTRIBUTING.md",
"chars": 3586,
"preview": "# Contributing\nContributions of all types are welcome.\nWe use GitHub as our bug and feature tracker both for code and fo"
},
{
"path": "ISSUE_TEMPLATE.md",
"chars": 2125,
"preview": "<!--\nPlease fill in the below fields with some data to help us best diagnose the issue.\nThe more specific you are, the b"
},
{
"path": "LICENSE",
"chars": 4899,
"preview": "License for everything not in third_party and not otherwise marked:\n\nCopyright 2014 Google, Inc. All rights reserved.\n\nR"
},
{
"path": "PULL_REQUEST_TEMPLATE.md",
"chars": 781,
"preview": "<!-- Make sure you've run `gradlew clean check jar assemble` before commit. -->\n<!-- Don't forget that you can always fo"
},
{
"path": "README.md",
"chars": 7812,
"preview": "Glide\n=====\n\n[\n}\n\napply(from = \"${rootProject.projectDir}/scripts/upload.gradle.kts\")\n\njava {\n sourceCompat"
},
{
"path": "annotation/compiler/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "annotation/compiler/build.gradle.kts",
"chars": 392,
"preview": "plugins {\n id(\"java\")\n}\n\ndependencies {\n implementation(libs.javapoet)\n implementation(libs.guava)\n\n compile"
},
{
"path": "annotation/compiler/gradle.properties",
"chars": 228,
"preview": "POM_NAME=Glide Annotation processor\nPOM_ARTIFACT_ID=compiler\nPOM_PACKAGING=jar\nPOM_DESCRIPTION=Glide's anntation process"
},
{
"path": "annotation/compiler/proguard.pro",
"chars": 913,
"preview": "-verbose\n# Use ProGuard only to get rid of unused classes\n-dontobfuscate\n-dontoptimize\n-keepattributes *\n-keep class !co"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/AppModuleGenerator.java",
"chars": 14180,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.Excludes;\nimport com.squareup.java"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/AppModuleProcessor.java",
"chars": 7888,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.squareup.j"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/ExtensionProcessor.java",
"chars": 1721,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideExtension;\nimport com.squareu"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideAnnotationProcessor.java",
"chars": 6188,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideType;\nimport com.google.auto."
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideExtensionValidator.java",
"chars": 12377,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.ProcessorUtil.nonN"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/GlideGenerator.java",
"chars": 8714,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideExtension;\nimport com.google."
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/IndexerGenerator.java",
"chars": 4683,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideExtension;\nimport com.bumptec"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/LibraryModuleProcessor.java",
"chars": 2572,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.squareup.j"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/ProcessorUtil.java",
"chars": 24167,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.GlideAnnotationPro"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestBuilderGenerator.java",
"chars": 20670,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideExtension;\nimport com.bumptec"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestManagerFactoryGenerator.java",
"chars": 4764,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.squareup.javapoet.ClassName;\nimport com.squareup.javapoet.Me"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestManagerGenerator.java",
"chars": 16224,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideExtension;\nimport com.bumptec"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsExtensionGenerator.java",
"chars": 5611,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.GlideOption.OVERRIDE_EXTEND"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsGenerator.java",
"chars": 20906,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport com.bumptech.glide.annotation.GlideExtension;\nimport com.bumptec"
},
{
"path": "annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/RequestOptionsOverrideGenerator.java",
"chars": 3935,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.RequestOptionsGene"
},
{
"path": "annotation/compiler/src/main/resources/META-INF/gradle/incremental.annotation.processors",
"chars": 76,
"preview": "com.bumptech.glide.annotation.compiler.GlideAnnotationProcessor,aggregating\n"
},
{
"path": "annotation/compiler/test/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "annotation/compiler/test/build.gradle",
"chars": 3546,
"preview": "apply plugin: 'com.android.library'\n\nandroid {\n sourceSets {\n test {\n resources {\n /"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/AppGlideModuleWithExcludesTest.java",
"chars": 3497,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.appResou"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/AppGlideModuleWithLibraryInPackageTest.java",
"chars": 3524,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.appResou"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/AppGlideModuleWithMultipleExcludesTest.java",
"chars": 3545,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.appResou"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/EmptyAppAndLibraryGlideModulesTest.java",
"chars": 4348,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.annotati"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/EmptyAppGlideModuleTest.java",
"chars": 3319,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.glide;\ni"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/EmptyLibraryGlideModuleTest.java",
"chars": 2064,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.annotati"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/GlideExtensionOptionsTest.java",
"chars": 4555,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.emptyApp"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/GlideExtensionWithOptionTest.java",
"chars": 3698,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.appResou"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/GlideExtensionWithTypeTest.java",
"chars": 3616,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.appResou"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidAppGlideModuleWithExcludesTest.java",
"chars": 3423,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.google.testing.compile.CompilationSubject.assertThat;"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidGlideExtensionTest.java",
"chars": 4899,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.emptyApp"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidGlideOptionsExtensionTest.java",
"chars": 16658,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.emptyApp"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/InvalidGlideTypeExtensionTest.java",
"chars": 17797,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.emptyApp"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/MultipleAppGlideModuleTest.java",
"chars": 2332,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.google.testing.compile.CompilationSubject.assertThat;"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/MultipleEmptyLibraryGlideModuleTest.java",
"chars": 2173,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.annotati"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/OverlyLongFileNameTest.java",
"chars": 2690,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport static com.google.testing.compile.Compiler.javac;\n\nimport com.bu"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/CompilationProvider.java",
"chars": 242,
"preview": "package com.bumptech.glide.annotation.compiler.test;\n\nimport com.google.testing.compile.Compilation;\n\n/** Provides the {"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/ReferencedResource.java",
"chars": 1118,
"preview": "package com.bumptech.glide.annotation.compiler.test;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotati"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/RegenerateResourcesRule.java",
"chars": 4077,
"preview": "package com.bumptech.glide.annotation.compiler.test;\n\nimport static com.bumptech.glide.annotation.compiler.test.Util.asU"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/SubDirectory.java",
"chars": 584,
"preview": "package com.bumptech.glide.annotation.compiler.test;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotati"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/TestDescription.java",
"chars": 510,
"preview": "package com.bumptech.glide.annotation.compiler.test;\n\nimport org.junit.rules.TestWatcher;\nimport org.junit.runner.Descri"
},
{
"path": "annotation/compiler/test/src/test/java/com/bumptech/glide/annotation/compiler/test/Util.java",
"chars": 3387,
"preview": "package com.bumptech.glide.annotation.compiler.test;\n\nimport com.google.testing.compile.JavaFileObjects;\nimport javax.to"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithExcludesTest/AppModuleWithExcludes.java",
"chars": 296,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.Excludes;\nimport com.bumptech.glide.annotation.Gl"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithExcludesTest/GeneratedAppGlideModuleImpl.java",
"chars": 1646,
"preview": "package com.bumptech.glide;\n\nimport android.content.Context;\nimport android.util.Log;\nimport androidx.annotation.NonNull"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithLibraryInPackageTest/AppModuleWithLibraryInPackage.java",
"chars": 373,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.Excludes;\nimport com.bumptech.glide.annotation.Gl"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithLibraryInPackageTest/GeneratedAppGlideModuleImpl.java",
"chars": 1704,
"preview": "package com.bumptech.glide;\n\nimport android.content.Context;\nimport android.util.Log;\nimport androidx.annotation.NonNull"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithLibraryInPackageTest/LibraryModuleInPackage.java",
"chars": 294,
"preview": "// _ in the name is important otherwise everything would work\npackage com.bumptech.glide.test._package;\n\nimport com.bump"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/AppModuleWithMultipleExcludes.java",
"chars": 334,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.Excludes;\nimport com.bumptech.glide.annotation.Gl"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/EmptyLibraryModule1.java",
"chars": 220,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.Lib"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/EmptyLibraryModule2.java",
"chars": 220,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.Lib"
},
{
"path": "annotation/compiler/test/src/test/resources/AppGlideModuleWithMultipleExcludesTest/GeneratedAppGlideModuleImpl.java",
"chars": 1885,
"preview": "package com.bumptech.glide;\n\nimport android.content.Context;\nimport android.util.Log;\nimport androidx.annotation.NonNull"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppAndLibraryGlideModulesTest/GeneratedAppGlideModuleImpl.java",
"chars": 1606,
"preview": "package com.bumptech.glide;\n\nimport android.content.Context;\nimport android.util.Log;\nimport androidx.annotation.NonNull"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/EmptyAppModule.java",
"chars": 206,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.App"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GeneratedAppGlideModuleImpl.java",
"chars": 1365,
"preview": "package com.bumptech.glide;\n\nimport android.content.Context;\nimport android.util.Log;\nimport androidx.annotation.NonNull"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GeneratedRequestManagerFactory.java",
"chars": 703,
"preview": "package com.bumptech.glide;\n\nimport android.content.Context;\nimport androidx.annotation.NonNull;\nimport com.bumptech.gli"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideApp.java",
"chars": 3187,
"preview": "package com.bumptech.glide.test;\n\nimport android.annotation.SuppressLint;\nimport android.app.Activity;\nimport android.co"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideOptions.java",
"chars": 14936,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequest.java",
"chars": 16385,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyAppGlideModuleTest/GlideRequests.java",
"chars": 4613,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphic"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyLibraryGlideModuleTest/EmptyLibraryModule.java",
"chars": 219,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.Lib"
},
{
"path": "annotation/compiler/test/src/test/resources/EmptyLibraryGlideModuleTest/GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule.java",
"chars": 203,
"preview": "package com.bumptech.glide.annotation.compiler;\n\n@Index(\n modules = \"com.bumptech.glide.test.EmptyLibraryModule\"\n)\npu"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/Extension.java",
"chars": 510,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.annotation.GlideExtensio"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideOptions.java",
"chars": 15468,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/MemoizeStaticMethod/GlideRequest.java",
"chars": 16615,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/Extension.java",
"chars": 528,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.annotation.GlideExtensio"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideOptions.java",
"chars": 15281,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtend/GlideRequest.java",
"chars": 16518,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/Extension.java",
"chars": 591,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.annotation.GlideExtensio"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideOptions.java",
"chars": 15137,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideExtendMultipleArguments/GlideRequest.java",
"chars": 16539,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/Extension.java",
"chars": 529,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.annotation.GlideExtensio"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideOptions.java",
"chars": 15219,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/OverrideReplace/GlideRequest.java",
"chars": 16441,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/Extension.java",
"chars": 507,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.annotation.GlideExtensio"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideOptions.java",
"chars": 15154,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/SkipStaticMethod/GlideRequest.java",
"chars": 16615,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/Extension.java",
"chars": 518,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.annotation.GlideExtensio"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideOptions.java",
"chars": 15316,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionOptionsTest/StaticMethodName/GlideRequest.java",
"chars": 16615,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/ExtensionWithOption.java",
"chars": 509,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.annotation.GlideExtensio"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideOptions.java",
"chars": 15391,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionWithOptionTest/GlideRequest.java",
"chars": 16656,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionWithTypeTest/ExtensionWithType.java",
"chars": 475,
"preview": "package com.bumptech.glide.test;\n\nimport androidx.annotation.NonNull;\nimport com.bumptech.glide.RequestBuilder;\nimport c"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionWithTypeTest/GlideOptions.java",
"chars": 14962,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.res.Resources;\nimport android.graphics.Bitmap;\nimport android.g"
},
{
"path": "annotation/compiler/test/src/test/resources/GlideExtensionWithTypeTest/GlideRequests.java",
"chars": 4837,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphic"
},
{
"path": "annotation/compiler/test/src/test/resources/MultipleAppGlideModuleTest/EmptyAppModule1.java",
"chars": 207,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.App"
},
{
"path": "annotation/compiler/test/src/test/resources/MultipleAppGlideModuleTest/EmptyAppModule2.java",
"chars": 207,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.App"
},
{
"path": "annotation/compiler/test/src/test/resources/MultipleEmptyLibraryGlideModuleTest/EmptyLibraryModule1.java",
"chars": 220,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.Lib"
},
{
"path": "annotation/compiler/test/src/test/resources/MultipleEmptyLibraryGlideModuleTest/EmptyLibraryModule2.java",
"chars": 220,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.Lib"
},
{
"path": "annotation/compiler/test/src/test/resources/MultipleEmptyLibraryGlideModuleTest/GlideIndexer_GlideModule_com_bumptech_glide_test_EmptyLibraryModule1_com_bumptech_glide_test_EmptyLibraryModule2.java",
"chars": 320,
"preview": "package com.bumptech.glide.annotation.compiler;\n\n@Index(\n modules = {\n \"com.bumptech.glide.test.EmptyLibraryMo"
},
{
"path": "annotation/gradle.properties",
"chars": 133,
"preview": "POM_NAME=Glide Annotations\nPOM_ARTIFACT_ID=annotations\nPOM_PACKAGING=jar\nPOM_DESCRIPTION=A set of annotations for config"
},
{
"path": "annotation/ksp/build.gradle.kts",
"chars": 437,
"preview": "plugins {\n id(\"org.jetbrains.kotlin.jvm\")\n id(\"com.google.devtools.ksp\")\n}\n\nkotlin { jvmToolchain { languageVersio"
},
{
"path": "annotation/ksp/gradle.properties",
"chars": 339,
"preview": "kotlin.code.style=official\n\nPOM_NAME=Glide KSP Annotation Processor\nPOM_ARTIFACT_ID=ksp\nPOM_PACKAGING=jar\nPOM_DESCRIPTIO"
},
{
"path": "annotation/ksp/integrationtest/build.gradle.kts",
"chars": 1594,
"preview": "/**\n * This package verifies that our ksp processor is able to successfully import\n * and include LibraryGlideModules co"
},
{
"path": "annotation/ksp/integrationtest/src/test/java/com/bumptech/glide/annotation/ksp/integrationtest/IntegrationLibraryGlideModuleTests.kt",
"chars": 13124,
"preview": "package com.bumptech.glide.annotation.ksp.integrationtest\n\nimport com.bumptech.glide.annotation.ksp.test.CommonSources\ni"
},
{
"path": "annotation/ksp/src/main/kotlin/com/bumptech/glide/annotation/ksp/AppGlideModules.kt",
"chars": 17711,
"preview": "package com.bumptech.glide.annotation.ksp\n\nimport com.bumptech.glide.annotation.Excludes\nimport com.google.devtools.ksp."
},
{
"path": "annotation/ksp/src/main/kotlin/com/bumptech/glide/annotation/ksp/GlideSymbolProcessor.kt",
"chars": 6508,
"preview": "package com.bumptech.glide.annotation.ksp\n\nimport com.google.devtools.ksp.processing.Dependencies\nimport com.google.devt"
},
{
"path": "annotation/ksp/src/main/kotlin/com/bumptech/glide/annotation/ksp/GlideSymbolProcessorProvider.kt",
"chars": 529,
"preview": "package com.bumptech.glide.annotation.ksp\n\nimport com.google.auto.service.AutoService\nimport com.google.devtools.ksp.pro"
},
{
"path": "annotation/ksp/src/main/kotlin/com/bumptech/glide/annotation/ksp/LibraryGlideModules.kt",
"chars": 5721,
"preview": "package com.bumptech.glide.annotation.ksp\n\nimport com.bumptech.glide.annotation.GlideModule\nimport com.bumptech.glide.an"
},
{
"path": "annotation/ksp/src/main/kotlin/com/bumptech/glide/annotation/ksp/ModuleParser.kt",
"chars": 1747,
"preview": "package com.bumptech.glide.annotation.ksp\n\nimport com.google.devtools.ksp.symbol.KSClassDeclaration\nimport com.google.de"
},
{
"path": "annotation/ksp/test/build.gradle.kts",
"chars": 881,
"preview": "plugins {\n id(\"org.jetbrains.kotlin.android\")\n id(\"com.android.library\")\n}\n\nandroid {\n namespace = \"com.bumptec"
},
{
"path": "annotation/ksp/test/src/main/kotlin/com/bumptech/glide/annotation/ksp/test/SourceTestHelpers.kt",
"chars": 5109,
"preview": "package com.bumptech.glide.annotation.ksp.test\n\nimport com.bumptech.glide.annotation.ksp.GlideSymbolProcessorProvider\nim"
},
{
"path": "annotation/ksp/test/src/test/kotlin/com/bumptech/glide/annotation/ksp/test/LibraryGlideModuleTests.kt",
"chars": 26076,
"preview": "package com.bumptech.glide.annotation.ksp.test\n\nimport com.bumptech.glide.annotation.ksp.AppGlideModuleConstants\nimport "
},
{
"path": "annotation/ksp/test/src/test/kotlin/com/bumptech/glide/annotation/ksp/test/OnlyAppGlideModuleTests.kt",
"chars": 10705,
"preview": "package com.bumptech.glide.annotation.ksp.test\n\nimport com.bumptech.glide.annotation.ksp.AppGlideModuleConstants\nimport "
},
{
"path": "annotation/src/main/java/com/bumptech/glide/annotation/Excludes.java",
"chars": 644,
"preview": "package com.bumptech.glide.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\n"
},
{
"path": "annotation/src/main/java/com/bumptech/glide/annotation/GlideExtension.java",
"chars": 382,
"preview": "package com.bumptech.glide.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\n"
},
{
"path": "annotation/src/main/java/com/bumptech/glide/annotation/GlideModule.java",
"chars": 709,
"preview": "package com.bumptech.glide.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\n"
},
{
"path": "annotation/src/main/java/com/bumptech/glide/annotation/GlideOption.java",
"chars": 5086,
"preview": "package com.bumptech.glide.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\n"
},
{
"path": "annotation/src/main/java/com/bumptech/glide/annotation/GlideType.java",
"chars": 1787,
"preview": "package com.bumptech.glide.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\n"
},
{
"path": "annotation/src/main/java/com/bumptech/glide/annotation/compiler/Index.java",
"chars": 634,
"preview": "package com.bumptech.glide.annotation.compiler;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Re"
},
{
"path": "annotation/src/main/java/com/bumptech/glide/annotation/ksp/Index.java",
"chars": 592,
"preview": "package com.bumptech.glide.annotation.ksp;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retenti"
},
{
"path": "benchmark/benchmark-proguard-rules.pro",
"chars": 1057,
"preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
},
{
"path": "benchmark/build.gradle.kts",
"chars": 1163,
"preview": "plugins {\n id(\"com.android.library\")\n id(\"androidx.benchmark\")\n}\n\nandroid {\n namespace = \"com.bumptech.glide.be"
},
{
"path": "benchmark/gradle.properties",
"chars": 40,
"preview": "android.enableAdditionalTestOutput=true\n"
},
{
"path": "benchmark/src/androidTest/AndroidManifest.xml",
"chars": 547,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tool"
},
{
"path": "benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkData.java",
"chars": 2954,
"preview": "package com.bumptech.glide.benchmark;\n\nimport androidx.test.ext.junit.runners.AndroidJUnit4;\nimport com.bumptech.glide.b"
},
{
"path": "benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkFromCache.java",
"chars": 5269,
"preview": "package com.bumptech.glide.benchmark;\n\nimport android.app.Application;\nimport android.graphics.Bitmap;\nimport androidx.a"
},
{
"path": "benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkMediaStoreData.java",
"chars": 3368,
"preview": "package com.bumptech.glide.benchmark;\n\nimport android.Manifest.permission;\nimport android.app.Application;\nimport androi"
},
{
"path": "benchmark/src/androidTest/java/com/bumptech/glide/benchmark/BenchmarkModels.java",
"chars": 7614,
"preview": "package com.bumptech.glide.benchmark;\n\nimport android.app.Application;\nimport android.content.ContentResolver;\nimport an"
},
{
"path": "benchmark/src/androidTest/java/com/bumptech/glide/benchmark/GlideBenchmarkRule.java",
"chars": 2621,
"preview": "package com.bumptech.glide.benchmark;\n\nimport android.content.Context;\nimport androidx.benchmark.BenchmarkState;\nimport "
},
{
"path": "benchmark/src/androidTest/java/com/bumptech/glide/benchmark/data/DataOpener.java",
"chars": 4629,
"preview": "package com.bumptech.glide.benchmark.data;\n\nimport android.os.ParcelFileDescriptor;\nimport androidx.annotation.Nullable;"
},
{
"path": "benchmark/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/BenchmarkDownsampler.java",
"chars": 5451,
"preview": "package com.bumptech.glide.load.resource.bitmap;\n\nimport android.app.Application;\nimport android.os.ParcelFileDescriptor"
},
{
"path": "build.gradle",
"chars": 7473,
"preview": "import org.gradle.api.tasks.testing.logging.TestExceptionFormat\nimport se.bjurr.violations.gradle.plugin.ViolationsTask\n"
},
{
"path": "checkstyle.xml",
"chars": 6009,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE module PUBLIC \"-//Puppy Crawl//DTD Check Configuration 1.3//EN\" \"http:/"
},
{
"path": "checkstyle_suppressions.xml",
"chars": 1680,
"preview": "<?xml version=\"1.0\"?>\n\n<!DOCTYPE suppressions PUBLIC\n \"-//Puppy Crawl//DTD Suppressions 1.1//EN\"\n \"http://www.pupp"
},
{
"path": "glide/build.gradle",
"chars": 4633,
"preview": "import com.android.build.gradle.api.LibraryVariant\n\n/**\n * This module is used for two things:\n * <ul>\n * <l"
},
{
"path": "glide/gradle.properties",
"chars": 65,
"preview": "POM_NAME=Glide Full\nPOM_ARTIFACT_ID=glide-full\nPOM_PACKAGING=jar\n"
},
{
"path": "gradle/libs.versions.toml",
"chars": 10379,
"preview": "[versions]\navif = \"1.1.1.14d8e3c4\"\ngson = \"2.8.2\"\npmd = \"6.0.0\"\ndagger = \"2.47\"\ncompose = \"1.5.1\"\nkotlin = \"1.9.20\"\nmock"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 253,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "gradle.properties",
"chars": 1488,
"preview": "## For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/buil"
},
{
"path": "gradlew",
"chars": 8710,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "gradlew.bat",
"chars": 2937,
"preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
},
{
"path": "instrumentation/build.gradle.kts",
"chars": 1619,
"preview": "tasks.configureEach {\n if (name == \"lint\") {\n enabled = false\n }\n}\n\nplugins {\n id(\"com.android.applicati"
},
{
"path": "instrumentation/gradle.properties",
"chars": 0,
"preview": ""
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/AsBytesTest.java",
"chars": 5987,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/AsFileTest.java",
"chars": 3130,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.junit.Assert.fail"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/CachingTest.java",
"chars": 18758,
"preview": "package com.bumptech.glide;\n\nimport static com.bumptech.glide.testutil.BitmapSubject.assertThat;\nimport static org.junit"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/CenterCropRegressionTest.java",
"chars": 3465,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/CenterInsideRegressionTest.java",
"chars": 3643,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/CircleCropRegressionTest.java",
"chars": 3599,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/DarkModeTest.java",
"chars": 21048,
"preview": "package com.bumptech.glide;\n\nimport static androidx.test.espresso.Espresso.onIdle;\nimport static com.bumptech.glide.test"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/DataUriTest.java",
"chars": 3175,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/DownsampleVideoTest.java",
"chars": 6579,
"preview": "package com.bumptech.glide;\n\nimport static com.bumptech.glide.testutil.BitmapSubject.assertThat;\nimport static org.junit"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/DrawableTransformationTest.java",
"chars": 8326,
"preview": "package com.bumptech.glide;\n\nimport static com.bumptech.glide.testutil.BitmapSubject.assertThat;\nimport static com.googl"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/ErrorHandlingTest.java",
"chars": 6159,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.mockito.ArgumentM"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/ExternallyClearedDiskCacheTest.java",
"chars": 3643,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.mockito.Mockito.m"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/FitCenterRegressionTest.java",
"chars": 4494,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.junit.Assert.asse"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LargeImageTest.java",
"chars": 2772,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.ContentReso"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LoadAnimatedImageResourceTest.java",
"chars": 3504,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.junit.Assume.assu"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LoadAssetUriTest.java",
"chars": 3763,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LoadBitmapTest.java",
"chars": 12755,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.mockito.ArgumentM"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LoadBytesTest.java",
"chars": 18112,
"preview": "package com.bumptech.glide;\n\nimport static com.bumptech.glide.test.GlideOptions.skipMemoryCacheOf;\nimport static com.bum"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LoadDrawableTest.java",
"chars": 7552,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.mockito.ArgumentM"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LoadResourcesWithDownsamplerTest.java",
"chars": 11175,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.junit.Assume.assu"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/LoadVideoResourceTest.java",
"chars": 9018,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.ContentReso"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/MultiRequestTest.java",
"chars": 6470,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/NonBitmapDrawableResourcesTest.java",
"chars": 20115,
"preview": "package com.bumptech.glide;\n\nimport static com.bumptech.glide.request.RequestOptions.bitmapTransform;\nimport static com."
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/PausedRequestsTest.java",
"chars": 1733,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/RequestManagerLifecycleTest.java",
"chars": 19020,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.junit.Assert.asse"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/RequestManagerTest.java",
"chars": 3182,
"preview": "package com.bumptech.glide;\n\nimport android.content.Context;\nimport android.graphics.drawable.Drawable;\nimport android.w"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/RequestTest.java",
"chars": 9611,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.mockito.ArgumentM"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/RoundedCornersRegressionTest.java",
"chars": 3309,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.content.Context;\nim"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/WideGamutTest.java",
"chars": 7175,
"preview": "package com.bumptech.glide;\n\nimport static com.google.common.truth.Truth.assertThat;\nimport static org.junit.Assume.assu"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/load/engine/executor/IdlingGlideRule.java",
"chars": 3132,
"preview": "package com.bumptech.glide.load.engine.executor;\n\nimport androidx.test.core.app.ApplicationProvider;\nimport androidx.tes"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/load/resource/bitmap/DownsamplerEmulatorTest.java",
"chars": 38328,
"preview": "package com.bumptech.glide.load.resource.bitmap;\n\nimport static android.graphics.Bitmap.CompressFormat.JPEG;\nimport stat"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java",
"chars": 7529,
"preview": "package com.bumptech.glide.load.resource.gif;\n\nimport static com.google.common.truth.Truth.assertThat;\n\nimport android.M"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/test/BitmapRegressionTester.java",
"chars": 6994,
"preview": "package com.bumptech.glide.test;\n\nimport static com.bumptech.glide.testutil.BitmapSubject.assertThat;\nimport static org."
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/test/CanonicalBitmap.java",
"chars": 1565,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.graphics.Bitmap;\nimport android.graphic"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/test/ModelGeneratorRule.java",
"chars": 2520,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport androidx."
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/test/RegressionTest.java",
"chars": 497,
"preview": "package com.bumptech.glide.test;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/test/ResourceIds.java",
"chars": 1997,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.res.Resources;\nimport androidx."
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/test/SplitByCpu.java",
"chars": 422,
"preview": "package com.bumptech.glide.test;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport"
},
{
"path": "instrumentation/src/androidTest/java/com/bumptech/glide/test/SplitBySdk.java",
"chars": 495,
"preview": "package com.bumptech.glide.test;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport"
},
{
"path": "instrumentation/src/main/AndroidManifest.xml",
"chars": 960,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:to"
},
{
"path": "instrumentation/src/main/java/com/bumptech/glide/test/DefaultFragmentActivity.java",
"chars": 434,
"preview": "package com.bumptech.glide.test;\n\nimport android.os.Bundle;\nimport androidx.annotation.Nullable;\nimport androidx.fragmen"
},
{
"path": "instrumentation/src/main/java/com/bumptech/glide/test/ForceDarkOrLightModeActivity.java",
"chars": 1536,
"preview": "package com.bumptech.glide.test;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.Build"
},
{
"path": "instrumentation/src/main/java/com/bumptech/glide/test/GlideWithAsDifferentSupertypesActivity.java",
"chars": 529,
"preview": "package com.bumptech.glide.test;\n\nimport android.app.Activity;\nimport android.content.Context;\nimport android.os.Bundle;"
},
{
"path": "instrumentation/src/main/java/com/bumptech/glide/test/GlideWithBeforeSuperOnCreateActivity.java",
"chars": 564,
"preview": "package com.bumptech.glide.test;\n\nimport android.os.Bundle;\nimport android.widget.TextView;\nimport androidx.annotation.N"
},
{
"path": "instrumentation/src/main/java/com/bumptech/glide/test/InstrumentationAppGlideModule.java",
"chars": 243,
"preview": "package com.bumptech.glide.test;\n\nimport com.bumptech.glide.annotation.GlideModule;\nimport com.bumptech.glide.module.App"
},
{
"path": "instrumentation/src/main/res/drawable/bitmap_alias.xml",
"chars": 156,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<bitmap xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:src="
},
{
"path": "instrumentation/src/main/res/drawable/shape_drawable.xml",
"chars": 180,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:shape"
},
{
"path": "instrumentation/src/main/res/drawable/state_list_drawable.xml",
"chars": 403,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n <item an"
},
{
"path": "instrumentation/src/main/res/drawable/vector_drawable.xml",
"chars": 1046,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tool"
},
{
"path": "instrumentation/src/main/res/drawable/vector_drawable_dark.xml",
"chars": 947,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:widt"
}
]
// ... and 752 more files (download for full content)
About this extraction
This page contains the full source code of the bumptech/glide GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 952 files (4.0 MB), approximately 1.1M tokens, and a symbol index with 9336 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.