/** * Returns {@link NullObject#getNullObject()} if the receiver * (args[0]) is null. If it is not null, the recevier itself * is returned. */ public Object getCorrectedReceiver() { Object receiver = args[0]; if (receiver==null) { if (LOG_ENABLED) LOG.info("receiver is null"); receiver = NullObject.getNullObject(); } return receiver; }
/** * Provides a hook for type coercion of the given object to the required type * * @param type of object to convert the given object to * @param object the object to be converted * @return the original object or a new converted value * @throws Throwable if the coercion fails */ public static Object asType(Object object, Class type) throws Throwable { if (object == null) object = NullObject.getNullObject(); return invokeMethodN(object.getClass(), object, "asType", new Object[]{type}); }
public static void setProperty(Object messageArgument, Class senderClass, Object receiver, String messageName) throws Throwable { try { if (receiver==null) receiver=NullObject.getNullObject(); InvokerHelper.setProperty(receiver, messageName, messageArgument); } catch (GroovyRuntimeException gre) { throw unwrap(gre); } }
public static Object getProperty(Object object, String property) { if (object == null) { object = NullObject.getNullObject(); } if (object instanceof GroovyObject) { GroovyObject pogo = (GroovyObject) object; return pogo.getProperty(property); } else if (object instanceof Class) { Class c = (Class) object; return metaRegistry.getMetaClass(c).getProperty(object, property); } else { return ((MetaClassRegistryImpl) metaRegistry).getMetaClass(object).getProperty(object, property); } }
/** * Gives a replacement receiver for null. * In case of the receiver being null we want to do the method * invocation on NullObject instead. */ public void correctNullReceiver() { if (args[0]!=null) return; handle = handle.bindTo(NullObject.getNullObject()); handle = MethodHandles.dropArguments(handle, 0, targetType.parameterType(0)); if (LOG_ENABLED) LOG.info("binding null object receiver and dropping old receiver"); }
public static void setProperty(Object object, String property, Object newValue) { if (object == null) { object = NullObject.getNullObject(); } if (object instanceof GroovyObject) { GroovyObject pogo = (GroovyObject) object; pogo.setProperty(property, newValue); } else if (object instanceof Class) { metaRegistry.getMetaClass((Class) object).setProperty((Class) object, property, newValue); } else { ((MetaClassRegistryImpl) GroovySystem.getMetaClassRegistry()).getMetaClass(object).setProperty(object, property, newValue); } }
protected final boolean checkCall(Object receiver) { try { return receiver.getClass() == metaClass.getTheClass() // meta class match receiver && checkPojoMetaClass() && MetaClassHelper.sameClasses(params); } catch (NullPointerException e) { if (receiver == null) return checkCall(NullObject.getNullObject()); throw e; } }
protected final boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3, Object arg4) { try { return receiver.getClass() == metaClass.getTheClass() // meta class match receiver && checkPojoMetaClass() && MetaClassHelper.sameClasses(params, arg1, arg2, arg3, arg4); } catch (NullPointerException e) { if (receiver == null) return checkCall(NullObject.getNullObject(), arg1, arg2, arg3, arg4); throw e; } }
public Object call(Object receiver, Object[] args) throws Throwable { if (receiver == null) { try{ return CallSiteArray.defaultCall(this, NullObject.getNullObject(), args); } catch (GroovyRuntimeException gre) { throw ScriptBytecodeAdapter.unwrap(gre); } } else { return CallSiteArray.defaultCall(this, receiver, args); } }
protected final boolean checkCall(Object receiver, Object arg1) { try { return receiver.getClass() == metaClass.getTheClass() // meta class match receiver && checkPojoMetaClass() && MetaClassHelper.sameClasses(params, arg1); } catch (NullPointerException e) { if (receiver == null) return checkCall(NullObject.getNullObject(), arg1); throw e; } }
protected final boolean checkCall(Object receiver, Object arg1, Object arg2) { try { return receiver.getClass() == metaClass.getTheClass() // meta class match receiver && checkPojoMetaClass() && MetaClassHelper.sameClasses(params, arg1, arg2); } catch (NullPointerException e) { if (receiver == null) return checkCall(NullObject.getNullObject(), arg1, arg2); throw e; } }
protected final boolean checkCall(Object receiver, Object arg1, Object arg2, Object arg3) { try { return receiver.getClass() == metaClass.getTheClass() // meta class match receiver && checkPojoMetaClass() && MetaClassHelper.sameClasses(params, arg1, arg2, arg3); } catch (NullPointerException e) { if (receiver == null) return checkCall(NullObject.getNullObject(), arg1, arg2, arg3); throw e; } }
protected final boolean checkCall(Object receiver, Object[] args) { try { return receiver.getClass() == metaClass.getTheClass() // meta class match receiver && checkPojoMetaClass() && MetaClassHelper.sameClasses(params, args); } catch (NullPointerException e) { if (receiver == null) return checkCall(NullObject.getNullObject(), args); throw e; } }
public Object callGroovyObjectGetProperty(Object receiver) throws Throwable { if (receiver == null) { try { return InvokerHelper.getProperty(NullObject.getNullObject(), name); } catch (GroovyRuntimeException gre) { throw ScriptBytecodeAdapter.unwrap(gre); } } else { return acceptGroovyObjectGetProperty(receiver).getProperty(receiver); } }
public Object getProperty(Object receiver) throws Throwable { if (receiver == null) { try{ return InvokerHelper.getProperty(NullObject.getNullObject(), name); } catch (GroovyRuntimeException gre) { throw ScriptBytecodeAdapter.unwrap(gre); } } else { return acceptGetProperty(receiver).getProperty(receiver); } } }
public static Object getAttribute(Object object, String attribute) { if (object == null) { object = NullObject.getNullObject(); } if (object instanceof Class) { return metaRegistry.getMetaClass((Class) object).getAttribute(object, attribute); } else if (object instanceof GroovyObject) { return ((GroovyObject) object).getMetaClass().getAttribute(object, attribute); } else { return metaRegistry.getMetaClass(object.getClass()).getAttribute(object, attribute); } }
/** * Gives the meta class to an Object. */ public void getMetaClass() { Object receiver = args[0]; if (receiver == null) { mc = NullObject.getNullObject().getMetaClass(); } else if (receiver instanceof GroovyObject) { mc = ((GroovyObject) receiver).getMetaClass(); } else if (receiver instanceof Class) { Class c = (Class) receiver; ClassLoader cl = c.getClassLoader(); try { Class.forName(c.getName(), true, cl); } catch (ClassNotFoundException e) {} mc = GroovySystem.getMetaClassRegistry().getMetaClass(c); this.cache &= !ClassInfo.getClassInfo(c).hasPerInstanceMetaClasses(); } else { mc = ((MetaClassRegistryImpl) GroovySystem.getMetaClassRegistry()).getMetaClass(receiver); this.cache &= !ClassInfo.getClassInfo(receiver.getClass()).hasPerInstanceMetaClasses(); } mc.initialize(); }
public static void setAttribute(Object object, String attribute, Object newValue) { if (object == null) { object = NullObject.getNullObject(); } if (object instanceof Class) { metaRegistry.getMetaClass((Class) object).setAttribute(object, attribute, newValue); } else if (object instanceof GroovyObject) { ((GroovyObject) object).getMetaClass().setAttribute(object, attribute, newValue); } else { metaRegistry.getMetaClass(object.getClass()).setAttribute(object, attribute, newValue); } }
/** * Invokes the given method on the object. */ public static Object invokeMethod(Object object, String methodName, Object arguments) { if (object == null) { object = NullObject.getNullObject(); //throw new NullPointerException("Cannot invoke method " + methodName + "() on null object"); } // if the object is a Class, call a static method from that class if (object instanceof Class) { Class theClass = (Class) object; MetaClass metaClass = metaRegistry.getMetaClass(theClass); return metaClass.invokeStaticMethod(object, methodName, asArray(arguments)); } // it's an instance; check if it's a Java one if (!(object instanceof GroovyObject)) { return invokePojoMethod(object, methodName, arguments); } // a groovy instance (including builder, closure, ...) return invokePogoMethod(object, methodName, arguments); }
/** * Sets the metaclass for a given class. * * @param self the class whose metaclass we wish to set * @param metaClass the new MetaClass * @since 1.6.0 */ public static void setMetaClass(Class self, MetaClass metaClass) { final MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry(); if (metaClass == null) metaClassRegistry.removeMetaClass(self); else { if (metaClass instanceof HandleMetaClass) { metaClassRegistry.setMetaClass(self, ((HandleMetaClass)metaClass).getAdaptee()); } else { metaClassRegistry.setMetaClass(self, metaClass); } if (self==NullObject.class) { NullObject.getNullObject().setMetaClass(metaClass); } } }