From 20fd815fb306f45159e4dc24cd970151f3e28e75 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 25 Aug 2022 08:15:34 -0400 Subject: [PATCH] Make `ClassLoaderValue` compatible with PowerMock --- .../main/java/org/kohsuke/stapler/ClassLoaderValue.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/kohsuke/stapler/ClassLoaderValue.java b/core/src/main/java/org/kohsuke/stapler/ClassLoaderValue.java index d5363d0929..0843181dd3 100644 --- a/core/src/main/java/org/kohsuke/stapler/ClassLoaderValue.java +++ b/core/src/main/java/org/kohsuke/stapler/ClassLoaderValue.java @@ -45,14 +45,15 @@ protected T computeValue(Class type) { public interface X {} public final T get(ClassLoader cl) { + Class x; try { - cl.loadClass(X.class.getName()); - // OK, X is visible to cl, can use trick - } catch (ClassNotFoundException x) { + x = cl.loadClass(X.class.getName()); + // OK, X is visible to cl, can use trick; note that x != X.class when using PowerMock + } catch (ClassNotFoundException e) { // fallback, no caching; could use WeakHashMap though typically values would strongly hold keys so both could leak return computeValue(cl); } - Class type = Proxy.getProxyClass(cl, X.class); + Class type = Proxy.getProxyClass(cl, x); assert type.getClassLoader() == cl; return storage.get(type); }