@SuppressWarnings("unchecked") public static <T> T fix(Object o) { try { if (safeGroovyIsCase(o, GString.class)) { return (T)ScriptBytecodeAdapter.asType(o, String.class); } else { return (T)o; } } catch (Throwable e) { throw Exceptions.propagate(e); } }
@SuppressWarnings("unchecked") public static <T> Callable<T> callableFromRunnable(final Runnable job) { try { if (safeGroovyIsCase(job, Callable.class)) { return (Callable<T>)ScriptBytecodeAdapter.asType(job, Callable.class); } else { return CallableFromRunnable.newInstance(job, null); } } catch (Throwable e) { throw Exceptions.propagate(e); } }
private boolean groovyIsCaseInvocation(Object switchValue, Class<?> caseExpression) throws Throwable { // We expect this to be equivalent to: // org.codehaus.groovy.runtime.ScriptBytecodeAdapter.isCase(switchValue, caseExpression); boolean result = org.apache.brooklyn.util.groovy.GroovyJavaMethods.safeGroovyIsCase(switchValue, caseExpression); boolean equiv = org.codehaus.groovy.runtime.ScriptBytecodeAdapter.isCase(switchValue, caseExpression); assertEquals(result, equiv, "switchValue="+switchValue+"; caseExpression="+caseExpression); return result; }
@SuppressWarnings("unchecked") public static <T> Predicate<T> castToPredicate(Object o) { try { if (safeGroovyIsCase(o, Closure.class)) { return predicateFromClosure((Closure<Boolean>)o); } else { return (Predicate<T>) o; } } catch (Throwable e) { throw Exceptions.propagate(e); } }
@SuppressWarnings("unchecked") public static <T> Closure<T> castToClosure(Object o) { try { if (ScriptBytecodeAdapter.compareEqual(o, null)) { return (Closure<T>)ScriptBytecodeAdapter.castToType(o, Closure.class); } else if (safeGroovyIsCase(o, Closure.class)) { return (Closure<T>)ScriptBytecodeAdapter.castToType(o, Closure.class); } else if (o instanceof Runnable) { return closureFromRunnable((Runnable)ScriptBytecodeAdapter.createPojoWrapper(ScriptBytecodeAdapter.castToType(o, Runnable.class), Runnable.class)); } else if (o instanceof Callable) { return closureFromCallable((Callable<T>)ScriptBytecodeAdapter.createPojoWrapper(ScriptBytecodeAdapter.castToType(o, Callable.class), Callable.class)); } else if (o instanceof Function) { return closureFromFunction((Function<Object, T>)ScriptBytecodeAdapter.createPojoWrapper(ScriptBytecodeAdapter.castToType(o, Function.class), Function.class)); } else { throw new IllegalArgumentException("Cannot convert to closure: o="+o+"; type="+(o != null ? o.getClass() : null)); } } catch (Throwable e) { throw Exceptions.propagate(e); } }