From 0b54bf735b82cc31d692464f674f96f772fe6294 Mon Sep 17 00:00:00 2001 From: Sam Judd Date: Wed, 4 Jan 2023 11:13:51 -0800 Subject: [PATCH] Internal change PiperOrigin-RevId: 499533290 --- .../main/java/com/bumptech/glide/Glide.java | 13 ++-- .../com/bumptech/glide/RegistryFactory.java | 10 ++- .../bumptech/glide/InitializeGlideTest.java | 72 ------------------- .../bumptech/glide/RegistryFactoryTest.java | 61 ---------------- 4 files changed, 9 insertions(+), 147 deletions(-) delete mode 100644 library/test/src/test/java/com/bumptech/glide/InitializeGlideTest.java delete mode 100644 library/test/src/test/java/com/bumptech/glide/RegistryFactoryTest.java diff --git a/library/src/main/java/com/bumptech/glide/Glide.java b/library/src/main/java/com/bumptech/glide/Glide.java index bc7751556c..4fc4b71ef4 100644 --- a/library/src/main/java/com/bumptech/glide/Glide.java +++ b/library/src/main/java/com/bumptech/glide/Glide.java @@ -137,21 +137,18 @@ public static Glide get(@NonNull Context context) { } @GuardedBy("Glide.class") - @VisibleForTesting - static void checkAndInitializeGlide( + private static void checkAndInitializeGlide( @NonNull Context context, @Nullable GeneratedAppGlideModule generatedAppGlideModule) { // In the thread running initGlide(), one or more classes may call Glide.get(context). // Without this check, those calls could trigger infinite recursion. if (isInitializing) { throw new IllegalStateException( - "Glide has been called recursively, this is probably an internal library error!"); + "You cannot call Glide.get() in registerComponents()," + + " use the provided Glide instance instead"); } isInitializing = true; - try { - initializeGlide(context, generatedAppGlideModule); - } finally { - isInitializing = false; - } + initializeGlide(context, generatedAppGlideModule); + isInitializing = false; } /** diff --git a/library/src/main/java/com/bumptech/glide/RegistryFactory.java b/library/src/main/java/com/bumptech/glide/RegistryFactory.java index 3ec3e961ed..a8b7462db5 100644 --- a/library/src/main/java/com/bumptech/glide/RegistryFactory.java +++ b/library/src/main/java/com/bumptech/glide/RegistryFactory.java @@ -90,24 +90,22 @@ static GlideSupplier lazilyCreateAndInitializeRegistry( final List manifestModules, @Nullable final AppGlideModule annotationGeneratedModule) { return new GlideSupplier() { - // Rely on callers using memoization if they want to avoid duplicate work, but - // rely on ourselves to verify that no recursive initialization occurs. - private boolean isInitializing; + private boolean isInitializingOrInitialized; @Override public Registry get() { - if (isInitializing) { + if (isInitializingOrInitialized) { throw new IllegalStateException( "Recursive Registry initialization! In your" + " AppGlideModule and LibraryGlideModules, Make sure you're using the provided " + "Registry rather calling glide.getRegistry()!"); } + isInitializingOrInitialized = true; + Trace.beginSection("Glide registry"); - isInitializing = true; try { return createAndInitRegistry(glide, manifestModules, annotationGeneratedModule); } finally { - isInitializing = false; Trace.endSection(); } } diff --git a/library/test/src/test/java/com/bumptech/glide/InitializeGlideTest.java b/library/test/src/test/java/com/bumptech/glide/InitializeGlideTest.java deleted file mode 100644 index b51e69c531..0000000000 --- a/library/test/src/test/java/com/bumptech/glide/InitializeGlideTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.bumptech.glide; - -import static org.junit.Assert.assertThrows; - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.bumptech.glide.tests.TearDownGlide; -import java.util.Set; -import org.junit.Rule; -import org.junit.Test; -import org.junit.function.ThrowingRunnable; -import org.junit.runner.RunWith; - -// This test is about edge cases that might otherwise make debugging more challenging. -@RunWith(AndroidJUnit4.class) -public class InitializeGlideTest { - @Rule public final TearDownGlide tearDownGlide = new TearDownGlide(); - private final Context context = ApplicationProvider.getApplicationContext(); - - private static final class TestException extends RuntimeException { - private static final long serialVersionUID = 2515021766931124927L; - } - - @Test - public void initialize_whenInternalMethodThrows_throwsException() { - assertThrows( - TestException.class, - new ThrowingRunnable() { - @Override - public void run() { - synchronized (Glide.class) { - Glide.checkAndInitializeGlide( - context, - new GeneratedAppGlideModule() { - @NonNull - @Override - Set> getExcludedModuleClasses() { - throw new TestException(); - } - }); - } - } - }); - } - - @Test - public void initialize_whenInternalMethodThrows_andCalledTwice_throwsException() { - GeneratedAppGlideModule throwingGeneratedAppGlideModule = - new GeneratedAppGlideModule() { - @NonNull - @Override - Set> getExcludedModuleClasses() { - throw new TestException(); - } - }; - ThrowingRunnable initializeGlide = - new ThrowingRunnable() { - @Override - public void run() throws Throwable { - synchronized (Glide.class) { - Glide.checkAndInitializeGlide(context, throwingGeneratedAppGlideModule); - } - } - }; - - assertThrows(TestException.class, initializeGlide); - // Make sure the second exception isn't hidden by some Glide initialization related exception. - assertThrows(TestException.class, initializeGlide); - } -} diff --git a/library/test/src/test/java/com/bumptech/glide/RegistryFactoryTest.java b/library/test/src/test/java/com/bumptech/glide/RegistryFactoryTest.java deleted file mode 100644 index 6fb7077b41..0000000000 --- a/library/test/src/test/java/com/bumptech/glide/RegistryFactoryTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.bumptech.glide; - -import static org.junit.Assert.assertThrows; - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.bumptech.glide.module.AppGlideModule; -import com.bumptech.glide.tests.TearDownGlide; -import com.bumptech.glide.util.GlideSuppliers.GlideSupplier; -import com.google.common.collect.ImmutableList; -import org.junit.Rule; -import org.junit.Test; -import org.junit.function.ThrowingRunnable; -import org.junit.runner.RunWith; - -@RunWith(AndroidJUnit4.class) -public class RegistryFactoryTest { - @Rule public final TearDownGlide tearDownGlide = new TearDownGlide(); - private final Context context = ApplicationProvider.getApplicationContext(); - - private static final class TestException extends RuntimeException { - private static final long serialVersionUID = 2334956185897161236L; - } - - @Test - public void create_whenCalledTwiceWithThrowingModule_throwsOriginalException() { - AppGlideModule throwingAppGlideModule = - new AppGlideModule() { - @Override - public void registerComponents( - @NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) { - throw new TestException(); - } - }; - - Glide glide = Glide.get(context); - GlideSupplier registrySupplier = - RegistryFactory.lazilyCreateAndInitializeRegistry( - glide, /* manifestModules= */ ImmutableList.of(), throwingAppGlideModule); - - assertThrows( - TestException.class, - new ThrowingRunnable() { - @Override - public void run() { - registrySupplier.get(); - } - }); - - assertThrows( - TestException.class, - new ThrowingRunnable() { - @Override - public void run() { - registrySupplier.get(); - } - }); - } -}