@Override public Object getThisObject() { return closure.getThisObject(); }
/** * Wraps a closure so that it can be used as a prototype for inclusion in layouts. This is useful when * you want to use a closure in a model, but that you don't want to render the result of the closure but instead * call it as if it was a specification of a template fragment. * @param cl the fragment to be wrapped * @return a wrapped closure returning an empty string */ public Closure contents(final Closure cl) { return new Closure(cl.getOwner(), cl.getThisObject()) { @Override public Object call() { cl.call(); return ""; } @Override public Object call(final Object... args) { cl.call(args); return ""; } @Override public Object call(final Object arguments) { cl.call(arguments); return ""; } }; }
return getResolveStrategy(); } else if ("thisObject".equals(property)) { return getThisObject(); } else { switch(resolveStrategy) {
final Object owner = closure.getOwner(); final Object delegate = closure.getDelegate(); final Object thisObject = closure.getThisObject(); final int resolveStrategy = closure.getResolveStrategy(); boolean invokeOnDelegate = false;
/** * Creates a new instance that wraps the target closure and sends profiling events to the given * profiler log. * * @param closure * The target closure to wrap. */ public AbstractClosureProxy(Closure closure) { super(closure.getOwner(), closure.getThisObject()); this.target = closure; }
protected static <T> T invokeDslStatement(Closure<?> statement, final Supplier<T> delegate, final Object... args){ final T result; statement = statement.rehydrate(result = delegate.get(), statement.getOwner(), statement.getThisObject()); statement.call(args); return result; }
private static <T> T configure(Object spec, Object delegate, Closure<T> closure) { Closure<T> clonedClosure = closure.rehydrate(delegate, spec, closure.getThisObject()); clonedClosure.setResolveStrategy(Closure.DELEGATE_FIRST); return clonedClosure.call(delegate); }
/** * Wraps a closure so that it can be used as a prototype for inclusion in layouts. This is useful when * you want to use a closure in a model, but that you don't want to render the result of the closure but instead * call it as if it was a specification of a template fragment. * @param cl the fragment to be wrapped * @return a wrapped closure returning an empty string */ public Closure contents(final Closure cl) { return new Closure(cl.getOwner(), cl.getThisObject()) { private static final long serialVersionUID = -5733727697043906478L; @Override public Object call() { cl.call(); return ""; } @Override public Object call(final Object... args) { cl.call(args); return ""; } @Override public Object call(final Object arguments) { cl.call(arguments); return ""; } }; }
@SuppressWarnings("rawtypes") public static ScriptHelper get(Closure body){ if(body.getClass().getClassLoader() instanceof GroovityClassLoader){ return ((GroovityClassLoader)body.getClass().getClassLoader()).getScriptHelper(); } //fallback for empty body tag calls to get a hold of the ScriptHelper from the script Class if(body.getThisObject()!=null){ if(body.getThisObject() instanceof Class){ return ((GroovityClassLoader)((Class)body.getThisObject()).getClassLoader()).getScriptHelper(); } } if(body.getOwner()!=null){ if(body.getOwner() instanceof Class){ return ((GroovityClassLoader)((Class)body.getOwner()).getClassLoader()).getScriptHelper(); } } throw new RuntimeException("Could not find ScriptHelper for "+body); }
@SuppressWarnings("rawtypes") public static ScriptHelper get(Closure body){ if(body.getClass().getClassLoader() instanceof GroovityClassLoader){ return ((GroovityClassLoader)body.getClass().getClassLoader()).getScriptHelper(); } //fallback for empty body tag calls to get a hold of the ScriptHelper from the script Class if(body.getThisObject()!=null){ if(body.getThisObject() instanceof Class){ return ((GroovityClassLoader)((Class)body.getThisObject()).getClassLoader()).getScriptHelper(); } } if(body.getOwner()!=null){ if(body.getOwner() instanceof Class){ return ((GroovityClassLoader)((Class)body.getOwner()).getClassLoader()).getScriptHelper(); } } throw new RuntimeException("Could not find ScriptHelper for "+body); }
public static Action<Object> action(final Closure<?> closure) { final Closure<?> copy = closure.rehydrate(null, closure.getOwner(), closure.getThisObject()); return new NoDelegateClosureAction(copy); }
return getResolveStrategy(); } else if ("thisObject".equals(property)) { return getThisObject(); } else { switch(resolveStrategy) {
private static <T> void configureTarget(Closure configureClosure, T target, ConfigureDelegate closureDelegate) { if (!(configureClosure instanceof GeneratedClosure)) { new ClosureBackedAction<T>(configureClosure, Closure.DELEGATE_FIRST, false).execute(target); return; } // Hackery to make closure execution faster, by short-circuiting the expensive property and method lookup on Closure Closure withNewOwner = configureClosure.rehydrate(target, closureDelegate, configureClosure.getThisObject()); new ClosureBackedAction<T>(withNewOwner, Closure.OWNER_ONLY, false).execute(target); } }
try{ Closure asyncBody; if(body.getThisObject() instanceof Class){
try{ Closure asyncBody; if(body.getThisObject() instanceof Class){
if(body.getThisObject() instanceof Class){
if(body.getThisObject() instanceof Class){
final Object owner = closure.getOwner(); final Object delegate = closure.getDelegate(); final Object thisObject = closure.getThisObject(); final int resolveStrategy = closure.getResolveStrategy(); boolean invokeOnDelegate = false;
final Object owner = closure.getOwner(); final Object delegate = closure.getDelegate(); final Object thisObject = closure.getThisObject(); final int resolveStrategy = closure.getResolveStrategy(); boolean invokeOnDelegate = false;
final Object owner = closure.getOwner(); final Object delegate = closure.getDelegate(); final Object thisObject = closure.getThisObject(); final int resolveStrategy = closure.getResolveStrategy(); boolean invokeOnDelegate = false;