Search in sources :

Example 1 with NewInstanceMetaMethod

use of org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod in project groovy by apache.

the class MixinInMetaClass method staticMethod.

private static void staticMethod(final MetaClass self, List<MetaMethod> arr, final CachedMethod method) {
    CachedClass[] paramTypes = method.getParameterTypes();
    if (paramTypes.length == 0)
        return;
    NewInstanceMetaMethod metaMethod;
    if (paramTypes[0].isAssignableFrom(self.getTheClass())) {
        if (paramTypes[0].getTheClass() == self.getTheClass())
            metaMethod = new NewInstanceMetaMethod(method);
        else
            metaMethod = new NewInstanceMetaMethod(method) {

                public CachedClass getDeclaringClass() {
                    return ReflectionCache.getCachedClass(self.getTheClass());
                }
            };
        arr.add(metaMethod);
    } else {
        if (self.getTheClass().isAssignableFrom(paramTypes[0].getTheClass())) {
            metaMethod = new NewInstanceMetaMethod(method);
            arr.add(metaMethod);
        }
    }
}
Also used : NewInstanceMetaMethod(org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod)

Example 2 with NewInstanceMetaMethod

use of org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod in project groovy-core by groovy.

the class SimpleExtensionModule method createMetaMethods.

private void createMetaMethods(final Class extensionClass, final List<MetaMethod> metaMethods, final boolean isStatic) {
    CachedClass cachedClass = ReflectionCache.getCachedClass(extensionClass);
    CachedMethod[] methods = cachedClass.getMethods();
    for (CachedMethod method : methods) {
        if (method.isStatic() && method.isPublic() && method.getParamsCount() > 0) {
            // an extension method is found
            metaMethods.add(isStatic ? new NewStaticMetaMethod(method) : new NewInstanceMetaMethod(method));
        }
    }
}
Also used : NewInstanceMetaMethod(org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod) NewStaticMetaMethod(org.codehaus.groovy.runtime.metaclass.NewStaticMetaMethod) CachedMethod(org.codehaus.groovy.reflection.CachedMethod) CachedClass(org.codehaus.groovy.reflection.CachedClass)

Example 3 with NewInstanceMetaMethod

use of org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod in project groovy-core by groovy.

the class NewStaticMetaMethodTest method testInvokeMetaMethod.

public void testInvokeMetaMethod() throws Exception {
    Method method = getClass().getMethod("dummyMethod", new Class[] { String.class, String.class });
    assertTrue("Should have found a method", method != null);
    NewInstanceMetaMethod metaMethod = createNewMetaMethod(method);
    Object answer = metaMethod.invoke("abc", new Object[] { "xyz" });
    assertEquals("def", answer);
    assertTrue("Should not appear as static method", !metaMethod.isStatic());
}
Also used : NewInstanceMetaMethod(org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod) NewInstanceMetaMethod(org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod) Method(java.lang.reflect.Method) CachedMethod(org.codehaus.groovy.reflection.CachedMethod)

Example 4 with NewInstanceMetaMethod

use of org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod in project groovy-core by groovy.

the class MetaClassImpl method addNewInstanceMethod.

/**
     *Adds an instance method to this metaclass.
     *
     * @param method The method to be added
     */
public void addNewInstanceMethod(Method method) {
    final CachedMethod cachedMethod = CachedMethod.find(method);
    NewInstanceMetaMethod newMethod = new NewInstanceMetaMethod(cachedMethod);
    final CachedClass declaringClass = newMethod.getDeclaringClass();
    addNewInstanceMethodToIndex(newMethod, metaMethodIndex.getHeader(declaringClass.getTheClass()));
}
Also used : NewInstanceMetaMethod(org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod) CachedMethod(org.codehaus.groovy.reflection.CachedMethod) CachedClass(org.codehaus.groovy.reflection.CachedClass)

Example 5 with NewInstanceMetaMethod

use of org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod in project groovy-core by groovy.

the class MetaClassImpl method getProperties.

/**
     * Get all the properties defined for this type
     *
     * @return a list of MetaProperty objects
     */
public List<MetaProperty> getProperties() {
    checkInitalised();
    SingleKeyHashMap propertyMap = classPropertyIndex.getNullable(theCachedClass);
    if (propertyMap == null) {
        // GROOVY-6903: May happen in some special environment, like under Android, due
        // to classloading issues
        propertyMap = new SingleKeyHashMap();
    }
    // simply return the values of the metaproperty map as a List
    List ret = new ArrayList(propertyMap.size());
    for (ComplexKeyHashMap.EntryIterator iter = propertyMap.getEntrySetIterator(); iter.hasNext(); ) {
        MetaProperty element = (MetaProperty) ((SingleKeyHashMap.Entry) iter.next()).value;
        if (element instanceof CachedField)
            continue;
        // filter out DGM beans
        if (element instanceof MetaBeanProperty) {
            MetaBeanProperty mp = (MetaBeanProperty) element;
            boolean setter = true;
            boolean getter = true;
            if (mp.getGetter() == null || mp.getGetter() instanceof GeneratedMetaMethod || mp.getGetter() instanceof NewInstanceMetaMethod) {
                getter = false;
            }
            if (mp.getSetter() == null || mp.getSetter() instanceof GeneratedMetaMethod || mp.getSetter() instanceof NewInstanceMetaMethod) {
                setter = false;
            }
            if (!setter && !getter)
                continue;
        //  TODO: I (ait) don't know why these strange tricks needed and comment following as it effects some Grails tests
        //                if (!setter && mp.getSetter() != null) {
        //                    element = new MetaBeanProperty(mp.getName(), mp.getType(), mp.getGetter(), null);
        //                }
        //                if (!getter && mp.getGetter() != null) {
        //                    element = new MetaBeanProperty(mp.getName(), mp.getType(), null, mp.getSetter());
        //                }
        }
        ret.add(element);
    }
    return ret;
}
Also used : SingleKeyHashMap(org.codehaus.groovy.util.SingleKeyHashMap) NewInstanceMetaMethod(org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod) ComplexKeyHashMap(org.codehaus.groovy.util.ComplexKeyHashMap) GetMethodMetaProperty(org.codehaus.groovy.runtime.metaclass.MethodMetaProperty.GetMethodMetaProperty) GetBeanMethodMetaProperty(org.codehaus.groovy.runtime.metaclass.MethodMetaProperty.GetBeanMethodMetaProperty) GeneratedMetaMethod(org.codehaus.groovy.reflection.GeneratedMetaMethod) CachedField(org.codehaus.groovy.reflection.CachedField)

Aggregations

NewInstanceMetaMethod (org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod)12 CachedMethod (org.codehaus.groovy.reflection.CachedMethod)8 Method (java.lang.reflect.Method)4 CachedClass (org.codehaus.groovy.reflection.CachedClass)4 CachedField (org.codehaus.groovy.reflection.CachedField)2 GeneratedMetaMethod (org.codehaus.groovy.reflection.GeneratedMetaMethod)2 GetBeanMethodMetaProperty (org.codehaus.groovy.runtime.metaclass.MethodMetaProperty.GetBeanMethodMetaProperty)2 GetMethodMetaProperty (org.codehaus.groovy.runtime.metaclass.MethodMetaProperty.GetMethodMetaProperty)2 NewStaticMetaMethod (org.codehaus.groovy.runtime.metaclass.NewStaticMetaMethod)2 ComplexKeyHashMap (org.codehaus.groovy.util.ComplexKeyHashMap)2 SingleKeyHashMap (org.codehaus.groovy.util.SingleKeyHashMap)2