@Override public <T> T createMock(MockCreationSettings<T> settings, MockHandler handler) { T mock = cglibMockMaker.createMock(settings, handler); ClassLoader classLoader = cglibMockMaker.getClass().getClassLoader(); if (classLoader instanceof MockClassLoader) { MockClassLoader mcl = (MockClassLoader) classLoader; // The generated class is not picked up by PowerMock so we cache it here mcl.cache(mock.getClass()); } return mock; }
@Override protected Class<?> loadClassByThisClassLoader(String className) throws ClassFormatError, ClassNotFoundException { final Class<?> loadedClass; Class<?> deferClass = deferTo.loadClass(className); if (getConfiguration().shouldMockClass(className)) { loadedClass = loadMockClass(className, deferClass.getProtectionDomain()); } else { loadedClass = loadUnmockedClass(className, deferClass.getProtectionDomain()); } return loadedClass; }
private Class<?> defineClass(String name, URL url, final ProtectionDomain protectionDomain) throws IOException { byte[] b = readClass(url); return defineClass(name, b, 0, b.length, protectionDomain); }
private Class<?> loadMockClass(String name, ProtectionDomain protectionDomain) throws ClassNotFoundException { final byte[] clazz = defineAndTransformClass(name, protectionDomain); return defineClass(name, protectionDomain, clazz); }
public Class<?> defineClass(final String name, final ProtectionDomain protectionDomain, final byte[] clazz) { return defineClass(name, clazz, 0, clazz.length, protectionDomain); }
private void initialize(MockClassLoader classLoader) { if (mockPolicies.length > 0) { updateClassLoaderConfiguration(classLoader.getConfiguration()); invokeInitializeInterceptionSettingsFromClassLoader(classLoader); } }
public MockClassLoader build() { internalAssertNotNull(testClass, "Test class is null during building classloader. "); final MockClassLoaderConfiguration configuration = new MockClassLoaderConfiguration(classesToModify, packagesToIgnore); final MockClassLoader classLoader = byteCodeFramework.createClassloader(configuration, useClassPathAdjuster); classLoader.setMockTransformerChain(createTransformerChain()); return classLoader; }
protected Class<?> loadUnmockedClass(final String name, final ProtectionDomain protectionDomain) throws ClassNotFoundException { String path = name.replace('.', '/').concat(".class"); URL res = deferTo.getResource(path); if (res != null) { try { return defineClass(name, res, protectionDomain); } catch (IOException e) { throw new ClassNotFoundException(name, e); } } else { throw new ClassNotFoundException(name); } }
if (classLoader instanceof MockClassLoader) { MockClassLoader mcl = (MockClassLoader) classLoader; mcl.cache(mock.getClass());
private void cacheMockClass(final Class<?> mockClass) { ClassLoader classLoader = mockClass.getClassLoader(); if (classLoader instanceof MockClassLoader) { MockClassLoader mcl = (MockClassLoader) classLoader; mcl.cache(mockClass); } }