Action.java
package autumn.util.functors;
import autumn.lang.TypedFunctor;
import autumn.lang.exceptions.CheckedException;
import autumn.lang.internals.AbstractDefinedFunctor;
import autumn.lang.internals.ArgumentStack;
import autumn.lang.internals.annotations.FunctorDefinition;
import com.google.common.collect.ImmutableList;
import java.util.List;
/**
* <code>
* functor Action () : void
* </code>
*
* @author Mackenzie High
*/
@FunctorDefinition
public class Action
extends AbstractDefinedFunctor
implements Runnable
{
/**
* Sole Constructor.
*
* @param inner is the functor that provides the actual functionality.
*/
public Action(final TypedFunctor functor)
{
super(functor);
}
/**
* This method invokes the inner functor.
*/
public void invoke()
throws Throwable
{
final ArgumentStack stack = ArgumentStack.getThreadStack();
stack.clear();
inner().apply(stack);
}
/**
* {@inheritDoc}
*/
@Override
public List<Class> parameterTypes()
{
return ImmutableList.<Class>of();
}
/**
* {@inheritDoc}
*/
@Override
public Class returnType()
{
return void.class;
}
/**
* This method invokes the inner functor.
*/
@Override
public void run()
{
try
{
invoke();
}
catch (Throwable t)
{
throw new CheckedException(t);
}
}
}