public MixinInMetaClass(ExpandoMetaClass emc, CachedClass mixinClass) { super(softBundle); this.emc = emc; this.mixinClass = mixinClass; constructor = findDefaultConstructor(mixinClass); emc.addMixinClass(this); }
public CachedClass getDeclaringClass() { return mixinInMetaClass.getInstanceClass(); }
public Object castToMixedType(Object obj, Class type) { for (MixinInMetaClass mixin : mixinClasses) { if (type.isAssignableFrom(mixin.getMixinClass().getTheClass())) return mixin.getMixinInstance(obj); } return null; }
public void putAt(Class key, Object value) { for (MixinInMetaClass mixin : mixinClasses) if (mixin.getMixinClass().getTheClass() == key) { mixin.setMixinInstance(object, value); return; } throw new RuntimeException("Class " + key + " isn't mixed in " + object.getClass()); } }
public Object invoke(Object object, Object[] arguments) { property.setProperty(mixinInMetaClass.getMixinInstance(object), arguments[0]); return null; } };
final MixinInMetaClass mixin = new MixinInMetaClass(mc, cachedCategoryClass); staticMethod(self, arr, (CachedMethod) method);
final MixinInMetaClass mixin = new MixinInMetaClass(mc, cachedCategoryClass); continue; if (method instanceof CachedMethod && hasAnnotation((CachedMethod) method, Internal.class)) continue; staticMethod(self, arr, (CachedMethod) method); } else if (method.getDeclaringClass().getTheClass() != Object.class || method.getName().equals("toString")) {
/** * Extend object with category methods. * All methods for given class and all super classes will be added to the object. * * @param self any Class * @param categoryClasses a category classes to use * @since 1.6.0 */ public static void mixin(MetaClass self, List<Class> categoryClasses) { MixinInMetaClass.mixinClassesToMetaClass(self, categoryClasses); }
public MetaMethod findMixinMethod(String methodName, Class[] arguments) { for (MixinInMetaClass mixin : mixinClasses) { final CachedClass mixinClass = mixin.getMixinClass(); MetaClass metaClass = mixinClass.classInfo.getMetaClassForClass(); if (metaClass == null) {
if (key.isAssignableFrom(mixin.getMixinClass().getTheClass())) { return new GroovyObjectSupport() { final Object mixedInInstance = mixin.getMixinInstance(object); setMetaClass(new OwnedMetaClass(InvokerHelper.getMetaClass(mixedInInstance)) { @Override
public void putAt (Class key, Object value) { for (MixinInMetaClass mixin : mixinClasses) if (mixin.getMixinClass().getTheClass() == key) { mixin.setMixinInstance(object, value); return; } throw new RuntimeException("Class " + key + " isn't mixed in " + object.getClass()); } }
public Object invoke(Object object, Object[] arguments) { return property.getProperty(mixinInMetaClass.getMixinInstance(object)); } };
final MixinInMetaClass mixin = new MixinInMetaClass(mc, cachedCategoryClass); staticMethod(self, arr, (CachedMethod) method); } else if (method.getDeclaringClass().getTheClass() != Object.class || method.getName().equals("toString")) {
/** * Extend object with category methods. * All methods for given class and all super classes will be added to the object. * * @param self any Class * @param categoryClasses a category classes to use * @since 1.6.0 */ public static void mixin(MetaClass self, List<Class> categoryClasses) { MixinInMetaClass.mixinClassesToMetaClass(self, categoryClasses); }
public MetaMethod findMixinMethod(String methodName, Class[] arguments) { for (MixinInMetaClass mixin : mixinClasses) { final CachedClass mixinClass = mixin.getMixinClass(); MetaClass metaClass = mixinClass.classInfo.getMetaClassForClass(); if (metaClass == null) {
public Object castToMixedType(Object obj, Class type) { for (MixinInMetaClass mixin : mixinClasses) { if (type.isAssignableFrom(mixin.getMixinClass().getTheClass())) return mixin.getMixinInstance(obj); } return null; }
public void putAt(Class key, Object value) { for (MixinInMetaClass mixin : mixinClasses) if (mixin.getMixinClass().getTheClass() == key) { mixin.setMixinInstance(object, value); return; } throw new RuntimeException("Class " + key + " isn't mixed in " + object.getClass()); } }