package com.atlassian.labs.speakeasy.util;
import com.atlassian.plugin.AutowireCapablePlugin;
import com.atlassian.plugin.Plugin;
import com.atlassian.plugin.impl.AbstractDelegatingPlugin;
import com.atlassian.plugin.module.ContainerManagedPlugin;
/**
* Loads classes from this plugin before the target plugin
*/
public class ClassOverwrittingPlugin extends AbstractDelegatingPlugin implements AutowireCapablePlugin
{
private final ContainerManagedPlugin plugin;
public ClassOverwrittingPlugin(Plugin delegate) {
super(delegate);
this.plugin = (ContainerManagedPlugin) delegate;
}
@Override
public <T> Class<T> loadClass(String clazz, Class<?> callingClass) throws ClassNotFoundException
{
try
{
return super.loadClass(clazz, callingClass);
}
catch (ClassNotFoundException ex)
{
return (Class<T>) getClass().getClassLoader().loadClass(clazz);
}
}
@Override
public <T> T autowire(Class<T> tClass)
{
return plugin.getContainerAccessor().createBean(tClass);
}
@Override
public <T> T autowire(Class<T> tClass, AutowireStrategy autowireStrategy)
{
return plugin.getContainerAccessor().createBean(tClass);
}
@Override
public void autowire(Object o)
{
plugin.getContainerAccessor().injectBean(o);
}
@Override
public void autowire(Object o, AutowireStrategy autowireStrategy)
{
plugin.getContainerAccessor().injectBean(o);
}
}