ClassLoader dep1Loader = registry.getAddon(AddonId.from("dep1", "1")).getClassLoader();
ClassLoader dep2Loader = registry.getAddon(AddonId.from("dep2", "2")).getClassLoader();
Class<?> foreignType = dep2Loader.loadClass(MockResult.class.getName());
Object delegate = foreignType.newInstance();
MockResult enhancedResult = (MockResult) ClassLoaderAdapterBuilder.callingLoader(thisLoader)
.delegateLoader(dep2Loader).enhance(delegate);
Assert.assertTrue(Proxies.isForgeProxy(enhancedResult));
Object foreignInstance = dep1Loader
.loadClass(ClassWithClassAsParameter.class.getName())
.getConstructor(Class.class)
.newInstance(foreignType);
ClassLoaderAdapterBuilderDelegateLoader builder = ClassLoaderAdapterBuilder
.callingLoader(thisLoader)
.delegateLoader(dep1Loader);
Object enhancedFilter = builder.enhance(foreignInstance);
ClassWithClassAsParameter classFilter = (ClassWithClassAsParameter) enhancedFilter;
Assert.assertTrue(Proxies.isForgeProxy(classFilter));
Class<? extends MockResult> enhancedResultType = enhancedResult.getClass();
Assert.assertTrue(classFilter.verify(enhancedResultType));
Assert.assertFalse(classFilter.isProxyType(enhancedResultType));
Assert.assertTrue(classFilter.verify(delegate.getClass()));
Assert.assertFalse(classFilter.isProxyType(delegate.getClass()));
Assert.assertTrue(classFilter.verify(foreignType));